XNAPong Phase 3: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Ruzzoli (Diskussion | Beiträge)
LeonH (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(2 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
Zurück zu [[XNAPong_Phase_2 | Phase 2]]
Zurück zu [[XNAPong_Phase_2 | Phase 2]]
{{löschen}}


==== Phase 3 - Der Rest ====
==== Phase 3 - Der Rest ====
Zeile 33: Zeile 35:
     scoreText = "L:" + score[0] + " - R:" + score[1] + "";
     scoreText = "L:" + score[0] + " - R:" + score[1] + "";
     ballDirection.X *= -1;
     ballDirection.X *= -1;
ball.X = GraphicsDevice.Viewport.Width / 2;
    ball.X = GraphicsDevice.Viewport.Width / 2;
  }
  }
   
   
Zeile 45: Zeile 47:


Falls der Ball den Bildschirm verlässt wird der Punktestand des entsprechenden Spielers erhöht und der zu zeichnende Punktestrink aktualisiert. Der Ball wird ausserdem wieder auf das Spielfeld versetzt und seine Flugrichtung umgekehrt.
Falls der Ball den Bildschirm verlässt wird der Punktestand des entsprechenden Spielers erhöht und der zu zeichnende Punktestrink aktualisiert. Der Ball wird ausserdem wieder auf das Spielfeld versetzt und seine Flugrichtung umgekehrt.
Schliesslich muss das Spiel noch erkennen wann ein Spieler gewonnen hat. Wir lösen das Problem in dem wir in Update() testen ob ein Spieler die notwendige Punktzahl erreicht hat und nur falls das nicht der Fall ist, geht das Spiel wie gewohnt weiter, ansonsten zeigt es nur noch die Siegernachricht an:
* Update():
protected override void Update(GameTime gameTime)
{
    if (score[0] == 10)
    {
        scoreText = "Left Player Won";
    }
    else if (score[1] == 10)
    {
        scoreText = "Right Player Won";
    }
    else
    {
        HandlePlayerInput();
        ball.X += (int)ballDirection.X;
        ball.Y += (int)ballDirection.Y;
        if (ball.Intersects(rightPaddle) || ball.Intersects(leftPaddle))
            ballDirection.X *= -1;
        if (ball.Y < 0 || ball.Y > GraphicsDevice.Viewport.Height - ball.Height)
            ballDirection.Y *= -1;
        if (ball.X + ball.Width < 0)
        {
            score[1]++;
            scoreText = "L:" + score[0] + " - R:" + score[1] + "";
            ballDirection.X *= -1;
            ball.X = GraphicsDevice.Viewport.Width / 2;
        }
        if (ball.X > GraphicsDevice.Viewport.Width)
        {
            score[0]++;
            scoreText = "L:" + score[0] + " - R:" + score[1] + "";
            ballDirection.X *= -1;
            ball.X = GraphicsDevice.Viewport.Width / 2;
        }   
    }
   
    base.Update(gameTime);
}
Die letzte und entscheidenste Änderung muss nun noch in der Draw() Methode vorgenommen werden. Die GraphicsDevice.Clear() Zeile sollte anschliessend so aussehen:
Die letzte und entscheidenste Änderung muss nun noch in der Draw() Methode vorgenommen werden. Die GraphicsDevice.Clear() Zeile sollte anschliessend so aussehen:
  GraphicsDevice.Clear(Color.SteelBlue);              // oder auch jede andere farbe AUSSER CornflowerBlue
  GraphicsDevice.Clear(Color.SteelBlue);              // oder auch jede andere farbe AUSSER CornflowerBlue