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


Anmelden zum Antworten