Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [C++]Ping Pong in c++

  1. #1

    [C++]Ping Pong in c++

    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;} 
                                                             }
         }
    
    }

  2. #2
    nessuno?

  3. #3
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Sinceramente il codice nn è leggibile, ma quando avviene la collisione dovresti cambiare la direzione della pallina e portarla poco dopo la racchetta.
    Per gli Spartani e Sparta usa spartan Il mio github

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.