PDA

View Full Version : [c++]Aiutoooooooooo!!


leomagic
29-01-2004, 20:43
Sto facendo il gioco space invaders,per ogni oggetto nemico ci sono delle apposite funzioni per farlo spostare sinistra,destra e basso,con il controllo della collisione:

bool alieni::left_nemico(int passo,int limite)
{
if(x-passo<=limite)
{
collisione_sinistra=true;
return false;
}
else
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
bar(x,y,x+32,y+32);
x=x-passo;
collisione_sinistra=false;
}
if(vita>0)
{
DisplayBMP(x,y,"nave2.bmp");
}
}

bool alieni::right_nemico(int passo,int limite)
{
if(x+passo+32>=limite)
{
collisione_destra=true;
return false;
}
else
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
bar(x,y-32,x+32,y+32);
x=x+passo;
collisione_destra=false;
}
if(vita>0)
{
DisplayBMP(x,y,"nave2.bmp");
}
}

bool alieni::down_nemico(int passo)
{
if(y+passo+32>=limite_basso)
{
collisione_basso=true;
return false;

}
else
{
setcolor(BLACK);
setfillstyle(SOLID_FILL,BLACK);
bar(x,y-32,x+32,y+32);
y=y+passo;
collisione_basso=false;
}
if(vita>0)
{
DisplayBMP(x,y,"nave2.bmp");
}
}

queste invece sono le funzione che lo fanno muovere

void basso(int j)
{
if(nemici[j].collisione_basso==false)
nemici[j].down_nemico(5);
if(nemici[j].collisione_basso==true && nemici[j].collisione_destra==true)
{
sini(j);
}
if(nemici[j].collisione_basso==true && nemici[j].collisione_sinistra==true)
{
dest(j);
}
}

void sini(int j)
{

if(nemici[j].collisione_sinistra==false && nemici[j].vita>0)
nemici[j].left_nemico(5,0);
if(nemici[j].collisione_sinistra==true && nemici[j].vita>0)
basso(j);
if (kbhit())
tasto();
}

void dest(int j)
{
if(nemici[j].collisione_destra==false && nemici[j].vita>0)
nemici[j].right_nemico(5,639);
if(nemici[j].collisione_destra==true && nemici[j].vita>0)
basso(j);
if (kbhit())
tasto();
}


Ecco il mio problema:
Quando un alieno scende di una riga nn mi scende +,si blocca tutto il programma..è tutto il giorno che ci sto dietro e nn sono giunto accapo ad una conclusione.
Vi spiego il funzionamento:

Una navicella parte,quando arriva al bordo destro segnala che è andata di fuori,a questo punto scende,quando arriva al limite di scesa la navicella si muove e a sinistra,quando arriva a sinistra segnalo che è andata di fuori..e scendo..così via...