Brauche Denkanstöße für mein erstes Pong
-
Hallo Leute
Nach dem ich endlich meine schriftliche Abschlussprüfung hinter mir habe, möchte ich mich mit dem Programmieren "für Anfänger" bis zur praktischen Prüfung ablenken.
Mein Pong läuft soweit, doch ist es noch ein wenig "unfair". So wird der Ball z. B. nicht zurückgeschlagen, wenn sich das obere Ende des Schlägers am unteren Ende des Balles befindet oder wenn sich beide (Ball und Schläger)am ganz oberen Rand befinden.
Woran kann das liegen?
Ich denke das ich in der Abfrage der Schlägerposition eine zusätzliche Abfrage einfügen müsste. Kann aber auch auf dem Holzweg sein. Darum hier die Methode "zeichneBall" als Hilfe.
// setzt die Position des Balls Void zeichneBall(Point position) { Random ^zufall = gcnew Random(); ball -> Location = position; // stößt der Ball hinten an, dann die Richtung umdrehen if ((position.X + 10) >= spielfeldMaxX) ballPosition.richtungX = false; // stößt er unten bzw. oben an, ebenfalls if ((position.Y + 10) >= spielfeldMaxY) ballPosition.richtungY = true; else if (position.Y <= spielfeldMinY) ballPosition.richtungY = false; // ist er wieder vorne, prüfen wir, ob der Schläger in der Nähe ist // bitte in einer Zeile eingeben if ((position.X == spielfeldMinX) && ((schlaeger -> Top <= position.Y) && (schlaeger -> Bottom >= position.Y))) { if (ballPosition.richtungX == false) { // einen Punkt dazu und die Punkte ausgeben // bitte in einer Zeile eingeben zeichnePunkte(Convert::ToString(spielpunkte -> veraenderePunkte(punkteMehr))); } // die Richtung ändern ballPosition.richtungX = true; // und den Winkel ballPosition.winkel = zufall -> Next(winkelZufall); } // ist der Ball hinter dem Schläger? if (position.X < spielfeldMinX) { // fünf Punkte abziehen und die Punkte ausgeben // bitte in einer Zeile eingeben zeichnePunkte(Convert::ToString(spielpunkte -> veraenderePunkte(punkteWeniger))); // eine kurze Pause einlegen Threading::Thread::Sleep(1000); // und alles von vorne zeichneBall(Point(spielfeldMinX, position.Y)); ballPosition.richtungX = true; } } // setzt die Y - Position des Schlägers Void zeichneSchlaeger(Int32 Y) { // befindet sich der Schläger im Spielfeld? // bitte in einer Zeile eingeben if (((Y + schlaegerGroesse) < spielfeldMaxY) && (Y > spielfeldMinY)) schlaeger -> Top = Y; }
Ach ja, c++/cli.
Bin für Eure Hilfe sehr Dankbar
Gruß
champmann