#include <stdio.h>
#include <math.h>

#define MAXCOLS 57
#define MAXFILS 18
#define BLANCO ' '
#define DERECHO 1
#define IZQUIERDO 0

typedef struct {
	char pixel[MAXFILS][MAXCOLS];
	int ancho, alto;
} Pantalla;

typedef struct {
	int lado;
	int x;
	int y;
} Cuadrado;

void limpiarPantalla(Pantalla *pantalla){
	int i, j;

	for(i=0; i<pantalla->alto; i++){
		for(j=0; j<pantalla->ancho; j++){
			pantalla->pixel[i][j] = BLANCO;
		}
	}
}

void imprimirPantalla(Pantalla *p){
	int i, j;

	system("clear");
	for(i=0; i<p->alto; i++){
		for(j=0; j<p->ancho; j++){
			printf("%c", p->pixel[i][j]);
		}
		printf("\n");
	}
}

void dibujarCuadrado(Pantalla *p, Cuadrado c){
	int i, j;
        for(i=c.y; i<c.y+c.lado; i++){
                for(j=c.x; j<c.x+c.lado; j++){
                        p->pixel[i][j] = '*';
                }
        }
}

void animarCuadradoDer(Pantalla *p, Cuadrado c){
	int i, j;

	for(i=0; i<(p->ancho - c.lado); i++){
		limpiarPantalla(p);
		c.x = i;
		dibujarCuadrado(p, c);
		imprimirPantalla(p);
		//sleep(1);
	}
}

void animarCuadrado(Pantalla *p, Cuadrado c){
	int i, j, sentido;

	i = 0;
	sentido = DERECHO;
	while(1){
		limpiarPantalla(p);
		c.x = i;
		dibujarCuadrado(p, c);
		imprimirPantalla(p);
		if(sentido==DERECHO && i==p->ancho-c.lado)
			sentido = IZQUIERDO;
		if( sentido == IZQUIERDO && i==0 )
			sentido = DERECHO;
		if( sentido == DERECHO)
			i++;
		else
			i--;
		//sleep(1);
	}
}

int main(){
	Pantalla mipanta;
	Cuadrado cuadrado = {4, 0, 2};
	int i;

	mipanta.ancho = MAXCOLS;
	mipanta.alto = MAXFILS;
	limpiarPantalla(&mipanta);
	dibujarCuadrado(&mipanta, cuadrado);
	imprimirPantalla(&mipanta);
	//animarCuadradoDer(&mipanta, cuadrado);
	animarCuadrado(&mipanta, cuadrado);
	return 0;
}

