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.
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
hasta ahora lo tengo asi.
Código (c) [Seleccionar]
#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define ARRIBA 72
#define ABAJO 80
#define IZQUIERDA 75
#define DERECHA 77
#define SALIR 115
int x=40,y=14,contArri,contAbaj,contIzqu,contDere;
int tecla,pos=3;
void quitarC(){
HANDLE hCon;
hCon=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO c;
c.dwSize=1;
c.bVisible=FALSE;
SetConsoleCursorInfo(hCon,&c);
}
void marco(){
for(int x=1;x<80;x++){
gotoxy(x,1);printf("%c",177);
gotoxy(x,26);printf("%c",177);
}
for(int y=1;y<27;y++){
gotoxy(1,y);printf("%c",177);
gotoxy(80,y);printf("%c",177);
}
}
void caracter(){
gotoxy(x,y);printf("*");
}
void limpiarCar(){
gotoxy(x-1,y);printf(" ");
gotoxy(x+1,y);printf(" ");
gotoxy(x,y-1);printf(" ");
gotoxy(x,y+1);printf(" ");
}
void inicio(){
if(x<2){
x=40;y=14;
for(int y=1;y<27;y++){
gotoxy(1,y);printf("%c",177);}
}
if(x>79){
x=40;y=14;
for(int y=1;y<27;y++){
gotoxy(80,y);printf("%c",177);}
}
if(y<2){
x=40;y=14;
for(int x=1;x<80;x++){
gotoxy(x,1);printf("%c",177);}
}
if(y>25){
x=40;y=14;
for(int x=1;x<80;x++){
gotoxy(x,26);printf("%c",177);}
}
while(kbhit()){
tecla=getch();
if(tecla==ARRIBA){pos=1;}
if(tecla==ABAJO){pos=2;}
if(tecla==IZQUIERDA){pos=3;}
if(tecla==DERECHA){pos=4;}
}
if(pos==1)y--;
if(pos==2)y++;
if(pos==3)x--;
if(pos==4)x++;
}
void limpiar(){
for(int x=2;x<78;x++)
for(int y=2;y<24;y++){
gotoxy(x,y);printf(" ");
break;
}
}
void contadorA(){
if(tecla==ARRIBA){contArri++;}
if(tecla==ABAJO){contAbaj++;}
if(tecla==IZQUIERDA){contIzqu++;}
if(tecla==DERECHA){contDere++;}
}
void contadorB(){
for(int x=38;x<56;x++){
gotoxy(x,11);printf("%c",197);
gotoxy(x,18);printf("%c",197);
}
for(int y=11;y<19;y++){
gotoxy(38,y);printf("%c",197);
gotoxy(55,y);printf("%c",197);
}
gotoxy(40,13);printf("Arriba:%d",contArri);
gotoxy(40,14);printf("Abajo:%d",contAbaj);
gotoxy(40,15);printf("Izquierda:%d",contIzqu);
gotoxy(40,16);printf("Derecha:%d",contDere);
}
main(){
quitarC();
marco();
while(tecla!=SALIR){
contadorA();
caracter();
limpiarCar();
inicio();
Sleep(25);
}
while(tecla==SALIR){
limpiar();contadorB();break;
}
getch();
}
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