Hola bueno, he estado programando un juego de Naves cómo el que programó un joven llamado David en uno de sus vídeos, solo que yo lo hice sin ver sus vídeos, ehm.. Hasta ahora voy bien (bueno no tanto), estoy programando la rutina de los asteroides pero los asteroides solo se mueven cuando muevo el avión de los contrario están quietos. Cómo puedo hacer para que se muevan mientras yo presione o no presione una tecla?
El avión se mueve con las teclas: 'W', 'A', 'S' y 'D'; También se mueve con las flechas del teclado.
Acá está lo que llevo:
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>
using namespace std;
void gotoxy(int x, int y);
void pintar_avion();
void pintar_asteroides();
#define FLECHA_DERECHA 77
#define FLECHA_IZQUIERDA 75
#define FLECHA_ARRIBA 72
#define FLECHA_ABAJO 80
//Avión que se pintara cuando se desplace hacia la derecha
char avion_x1_1[5] = {'-',' ',' ',' ',0};
char avion_x1_2[5] = {'*','-',' ',' ',0};
char avion_x1_3[5] = {'*','*','-',' ',0};
char avion_x1_4[5] = {'*','*','*','*',0};
char avion_x1_5[5] = {'*','*','-',' ',0};
char avion_x1_6[5] = {'*','-',' ',' ',0};
char avion_x1_7[5] = {'-',' ',' ',' ',0};
//Avión que se pintara cuando se desplace hacia la izquierda
char avion_x2_1[5] = {' ',' ',' ','-',0};
char avion_x2_2[5] = {' ',' ','-','*',0};
char avion_x2_3[5] = {' ','-','*','*',0};
char avion_x2_4[5] = {'*','*','*','*',0};
char avion_x2_5[5] = {' ','-','*','*',0};
char avion_x2_6[5] = {' ',' ','-','*',0};
char avion_x2_7[5] = {' ',' ',' ','-',0};
//Avión que se pintara cuando se desplace hacia abajo
char avion_y1_1[8] = {'|','*','*','*','*','*','|',0};
char avion_y1_2[8] = {' ','|','*','*','*','|',' ',0};
char avion_y1_3[8] = {' ',' ','|','*','|',' ',' ',0};
char avion_y1_4[8] = {' ',' ',' ','*',' ',' ',' ',0};
//Avión que se pintara cuando se desplace hacia arriba
char avion_y2_1[8] = {' ',' ',' ','*',' ',' ',' ',0};
char avion_y2_2[8] = {' ',' ','|','*','|',' ',' ',0};
char avion_y2_3[8] = {' ','|','*','*','*','|',' ',0};
char avion_y2_4[8] = {'|','*','*','*','*','*','|',0};
//Coordenadas del avión
int cX = 37 , cY = 20;
//Coordenadas de los asteroides
int xA1 , yA1;
int xA2 , yA2;
int xA3 , yA3;
int xA4 , yA4;
int xA5 , yA5;
//Asteroide
char Asteroide = char(2);
//Variable que determinara el cambio de posición del avión
// 0 = Arriba
// 1 = Abajo
// 2 = Izquierda
// 3 = Derecha
typedef unsigned short int USINT;
USINT cPosition = 0;
int main()
{
srand(time(NULL));
xA1 = (rand() % 76);
xA2 = (rand() % 76);
xA3 = (rand() % 76);
xA4 = (rand() % 76);
xA5 = (rand() % 76);
yA1 = (rand() % 19);
yA2 = (rand() % 19);
yA3 = (rand() % 19);
yA4 = (rand() % 19);
yA5 = (rand() % 19);
pintar_asteroides();
pintar_avion();
char tecla = getch();
do
{
yA1++;
yA2++;
yA3++;
yA4++;
yA5++;
if(yA1 == 25)
{
yA1 = 0;
xA1 = (rand() % 76);
}
if(yA2 == 25)
{
yA2 = 0;
xA2 = (rand() % 76);
}
if(yA3 == 25)
{
yA3 = 0;
xA3 = (rand() % 76);
}
if(yA4 == 25)
{
yA4 = 0;
xA4 = (rand() % 76);
}
if(yA5 == 25)
{
yA5 = 0;
xA5 = (rand() % 76);
}
if((tecla == 'a' || tecla == 'A' || tecla == FLECHA_IZQUIERDA) && cX > 2)
{
cX -= 2;
cPosition = 2;
}
else if((tecla == 'w' || tecla == 'W' || tecla == FLECHA_ARRIBA) && cY > 0)
{
cY -= 2;
cPosition = 0;
}
else if((tecla == 's' || tecla == 'S' || tecla == FLECHA_ABAJO) && cY < 22)
{
cY += 2;
cPosition = 1;
}
else if((tecla == 'd' || tecla == 'D' || tecla == FLECHA_DERECHA) && cX < 72)
{
cX += 2;
cPosition = 3;
}
system("cls");
pintar_avion();
pintar_asteroides();
tecla = getch();
}while(1);
system("pause>nul");
return 0;
}
void pintar_avion()
{
// 0 = Arriba
// 1 = Abajo
// 2 = Izquierda
// 3 = Derecha
if(cPosition == 0)
{
gotoxy(cX,cY);
cout << avion_y2_1 << endl;
gotoxy(cX,(cY + 1));
cout << avion_y2_2 << endl;
gotoxy(cX , (cY + 2));
cout << avion_y2_3 << endl;
gotoxy(cX , (cY + 3));
cout << avion_y2_4 << endl;
}
else if(cPosition == 1)
{
gotoxy(cX,cY);
cout << avion_y1_1 << endl;
gotoxy(cX,(cY + 1));
cout << avion_y1_2 << endl;
gotoxy(cX , (cY + 2));
cout << avion_y1_3 << endl;
gotoxy(cX , (cY + 3));
cout << avion_y1_4 << endl;
}
else if(cPosition == 2)
{
gotoxy(cX,cY);
cout << avion_x2_1 << endl;
gotoxy(cX,(cY + 1));
cout << avion_x2_2 << endl;
gotoxy(cX , (cY + 2));
cout << avion_x2_3 << endl;
gotoxy(cX , (cY + 3));
cout << avion_x2_4 << endl;
gotoxy(cX , (cY + 4));
cout << avion_x2_5 << endl;
gotoxy(cX , (cY + 5));
cout << avion_x2_6 << endl;
gotoxy(cX , (cY + 6));
cout << avion_x2_7 << endl;
//gotoxy(cX , (cY + 7));
//cout << avion_x2_7 << endl;
}
else if(cPosition == 3)
{
gotoxy(cX,cY);
cout << avion_x1_1 << endl;
gotoxy(cX,(cY + 1));
cout << avion_x1_2 << endl;
gotoxy(cX , (cY + 2));
cout << avion_x1_3 << endl;
gotoxy(cX , (cY + 3));
cout << avion_x1_4 << endl;
gotoxy(cX , (cY + 4));
cout << avion_x1_5 << endl;
gotoxy(cX , (cY + 5));
cout << avion_x1_6 << endl;
gotoxy(cX , (cY + 6));
cout << avion_x1_7 << endl;
//gotoxy(cX , (cY + 7));
//cout << avion_x1_7 << endl;
}
}
void gotoxy(int x, int y)
{
HANDLE hCon;
COORD dwPos;
hCon = GetStdHandle(STD_OUTPUT_HANDLE);
dwPos.X = x;
dwPos.Y = y;
SetConsoleCursorPosition(hCon,dwPos);
}
void pintar_asteroides()
{
gotoxy(xA1,yA1);
cout << Asteroide;
gotoxy(xA2,yA2);
cout << Asteroide;
gotoxy(xA3,yA3);
cout << Asteroide;
gotoxy(xA4,yA4);
cout << Asteroide;
gotoxy(xA5,yA5);
cout << Asteroide;
}