problema en un juego (Dev-C++)


15 de Septiembre del 2019

holaa, hace poco empece a "crear" un juego en dev-C++(5.11). Trata de una nave que tiene que ir esquivando los asteroides que le caen del cielo. Los rand para que aparezcan los asteroides andan bien, el problema está en que sólo caen cuando yo muevo la nave. Es decir, los asteroides se mueven 1 posición para abajo, solo si mi nave se mueve 1 posición cualquiera en los ejes. La verdad no estoy completamente seguro de qué puede estar pasando. Acá dejo el código por si alguna buena persona me puede ayudar(? (ignoren los comentarios hechos con //) :

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#define IZQUIERDA 75
#define ARRIBA 72
#define DERECHA 77
#define ABAJO 80

void gotoxy(int x,int y){
HANDLE hcon;
hcon = GetStdHandle(STD_OUTPUT_HANDLE);
COORD dwPos;
dwPos.X = x;
dwPos.Y= y;
SetConsoleCursorPosition(hcon,dwPos);

}

class JUGADOR{
int x, y;
int corazones;
int vidas;
public:
JUGADOR(int _x, int _y, int _corazones, int _vidas): x(_x), y(_y),corazones(_corazones),vidas(_vidas){}
void pintar();
void borrar();
void mover();
void pintar_corazones();
void morir();
};

//JUGADOR::JUGADOR(int _x, int _y, int _corazones) : x(_x), y(_y), corazones (_corazones) {};
//public: corazones();
void JUGADOR ::pintar (){

gotoxy (x,y); printf(" %c", 30);
gotoxy (x,y+1); printf(" %c%c%c",40,207,41 );
gotoxy (x,y+2); printf ("%c%c %c%c", 30,190,190,30);
//if (tecla == 'e') corazones--;

}

void JUGADOR:: borrar (){
gotoxy (x,y); printf(" ");
gotoxy (x,y+1); printf(" ");
gotoxy (x,y+2); printf(" ");
}

void JUGADOR::mover(){
if (_kbhit()){ //(controles)
char tecla= getch ();
borrar();
if (tecla == IZQUIERDA && x>2) x--;
if (tecla == DERECHA &&x+6<105) x++; //(el +6 es por los caracteres que ocupa la nave)
if (tecla == ARRIBA &&y>6) y--;
if (tecla == ABAJO && y+3<25) y++;
//if (tecla == IZQUIERDA)corazones--;
if (tecla == 'e') corazones--;

pintar();
pintar_corazones();

}



}
void limitesmapa(){
for (int i= 2; i<105; i++){ //aumenta abcisa de izquierda hacia la derecha
gotoxy (i,5); printf("%c", 205); //limite horizontal superior
gotoxy (i,25); printf ("%c", 205); //limite horizontal inferior
}
for (int i=6; i<25; i++){ // aumenta ordenada de arriba hacia abajo
gotoxy (1,i); printf ("%c", 186); //limite vertical izquierdo
gotoxy (105,i); printf ("%c", 186); //limite vertical derecho

}




gotoxy (1,5); printf("%c", 201); //esquina sup izq
gotoxy (105,25); printf("%c", 188); //esquina inf der
gotoxy (1,25); printf ("%c", 200); //esquina inf izq
gotoxy (105,5); printf ("%c", 187); //esquina sup der
}


char option=getch();

void JUGADOR::pintar_corazones(){
gotoxy(50,2); printf("VIDAS %d", vidas);


gotoxy(84,2); printf("Salud"); //barra de vida
gotoxy (90,2); printf (" ");
for (int i=0; i<corazones;i++){
gotoxy(90+i,2); printf("%c", 3);
// char tecla = getch();
// if (tecla == 'e') corazones--;
}

}

void JUGADOR::morir(){
if (corazones == 0){
borrar();
gotoxy(x,y); printf(" ** ");
gotoxy(x,y+1); printf(" **** ");
gotoxy(x,y+2); printf(" ** ");
Sleep (200);
borrar();
gotoxy(x,y); printf(" * ** *");
gotoxy(x,y+1); printf(" **** ");
gotoxy(x,y+2); printf(" * ** *");
Sleep (200);
borrar();
vidas--;
corazones= 3;
pintar_corazones();
pintar();
}


}

class AST{
int x,y;
public:
AST(int _x, int _y): x(_x), y(_y){}
void pintar();
void mover();
};
void AST::pintar(){
gotoxy(x,y); printf("%c", 178);
}
void AST::mover(){
gotoxy(x,y); printf(" ");
y++;
if (y >24){
x= rand()%100 + 4; //nos dara un nro entre (0+4)4 y (100+4)104
y= 4;
}
pintar();

}

 


int main (){ //main: instrucciones, posicion "*" y "?", controles.
int x1=30; int y1=15;
int x2=0; int y2=0;
limitesmapa();

gotoxy (x2, y2);
printf("flecha izq: Izquierdan"); // (instrucciones)
printf("flecha der: Derechan");
printf("flecha arriba: Arriban");
printf("flecha abajo: Abajon");
printf("Z: finalizarn");

//int x= 10, y=10;
//gotoxy (x,y); printf("*");

JUGADOR N (7,7,3, 3);
N.pintar();
N.pintar_corazones();
AST ast(10,4);


bool gameover = false;
while (!gameover)
{
ast.mover();
char tecla= getch ();
if (tecla == 'z') break;
//if (tecla == 'e')corazones--;
N.morir();
N.mover();
Sleep (30); //para reducir la cantidad de iteracciones/s


}

return 0;
}