probleme bei programmieren von "pong"



  • Also wir haben schon im internet nach Hilfen gesucht aber nichts wirklich hilfreiches gefunden. Das Spiel soll mit grafischer Oberfläche sein ohne Direct-X oder OpenGL. Einen Schläger können wir schon mit Tasten bewegen und den Hintergrund haben wir auch. Wir müssen noch die Ballphysik programmieren aber wir wissen nicht wie wir das machen sollen.
    Grüße



  • ballphysik is doch relativ leicht bei pong (wenn mans sich leichtmacht)

    der ball hat ne richtung:
    dir=(x, y)
    also als vektor, jeden frame addiert ihr ienen bruchteil (abhängig von der vergangengen zeit) dieser richtung zur position des balls und schon bewegt sich das ball.

    Wenn der Ball jetzt wo gegen fliegt, muss eine Komponente mal -1 genommen werden, und schon prallt der ball auch ab



  • genau und einfallwinkel ist glech ausfallwinkel. Also muss man da auch nicht viel rumrechnen.

    Aber das alles findet ihr in dem source bei uns auf der seite die ich weiter oben schon mal genannt hatte!



  • Jens Bond schrieb:

    genau und einfallwinkel ist glech ausfallwinkel. Also muss man da auch nicht viel rumrechnen.

    Aber das alles findet ihr in dem source bei uns auf der seite die ich weiter oben schon mal genannt hatte!

    Nicht ganz, am schlaeger moecht man schon den winkel etwas beeinflussen koennen, sonst ists total stupide



  • Hallo
    sorry wir verstehen noch nicht viel con C++ und wissen auch nicht wie wir das machen sollen mit der Ballrichtung und dem Ein- und Ausfallwinkel.
    Wir können jetzt beide schläger mit der tastatur bewegen aber den ball haben wir noch nich zur bewegung gebracht
    MFG Cpp Anfänger



  • Hi!

    Toll das du sowas kannst. Aber es wäre hilfreich wenn wir deinen Quellcode kennen würden um zu sehen wie man den Rest integrieren kann.

    class Ball
    {
    private:
      Vec2 direction; // Movement Direction, 2 Komponentenvektor
      Texture material; // Material
    
    public:
      // C'tor etc...
    };
    

    Dann musst du nurnoch ein Objekt von Typ "Ball" erzeugen. Die Richtung festlegen und immer schön Zeitabhängig Werte zur Bewegungsrichtung addieren, auf Kollision testen und ggf. die Richtung ändern.

    grüße



  • Cpp Anfänger schrieb:

    Hallo
    sorry wir verstehen noch nicht viel con C++ und wissen auch nicht wie wir das machen sollen mit der Ballrichtung und dem Ein- und Ausfallwinkel.
    Wir können jetzt beide schläger mit der tastatur bewegen aber den ball haben wir noch nich zur bewegung gebracht
    MFG Cpp Anfänger

    Maxi hats doch erklärt. Lesen und Autocogito.

    Bye, TGGC (Fakten)



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
    {
       if (Key == '2')
       {
        shp_rechts->Top += 12;
       }
       if (Key == '8')
       {
        shp_rechts->Top -= 12;
       }
       if (Key == 's')
       {
        shp_links->Top += 12;
       }
       if (Key == 'w')
       {
        shp_links->Top -= 12;
       }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
       if (Key == '2')
       {
        shp_rechts->Top += 12;
       }
       if (Key == '8')
       {
        shp_rechts->Top -= 12;
       }
       if (Key == 's')
       {
        shp_links->Top += 12;
       }
       if (Key == 'w')
       {
        shp_links->Top -= 12;
       }
    }
    //---------------------------------------------------------------------------
    

    Also das ist unser Quellcode den wir benutzen. Wir programmieren das Spiel mit dem Borland C++ Builder und versuchen grad die Ballphysik zu programmieren



  • Dann nimm doch einfach die eingebaute Timer- Komponente, die dann alle x ms ihre Methode aufruft und in dieser Methode veränderst du einfach die Koordinaten des Balles und stellst diesem auf einer Image-Kompo dar.(musst dich dann nur noch kümmern, das flackern wegzubekommen...zur Not geht natürlich auch ne Paintbox.



  • //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
       randomize();
       vv = rand()%17 - 8; //Zufallswerte zwischen -8 .. 8
       vh = rand()%17 - 8; //Zufallswerte zwischen -8 .. 8
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
    {
       if (Key == 's')
       {
        shp_links->Top += 12;
       }
       if (Key == 'w')
       {
        shp_links->Top -= 12;
       }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
          TShiftState Shift)
    {
       if (Key == 's')
       {
        shp_links->Top += 12;
       }
       if (Key == 'w')
       {
        shp_links->Top -= 12;
       }
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::timballTimer(TObject *Sender)
    {
      if(ball->Top+ball->Height >= background->Height
         ||  ball->Top <= background->Top)
        vv = -vv;
      if(ball->Left+ball->Width >= background->Width)
        vh = -vh;
    
      if (ball->Left  <=  background->Left)
        ball->Visible = false;
    
      ball->Left += vh;
      ball->Top += vv;
    
    }
    //---------------------------------------------------------------------------
    

    Hallo
    Wir haben mittlerweile rausgefunden wie man den Ball bewegt und wie der an den Rändern des Spielfeldes abprallt. Jetzt müssen wir den Ball so Programmieren, dass er an dem Schläger auch abprallt. Wir wissen nur nich wie das geht. Bitten um Hilfe.
    GrussGruss



  • einfach koordinaten vergleciehen.....
    udn für doublebuffering gibbets bei vcl nen einfachen weg.

    TForm1::Create(...)
    {
    ...
    ...
    DoubleBuffering = true;
    ...
    ...
    }
    

    es könnt au sein das der bool "DoubleBuffered" heist.....schaut mal in da VCL docu.......



  • Cpp Anfänger schrieb:

    Hallo
    Wir haben mittlerweile rausgefunden wie man den Ball bewegt und wie der an den Rändern des Spielfeldes abprallt. Jetzt müssen wir den Ball so Programmieren, dass er an dem Schläger auch abprallt. Wir wissen nur nich wie das geht. Bitten um Hilfe.
    GrussGruss

    Diesen Code den ihr für den Spielfeldrand benutzt habt einfach mal Copy & Paste auf den Schläger übertragen (auch Einfallswinkel=Ausfallswinkel). Sobald ihr das dann zum Laufen gebracht habt, könnt ihr euch komplexeres Verhalten überlegen.


Anmelden zum Antworten