Hola!
Estoy haciendo un juego de una nave que debe esquivar asteroides que se acercan.
Para provocar que se acerquen hice que cada vez la x de estos sean menores, pero no se por que no funciona... He aquí el código; un saludo! (la parte que falla (que yo crea) es la que esta comentada como ASTEROID MOVEMENT (linea 20))
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <conio.h>
#include <windows.h>
using namespace std;
bool gameOver;
const int width=20;
const int height=10;
int x, y, astdX=width-1, astdY,asteroidYrand, score;
enum eDirection {STOP=0, UP, DOWN};
eDirection dir;
void Setup()
{
gameOver=false;
dir=STOP;
x=5;
y=height/2;
//ASTEROID MOVEMENT
if(astdX==width-1){astdY=1+rand()%8;}
if(astdX!=width&&astdX!=0){astdX--;}//ESTO DEBERIA HACER QUE LA X FUESE CADA VEZ MENOR, ES DECIR, QUE EL ASTEROIDE SE FUESE ACERCANDO
if(astdX==0){astdX=width-1;}
}
void Draw()
{
system("cls");
for(int i=0;i<height+1;i++)
{
if(i==0)
{
for(int j=0;j<width+1;j++)
{
cout<<"#";
if(j==width){cout<<endl;}
}
}
if(i>0&&i<height)
{
for(int j=0;j<width+1;j++)
{
if(j==0){cout<<"#";}
if(j>0&&j<width)
{
if(i!=y){cout<<" ";}
if(j<5&&i==y){cout<<" ";}
if(j==5&&i==y){cout<<">";}
if(j>5&&i==y){cout<<" ";}
}
if(j==width){cout<<"#"<<endl;}
}
}
if(i==height)
{
for(int j=0;j<width+1;j++)
{
cout<<"#";
if(j==width){cout<<endl;}
}
}
}
cout<<"Score: "<<score<<endl;
cout<<"astdY: "<<astdY<<endl<<"astdX: "<<astdX<<endl<<"Rand: "<<(1+rand()%8)<<endl;
}
void Input()
{
if(_kbhit())
{
switch(_getch())
{
case 'w':
dir=UP;
break;
case 's':
dir=DOWN;
break;
case 'x':
gameOver=true;
break;
}
}
}
void Logic()
{
switch(dir)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
default:
break;
}
if(y==1||y==height-1){dir=STOP;}
if(y==0||y==height){y=height/2;}
if(x==astdX&&y==astdY){gameOver=true;}
if(x==astdX&&y!=astdY){score+=10;}
}
int main()
{
Setup();
while(!gameOver)
{
Draw();
Input();
Logic();
Sleep(100);
}
return 0;
}