/*

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 redireciona (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, linha, coluna;

int main ()
{
   clrscr ();
   sentinela=0;
   linha=10;
   coluna=36;
   while (sentinela==0)
   {
      mostra ();

      tecla=getch ();
      redireciona ();

      if (tecla==32) /*32 e codigo ASCII de Barra de Espaco */
      {
	 sentinela=1;
      }
   }
   return 0;
}


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)
{

    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<21)
	{
	    linha=linha+1;
	}
	else
	{
	    linha=21;
	}
}

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

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


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

void pula_coluna (void)
{
   int laco_coluna;

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























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