Ciao a tutti!
Intanto, se servisse, per programmare uso c++ builder dell'Embarcadero (una versione successiva a borland c++ builder ma con lo stesso funzionamento).
Il mio progetto era quello di fare una specie di ping pong in cui due rettangoli (le racchette) posti ai lati dello schermo e comandati da due giocatori colpissero un quadratino (la pallina) che rimbalza ogni volta che incontra le sponde o le racchette.
Il problema è che se la pallina colpisce la racchetta in alto, spesso entra letteralmente dentro la racchetta e inizia a rimbalzarci dentro finché non esce. Come posso fare a risolvere questo problema?
Tutti i movimenti della pallina sono comandati da un timer che ogni 50 millisecondi sfrutta questo codice:
(Considerate che panel2 e 3 sono le racchette, panel5 è la pallina e panel1 lo sfondo verde.
Se aiuta nell'immagine in fondo sono segnati i vari Panel e qui potete scaricare l'eseguibile per rendervi un'idea di cosa succede)
codice:void __fastcall TForm1::Timer1Timer(TObject *Sender) { // movimento Panel5->Left=floor(Panel5->Left+x); Panel5->Top=floor(Panel5->Top+y); // sponde if(Panel5->Top < 0){y=-y;} if(Panel5->Top > Panel1->Height-18){y=-y;} // racchette if(fabs(Panel5->Left-Panel2->Left) < Panel2->Width+2){ if((Panel5->Top > Panel2->Top)&&(Panel5->Top < Panel2->Top+Panel2->Height)){ x=-x;} } if(fabs(Panel5->Left-Panel3->Left) < Panel3->Width-2){ if((Panel5->Top > Panel3->Top)&&(Panel5->Top < Panel3->Top+Panel3->Height))){ x=-x;} } // goal if(Panel5->Left < 8){ punteggio2++; Label2->Caption=IntToStr(punteggio2); //calcolo del punteggio Panel5->Top=rand()%Panel1->Height; //calcolo del punteggio Panel5->Left=Panel4->Left; //calcolo del punteggio srand(time(NULL)); //rimessa in campo della palla if(rand()&2!=0){x=5;} //rimessa in campo della palla else {x=-5;} //rimessa in campo della palla srand(time(NULL)); //rimessa in campo della palla if(rand()&2!=0){y=5;} //rimessa in campo della palla else {y=-5;} //rimessa in campo della palla } else{ if(Panel5->Left > Panel1->Width-8){ punteggio1++; Label1->Caption=IntToStr(punteggio1); Panel5->Top=rand()%Panel1->Height; Panel5->Left=Panel4->Left; srand(time(NULL)); if(rand()&2!=0){x=5;} else {x=-5;} srand(time(NULL)); if(rand()&2!=0){y=5;} else {y=-5;} } } }![]()

Rispondi quotando