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

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / 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
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines