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)))
Für den Eindruck der Bewegung müssen wir die Spielfigur auch wieder vom Bildschirm löschen können. Die zweite Funktion spielfigur_loeschen(x)
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:

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.

Für die alte Schlägerposition benötigen wir eine „neue“ Variable mit dem Namen spielfigur_1_x_alt
. Diese Variable setzen wir bei dem Definitionsbereich am Anfang von unseren Pythoncode und zusätzlich 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 gegen wirken.
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 komplett sichtbar bleibt.