Python Tutorial
- jetzt Python programmieren lernen

Spielerfigur (Schläger) einbauen und bewegen

Bisher spielt unser Spiel alleine. Das ist nicht ganz im Sinne des Erfinders und daher wollen wir dem Spieler einen Schläger geben, den er bewegen kann und somit den Ball zurückschlagen.

Wir benötigen in unserem Bereich für die Vorgabe der Variablen 3 weitere Variablen:

  • spielfigur_1_x (für die horizontale (x) Start-Position des Schlägers)
  • spielfigur_1_y (für die vertikale (y) Position des Schlägers – diese verändert sich im ganzen Spiel nicht)
  • spielfigur_1_bewegung (die Bewegung der Spielerfigur)

Bei unseren Vorgaben packen wir nach den Spielball-Variablen nun:

spielfigur_1_x = 10
spielfigur_1_y = 27
spielfigur_1_bewegung = 0

In unserem Bereich „# Spielelement zeichnen“ erstellen wir 2 weitere Funktionen. Als erstes wollen wir die Spielfigur zeichnen. Die Funktion nennen wir „spielfigur_zeichnen()“ und wir übergeben dieser die X-Position.

def spielfigur_zeichnen(x):
    pygame.draw.rect(fenster, SCHWARZ,(kor(x), kor(spielfigur_1_y),50,kor(1)))

Und für die Bewegung müssen wir die Spielfigur auch wieder vom Bildschirm löschen können. Die zweite Funktion zeichnet uns dazu einfach ein weißes Quadrat.

def spielfigur_loeschen(x):
    pygame.draw.rect(fenster, WEISS,(kor(x), kor(spielfigur_1_y),50,kor(1)))

Spielfigur (Schläger) zeichnen

Innerhalb unserer Hauptschleife zeichnen wir nun unseren Schläger, nachdem wir den Ball gezeichnet haben (die Reihenfolge ist eigentlich egal).

    # Ball zeichnen
    element_loeschen(ball_x_alt, ball_y_alt)
    ball_zeichnen(ball_x, ball_y)

    spielfigur_zeichnen(spielfigur_1_x)

Und nun haben wir eine Spielerfigur:

Schläger als Spielerfigur
Schläger als Spielerfigur

Diesen wollen wir natürlich auch bewegen können. Dazu ergänzen wir in der Hauptroutine die Abfrage der Tastatur in der Hauptschleife. Wir nutzen die Pfeiltaste nach rechts und links für die Steuerung.

Je nachdem welche Taste der Spieler gedrückt hat, bekommt die Variable „spielfigur_1_bewegung“ entweder plus 1 oder minus 1 zugewiesen.

# Schleife Hauptprogramm
while spielaktiv:
    # Überprüfen, ob Nutzer eine Aktion durchgeführt hat
    for event in pygame.event.get():
        if event.type == pygame.QUIT or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            spielaktiv = False
            print("Spieler hat beendet")

        if event.type == pygame.KEYDOWN:
            print("Spieler hat Taste gedrückt")

            # Taste für Spieler 1
            if event.key == pygame.K_LEFT:
                print("Spieler hat Pfeiltaste links gedrückt")
                spielfigur_1_bewegung = -1
            elif event.key == pygame.K_RIGHT:
                print("Spieler hat Pfeiltaste rechts gedrückt")
                spielfigur_1_bewegung = 1    

Über unsere Variable können wir nun die Bewegung der Spielerfigur einfach umsetzen. Im Bereich „# Spiellogik“

    # Spiellogik
    # Ballbewegung
    if ball_x <= 0:
        ball_x_richtung = 1
    if ball_x >= 19:
        ball_x_richtung = -1
    if ball_y <= 0:
        ball_y_richtung = 1
    if ball_y >= 29:
        ball_y_richtung = -1

    # Spielfigurbewegung
    spielfigur_1_x += spielfigur_1_bewegung 

Die Spielfigur soll sich auch nur einmal bewegen. Daher setzen wir die Variable nach dem zeichnen der Bewegung wieder auf 0:

    spielfigur_zeichnen(spielfigur_1_x)
    spielfigur_1_bewegung = 0

Schlägerbewegung sauber

Wenn wir nun das Spiel starten, können wir den Schläger bewegen. Es gibt aber noch 2 Schönheitsfehler. Wir zeichnen einen Strich, da wir die alte Schlägerposition nicht löschen. Und als zweites prallt unser Ball nicht ab.

alte Schlägerposition wird nicht gelöscht
alte Schlägerposition wird nicht gelöscht

Für die alte Schlägerposition benötigen wir eine „neue“ Variable mit dem Namen „spielfigur_1_x_alt“. Diese setzen wir bei der Definition unserer Variablen und bevor wir die neue Position des Schlägers berechnen.

    # Spielfigurbewegung
    spielfigur_1_x_alt = spielfigur_1_x
    spielfigur_1_x += spielfigur_1_bewegung

Und nun können wir den Schläger löschen, bevor er an der neuen Position gezeichnet wird.

    # Ball zeichnen
    element_loeschen(ball_x_alt, ball_y_alt)
    ball_zeichnen(ball_x, ball_y)

    # Spielerfigur zeichnen
    spielfigur_loeschen(spielfigur_1_x_alt)
    spielfigur_zeichnen(spielfigur_1_x)
    spielfigur_1_bewegung = 0

Soweit so gut. Unser Schläger kann aus dem Fenster verschwinden. Hier müssen wir in der Spiellogik gegenwirken.

Wir fragen die Position des Schlägers ab und wenn dieser an der rechten oder linken Fensterrand sich befindet, setzen wir die Bewegung wieder auf 0:

    # Spiellogik
    # -- Spielfigur darf das Spielfeld links nicht verlassen
    if (spielfigur_1_x == 0 and spielfigur_1_bewegung == -1):
        spielfigur_1_bewegung = 0

    if spielfigur_1_x == 18 and spielfigur_1_bewegung == 1:
        spielfigur_1_bewegung = 0

    # Ballbewegung

Für den rechten Rand setzen wir nicht bei Position 20 sondern 18 – unser Schläger hat ja eine Breite und er muss bei 18 stoppen, damit er ganz sichtbar bleibt.