View Full Version : Problema em C


jorijo
12-07-2006, 16:55
Boas!
pessoal to com 1ligeiro problema num programa em c q contem movimento.
o progrma q tento fzer eh parecido com o jogo "frogger" so q n consigo tornar o movimento do sapo independente do movimento dos carros, ou seja, quando carrego nas teclas direccionais do sapo o movimento dos carros para ate premir a tecla enter. se alguem puder ajudar agradeco... desculpam a extensao do post!


void jogo(void)
{
/*declaração e inicialização de variáveis*/
int carro1=0,carro2=0,parar=0,sapo_lin=32,sapo_col=40;
int tecla;

/*desenho do Tabuleiro de jogo*/
c.fcolor(3);
cenario();

/*posiciona o sapo no jogo*/
c.fcolor(1);
gotoxy(sapo_lin,sapo_col);printf("%c%c",176,176);
gotoxy(40,10);printf("Posi%c%co (tecla):",135,132);
/*-----Jogo------*/
do
{
for(int i=11;i<=79&&!parar;i++)
{
if(i<=69)
{
/*movimento Carro 1*/
c.fcolor(2); /* atribui a cor vermelha ao Carro1*/
gotoxy(27,i);printf("%c",219); /* desenha o caracter do Carro1*/
gotoxy(28,i);printf("%c",219);
for(int f=1;f<10000000;f++); /* movimento do carro1*/

if (carro1==5) /* dimensão do Carro 1 - 5 caracteres*/
{
gotoxy(27,i-carro1);printf(" "); /* apaga a posicao anterior à dimensao do Carro1*/
gotoxy(28,i-carro1);printf(" ");

}
else
carro1=carro1+1;

/*movimento Carro 2*/
c.fcolor(0); /* atribui a cor azul ao Carro2*/
gotoxy(23,80-i);printf("%c",219); /* desenha o caracter do Carro2*/
gotoxy(22,80-i);printf("%c",219);
for(f=1;f<10000000;f++); /* movimento do Carro2*/

if (carro2==10) /* dimensão do Carro 2 - 10 caracateres*/
{
gotoxy(22,80-i+carro2);
printf(" "); /* apaga a posicao anterior à dimensao do Carro2*/
gotoxy(23,80-i+carro2);
printf(" ");
}
else
carro2=carro2+1;

}
/*garantir a estrutura do cenario*/
c.fcolor(3);
gotoxy(27,10);
printf("%c",186);
gotoxy(28,10);
printf("%c",186);
gotoxy(27,70);
printf("%c",186);
gotoxy(28,70);
printf("%c",186);
gotoxy(22,70);
printf("%c",186);
gotoxy(23,70);
printf("%c",186);


/*apaga desenho dos Carros após passar limites do cenário*/
if (i>69)
{
gotoxy(27,i-carro1);
printf(" ");
gotoxy(28,i-carro1);
printf(" ");
gotoxy(22,80-i+carro2);
printf(" ");
gotoxy(23,80-i+carro2);
printf(" ");
}
if(kbhit())
{


gotoxy(sapo_lin,sapo_col);
printf(" ");
fflush(stdin);

gotoxy(40,27);
printf(" ");
c.fcolor(3);
/*inserção da posição do sapo*/
gotoxy(40,27);scanf("%d",&tecla);
if(tecla==1&&sapo_col>11) /* anda uma coluna para a esquerda (-1 Coluna)*/
sapo_col=sapo_col-1;
else
{
if(tecla==2&&sapo_lin<32) /* anda uma linha para baixo (+1 Linha)*/
sapo_lin=sapo_lin+1;
else
{
if(tecla==3&&sapo_col<68) /* anda uma coluna para a direita (+1 Coluna)*/

sapo_col=sapo_col+1;
else
{
if(tecla==5) /* anda uma linha para cima (-1 Linha)*/
sapo_lin=sapo_lin-1;
}

}
}

}
//posicionar o sapo na posição que o utilizador escolheu*/
if(((sapo_lin==30)||(sapo_lin==20)||(sapo_lin==25) )&&tecla==5)
sapo_lin=sapo_lin-1;
if(((sapo_lin==30)||(sapo_lin==20)||(sapo_lin==25) )&&tecla==2)
sapo_lin=sapo_lin+1;
c.fcolor(1);
gotoxy(sapo_lin,sapo_col);printf("%c%c",176,176);

//teste as condições de paragem: fim de jogo com sucesso e atropelamento*/
if (((sapo_lin==27)&&(sapo_col<=i)&&(sapo_col>=i-carro1))||((sapo_lin==28)&&(sapo_col<=i)&&(sapo_col>=i-carro1))||((sapo_lin==22)&&(sapo_col>=80-i-1)&&(sapo_col<=80-i-1+carro1))||((sapo_lin==23)&&(sapo_col>=80-i-1)&&(sapo_col<=80-i-1+carro2)))
{
gotoxy(19,45);printf("E era uma vez um Sapo...",144);
parar=1;
}
if(sapo_lin==19)
{
gotoxy(19,55);printf("PARAB%cNS",144);
parar=1;

}
}
}while(!kbhit());/* enquanto não clicar numa tecla, o movimento do carro nao para, no entanto*/
getch(); /* para sair e voltar ao menu principal*/
}