Autor
|
Tema: Problema identificar teclas preisonadas (Solucionado) (Leído 3,114 veces)
|
andres_jk
Desconectado
Mensajes: 4
|
Hola, estoy aprendiendo a programar en C y queria hacer un jueguito pero tengo un problema con el movimiento que derrepente se hecha a perder, le meti fflush por todas partes y ni asi se arreglo, xdd, asi que no he seguido avanzando. Por favor si alguien lo puede revisar y hecharme una manito . (Como hago un spoiler?? ?) Este es el codigo. #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> struct nave{ char sprite; int x, y; }; int main(){ int i, j, b=3; char a[20][20]; char c; start: struct nave nave1; nave1.sprite=1; nave1.x=9; nave1.y=9; struct nave nave2; nave2.sprite=2; nave2.x=3; nave2.y=3; while(b!=0){ for(i=0; i<20;i++){ for(j=0; j<20; j++){ if(i==nave1.y && j==nave1.x && i==nave2.y && j==nave2.x){ b--; goto start; } else if(i==nave1.y && j==nave1.x){ a[i][j]=nave1.sprite; } else if(i==nave2.y && j==nave2.x){ a[i][j]=nave2.sprite; } else{ a[i][j]=' '; } } } system("pause"); //probe con getch() pero agrava el bug if(GetKeyState(38)) //37-40 son las flechitas if(nave1.y>0) nave1.y=nave1.y-1; if(GetKeyState(40)) if(nave1.y<19) nave1.y=nave1.y+1; if(GetKeyState(37)) if(nave1.x>0) nave1.x=nave1.x-1; if(GetKeyState(39)) if(nave1.x<19) nave1.x=nave1.x+1; } printf("\t\t\tGAME OVER!\n\n"); return 0; }
|
|
« Última modificación: 28 Octubre 2010, 15:50 pm por andres_jk »
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas!
¡¡¡¡Olvida el goto!!!!, haz el programa utilizando programacion estructurada (estructuras de control) y luego lo vuelves a colgar.
¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
andres_jk
Desconectado
Mensajes: 4
|
¡Buenas!
¡¡¡¡Olvida el goto!!!!, haz el programa utilizando programacion estructurada (estructuras de control) y luego lo vuelves a colgar.
¡Saludos!
Gracias, pero sin el goto pasa lo mismo, yo creo que tiene que ver con el teclado, sabes alguna otra forma de identificar si apreto una tecla o no?. Saludos!
|
|
|
En línea
|
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡Buenas!
Lo primero, quita el goto. Eso no es programacion estructurada y te va crear mas problemas que soluciones.
Para lo de las teclas, aprende a pensar y a investigar. En conio.h (que no te recomiendo utilizarla ya que solo viene con compiladores borland) tienes dos funciones con las que puedes investigar, que es lo que yo hice en su dia. La primera kbhit, y la segunda getch. Una de ellas te sirve para saber si se ha pulsado alguna tecla y la otra para capturar teclas directamente. Luego puedes mirar el ascii de la tecla presionada y asi posteriormente, cuando te haga falta saber que tecla has presionado, puedes comparar el ascii de la tecla presionada con los ascii de las teclas que conozcas... busca informacion sobre las funciones de conio.h y trastea con ellas.
¡Saludos!
|
|
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
Akai
Desconectado
Mensajes: 823
|
busca informacion sobre las funciones de conio.h y trastea con ellas.
O mejor no uses conio.h dado que está muy obsoleta. Casi que mejor investiga sobre funciones/bibliotecas que hagan eso sin usar conio
|
|
|
En línea
|
|
|
|
andres_jk
Desconectado
Mensajes: 4
|
Bueno, ya lo arregle, este e smi nuevo codigo, xdd. #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> struct cuerpo { char sprite; int x, y; }; struct plano { char sprite; int x, y; }; struct proy { char sprite; int x, y; int rango; }; int main() { int m, n, i, j, k, l, e=30, b=3; char c; struct cuerpo nave, player; struct proy bala; struct plano a[20][20]; nave.sprite=1; player.sprite=2; bala.sprite='`'; bala.rango=5; void start() { for(i=0; i<20; i++) { for(j=0; j<20; j++) { a[i][j].sprite=' '; a[i][j].x=i; a[i][j].y=j; } } } void pspawn() { player.x=19; player.y=10; } void bspawn() { bala.x=player.x-1; bala.y=player.y; } void ppos() { a[player.x][player.y].sprite=player.sprite; } void bpos() { a[bala.x][bala.y].sprite=bala.sprite; } void epos() { for(l=0; l<20; l++) { a[0][l].sprite=nave.sprite; } } void chkp() { if(player.x==0) { m=player.y; pspawn(); b--; a[0][m].sprite='X'; } } void chke() { if(bala.x==0) { m=bala.y; bspawn(); a[0][m].sprite='X'; } } void disp() { for(i=0; i<20; i++) { for(j=0; j<20; j++) { if(i==player.x && j==player.y) { ppos(); } else if (i==bala.x && j==bala.y) { bpos(); } else if (a[i][j].sprite!=nave.sprite && a[i][j].sprite!='X') { a[i][j].sprite=' '; } printf("%c ", a [i ][j ]. sprite); } } printf("\nVidas: %i Ammo: %i\n", b , e ); } void mov() { c='1'; k=0; switch(c) { case 'w': if(player.x>0) player.x=(player.x)-1; break; case 'd': if(player.y<19) player.y=(player.y)+1; break; case 's': if(player.x<19) player.x=(player.x)+1; break; case 'a': if(player.y>0) player.y=(player.y)-1; break; case ' ': bala.x=player.x-1; bala.y=player.y; a[bala.x][bala.y].sprite='*'; while(k<bala.rango) { bala.x=bala.x-1; chke(); disp(); k++; } e--; break; default: break; } } start(); epos(); pspawn(); disp(); while(b!=0 && e!=0) { disp(); mov(); chkp(); bspawn(); } if(b==0 || e==0) { printf("\t\t\tGAME OVER!\n\n"); } return 0; }
|
|
« Última modificación: 28 Octubre 2010, 06:07 am por andres_jk »
|
En línea
|
|
|
|
|
|