Logo Hardware.com.br
Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas

Fio da meada para iniciar Telejogo em C.

#1 Por Thunder 11/03/2010 - 10:50
Estou com um exercício de programação que consiste em criar um "telejogo" do Atari em C, ja criei o campo, é um retangulo de 20 linhas por 40 colunas, agora preciso criar os "goleiros" que serão movidos para cima e para baixo usando o teclado, e a bola que deve se mover em todas as direções dentro do "campo"....o problema é que não tenho idéia de como usar o teclado para mover um elemento na tela, alguém pode me dar o fio da meada? NÃO PRECISA SER CÓDIGO, só algo teórico para que eu possa me direcionar...obrigado.
Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas
#4 Por Thunder
17/03/2010 - 17:28
Estou tendo um problema ao movimentar a barra para cima e para baixo usando as setas, a barra desaparece e só aparece quando pressiono uma das setas e ela tem que ficar aparecendo na tela a espera do comando, segue abaixo o código só para a barra.

[php]

/*Compilacao: gcc -o projeto1 conio_v3.c projeto1.c -Wall*/
#include /* printf(), scanf() */
#include "conio_v3.h" /* gotoxy(); clrscr(); */
#include
#include
#define barra 3
#define ESC 27
void barra1(int linha, int coluna);
void limpa(int linha,int coluna);
int main(){
int linha=10, coluna= 10, tecla;
clrscr();
do{
if(kbhit()){
tecla = getch();
if(tecla == 80){
barra1(linha, coluna);
Sleep(100);
limpa(linha, coluna);
linha++;
}else if(tecla == 72){
barra1(linha, coluna);
Sleep(100);
limpa(linha, coluna);
linha--;
}
}
}while(tecla != ESC);
return 0;
}
void barra1(int linha, int coluna){
int i;
for(i=0;i if(i == 2)
{
gotoxy(coluna,linha++);
printf("%c",179);
}
else
{
gotoxy(coluna,linha++);
printf("%c\n",179);
}
}
}
void limpa(int linha, int coluna){
int i;
for(i=0;i if(i == 2)
{
gotoxy(coluna,linha++);
printf("%c",000);
}
else
{
gotoxy(coluna,linha++);
printf("%c\n",000);
}
}
}


[/php]
Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas
#6 Por Thunder
17/03/2010 - 18:03
tpcvasco disse:
Chame primeiro o limpa() e depois o barra1(), não o inverso.


Então, chamando primeiro o limpa() e depois o barra1(), o limpa() estava ficando sem efeito....resolvi com o código abaixo, chamando o barra1() após a atualização da variavel linha, obrigado pela ajuda...existe uma maneira mais eficiente de se fazer isso?
[PHP]

if(kbhit()){
tecla = getch();
if(tecla == 80){
barra1(linha, coluna);
Sleep(100);
limpa(linha, coluna);
linha++;
barra1(linha, coluna);
}else if(tecla == 72){
barra1(linha, coluna);
Sleep(100);
limpa(linha, coluna);
linha--;
barra1(linha, coluna);
}
}

[/PHP]
Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas
#7 Por Thunder
18/03/2010 - 15:04
Coloquei as 2 barras no campo, a da esquerda se movimenta perfeitamente, mas a da direita precisa pressionar 2 vezes para que comece a se movimentar e quando se movimenta a barra esquerda a da direita tb se move uma posição, preciso que os movimentos sejam independentes....segue o código abaixo, desde ja agradeço qualquer ajuda....



do{
if(kbhit()){
tecla = getch();
if(tecla == 122){
Sleep(tempo);
limpa(linha, coluna);
linha++;
barra1(linha, coluna);
}else if(tecla == 97){
barra1(linha, coluna);
Sleep(tempo);
limpa(linha, coluna);
linha--;
barra1(linha, coluna);
}

if(tecla == 80){
Sleep(tempo);
limpa2(linha2, coluna2);
linha2++;
barra2(linha2, coluna2);
}else if(tecla == 72){
barra2(linha2, coluna2);
Sleep(tempo);
limpa2(linha2, coluna2);
linha2--;
barra2(linha2, coluna2);
}
}
}while(tecla != ESC);

Thunder
Thunder General de Pijama Registrado
5.9K Mensagens 24 Curtidas
#9 Por Thunder
18/03/2010 - 19:56
FabianoTraple disse:
Thunder....

Bem provável que seu problema esteja na forma que o teclado é lido, faça alguns testes relacionado a repetição do teclado, experimente apertar duas teclas ao mesmo tempo, para ver o que ocorre.


Opa, ja descobri o erro, nas teclas de seta é retornado o valor 224 e espera um novo getch()....a solução foi fazer 2 getch()s....
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal