elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con este programa (dos errores)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con este programa (dos errores)  (Leído 1,290 veces)
Brayantp

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda con este programa (dos errores)
« en: 30 Octubre 2014, 01:29 am »

buenas necesito hacer un programa que inicie con un caracter moviendose en la pantalla, si este llegase al final de la linea en la que este vuelva al origen, poder ademas mover el caracter con las flechas de la pantalla y al presionar la tecla para salir esta me imprima un contador de cuantas veces el usuario pulso cada fecla de direccion:

hasta ahora lo tengo asi.

Código
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<windows.h>
  4. #define ARRIBA 72
  5. #define ABAJO 80
  6. #define IZQUIERDA 75
  7. #define DERECHA 77
  8. #define SALIR 115
  9. int x=40,y=14,contArri,contAbaj,contIzqu,contDere;
  10. int tecla,pos=3;
  11.  
  12. void quitarC(){
  13. HANDLE hCon;
  14. hCon=GetStdHandle(STD_OUTPUT_HANDLE);
  15. CONSOLE_CURSOR_INFO c;
  16. c.dwSize=1;
  17. c.bVisible=FALSE;
  18.  
  19. SetConsoleCursorInfo(hCon,&c);
  20. }
  21. void marco(){
  22. for(int x=1;x<80;x++){
  23. gotoxy(x,1);printf("%c",177);
  24. gotoxy(x,26);printf("%c",177);
  25. }
  26. for(int y=1;y<27;y++){
  27. gotoxy(1,y);printf("%c",177);
  28. gotoxy(80,y);printf("%c",177);
  29. }
  30. }
  31. void caracter(){
  32. gotoxy(x,y);printf("*");
  33. }
  34. void limpiarCar(){
  35. gotoxy(x-1,y);printf(" ");
  36. gotoxy(x+1,y);printf(" ");
  37. gotoxy(x,y-1);printf(" ");
  38. gotoxy(x,y+1);printf(" ");
  39.  
  40. }
  41. void inicio(){
  42. if(x<2){
  43. x=40;y=14;
  44. for(int y=1;y<27;y++){
  45. gotoxy(1,y);printf("%c",177);}
  46. }
  47. if(x>79){
  48. x=40;y=14;
  49. for(int y=1;y<27;y++){
  50. gotoxy(80,y);printf("%c",177);}
  51. }
  52. if(y<2){
  53. x=40;y=14;
  54. for(int x=1;x<80;x++){
  55. gotoxy(x,1);printf("%c",177);}
  56. }
  57. if(y>25){
  58. x=40;y=14;
  59. for(int x=1;x<80;x++){
  60. gotoxy(x,26);printf("%c",177);}
  61. }
  62. while(kbhit()){
  63. tecla=getch();
  64. if(tecla==ARRIBA){pos=1;}
  65. if(tecla==ABAJO){pos=2;}
  66. if(tecla==IZQUIERDA){pos=3;}
  67. if(tecla==DERECHA){pos=4;}
  68. }
  69. if(pos==1)y--;
  70. if(pos==2)y++;
  71. if(pos==3)x--;
  72. if(pos==4)x++;
  73. }
  74.  
  75. void limpiar(){
  76. for(int x=2;x<78;x++)
  77. for(int y=2;y<24;y++){
  78. gotoxy(x,y);printf(" ");
  79. break;
  80. }
  81. }
  82. void contadorA(){
  83. if(tecla==ARRIBA){contArri++;}
  84. if(tecla==ABAJO){contAbaj++;}
  85. if(tecla==IZQUIERDA){contIzqu++;}
  86. if(tecla==DERECHA){contDere++;}
  87. }
  88. void contadorB(){
  89. for(int x=38;x<56;x++){
  90. gotoxy(x,11);printf("%c",197);
  91. gotoxy(x,18);printf("%c",197);
  92. }
  93. for(int y=11;y<19;y++){
  94. gotoxy(38,y);printf("%c",197);
  95. gotoxy(55,y);printf("%c",197);
  96. }
  97. gotoxy(40,13);printf("Arriba:%d",contArri);
  98. gotoxy(40,14);printf("Abajo:%d",contAbaj);
  99. gotoxy(40,15);printf("Izquierda:%d",contIzqu);
  100. gotoxy(40,16);printf("Derecha:%d",contDere);
  101. }
  102. main(){
  103. quitarC();
  104. marco();
  105. while(tecla!=SALIR){
  106. contadorA();
  107. caracter();
  108. limpiarCar();
  109. inicio();
  110. Sleep(25);
  111. }
  112. while(tecla==SALIR){
  113. limpiar();contadorB();break;
  114. }
  115. }

tengo 2 problemas, cuando imprimo el contador me imprime cuantas veces se movio el caracter no cuantas veces pulse las teclas, ademas si mi caracter se mueve antes de llegar a la pared comienza a borrar los bordes de las paredes, ¿alguna ayuda con esos problemas?

gracias por su atencion


« Última modificación: 30 Octubre 2014, 01:43 am por Brayantp » En línea

NOIS

Desconectado Desconectado

Mensajes: 67


Ver Perfil
Re: Ayuda con este programa (dos errores)
« Respuesta #1 en: 16 Noviembre 2014, 21:41 pm »

Los contadores aumentan por el movimiento y no por la pulsación porque la pulsación de teclas no deja de leerla aunque sea la misma mientras este pulsada, es constante porque continuamente evalúa si hay alguna pulsación, por lo que tendrás que implementar algo que lo detecte, como que sume 1 al contador cuando se deje de pulsar la tecla después de ser pulsada (eso te lo dejo a ti para que practiques la lógica del código) y para evitar lo de las paredes puedes hacer que el carácter que mueves se tenga que detener una posición antes.

Espero que te sirva de orientación.

Saludos.


En línea

NOIS dev7
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines