/*

Elaborar um programa que coloque em tela uma das seguintes
mensagens
"Sobe"
"Desce"
"Direita"
"Esquerda"
"Parado"
Essas mensagens devem ser apresentadas quando digitados o seu
numero.

Implementar os quatro movimentos de um mira, atraves dos
caracteres

+---------------------+
|                     |                    ^
|                     |                    |
|           *         |
|          ***        |                    E
|           *         |             <-- S     D-->
|                     |                    X
|                     |
|                     |                    |
|                     |                    v
+---------------------+

Barra de espaco para sair do Programa
*/

#include <stdio.h>
#include <conio.h>

void mostra (void);
void desenhaquadro (void);
void redireciona (void);
void digitalimite (void);
void limite_acima (void);
void limite_abaixo (void);
void limite_direita (void);
void limite_esquerda (void);
void pula_linha (void);
void pula_coluna (void);

/* limites calculados para resolucao de DOS 24 Linhas x 80 Colunas */

char tecla;
int sentinela, linhafim, colunafim, linha, coluna;

int main ()
{
   digitalimite ();
   clrscr ();
   desenhaquadro ();
   sentinela=0;
   while (sentinela==0)
   {
      /*mostra ();*/
      desenhaquadro ();
      tecla=getch ();
      redireciona ();
      if (tecla==32) /*32 e codigo ASCII de Barra de Espaco */
      {
	 sentinela=1;
      }
   }
   return 0;
}
void digitalimite (void)
{
   clrscr ();
   printf ("Digite quantidade de linhas  : ");
   scanf ("%d", &linhafim);
   linha=(linhafim/2)-1;
   printf ("Digite quantidade de colunas : ");
   scanf ("%d", &colunafim);
   coluna=(colunafim/2)-1;
}

void desenhaquadro (void)
{
   int laco_des_lin, laco_des_col;
   for (laco_des_lin=0; laco_des_lin<=linhafim;laco_des_lin=laco_des_lin+1)
   {
      for (laco_des_col=0; laco_des_col<=colunafim; laco_des_col=laco_des_col+1)
      {
	 if (laco_des_lin==0)
	 {
	     if (laco_des_col==colunafim)
	     {
		 printf ("-\n");
	     }
	     else
	     {
		 printf ("-");
	     }
	 }
	 else
	 {
	     if (laco_des_lin==linhafim)
	     {
		 if (laco_des_col==colunafim)
		 {
		     printf ("");
		 }
		 else
		 {
		     printf ("_");
		 }
	     }
	     else
	     {
		if (laco_des_col==0)
		{
		    printf ("|");
		}
		 else
		 {
		    if (laco_des_col==colunafim)
		    {
			printf ("|\n");
		    }
		    else
		    {
		       if (laco_des_col==coluna && laco_des_lin==linha)
		       {
			   printf (" | ");
			   laco_des_col=laco_des_col+2;
		       }
		       else
		       {
			   if (laco_des_col==coluna && laco_des_lin==linha+1)
			   {
			      printf ("-+-");
			      laco_des_col=laco_des_col+2;
			   }
			   else
			   {
			       if (laco_des_col==coluna && laco_des_lin==linha+2)
			       {
				   printf (" | ");
				   laco_des_col=laco_des_col+2;
			       }
			       else
			       {
				   printf (" ");
			       }
			   }
		       }
		    }
		 }
	     }
	 }
      }
   }
   getch ();
}

void redireciona (void)
{
   clrscr ();
   switch (tecla)
   {
      case 'e': limite_acima ();
		break;
      case 's': limite_direita ();
		break;
      case 'd': limite_esquerda ();
		break;
      case 'x': limite_abaixo ();
		break;
      case 'E': limite_acima ();
		break;
      case 'S': limite_direita ();
		break;
      case 'D': limite_esquerda ();
		break;
      case 'X': limite_abaixo ();
		break;
   }
}


void mostra (void)
{
    clrscr ();
    pula_linha ();
    pula_coluna ();
    printf (" | \n");
    pula_coluna ();
    printf ("-+-\n");
    pula_coluna ();
    printf (" |");

}


void limite_acima (void)
{
	if (linha>=0)
	{
	    linha=linha-1;
	}
	else
	{
	    linha=-1;
	}
}

void limite_abaixo (void)
{
	if (linha<linhafim)
	{
	    linha=linha+1;
	}
	else
	{
	    linha=linhafim;
	}
}

void limite_direita (void)
{
	if (coluna>=0)
	{
	    coluna=coluna-1;
	}
	else
	{
	    coluna=-1;
	}
}

void limite_esquerda (void)
{
	if (coluna<colunafim)
	{
	    coluna=coluna+1;
	}
	else
	{
	    coluna=colunafim;
	}
}


void pula_linha (void)
{
    int laco_linha;
    for (laco_linha=0; laco_linha<=linha && laco_linha<=linhafim; laco_linha=laco_linha+1)
    {
	printf ("\n");
    }
}

void pula_coluna (void)
{
   int laco_coluna;

   for (laco_coluna=0; laco_coluna<=coluna && laco_coluna <=colunafim; laco_coluna=laco_coluna+1)
    {
	printf (" ");
    }
}























/* Desenvolvido por Cristian Bueno - FMU - RA 502.895/7 */