Sessionbericht vom 17.02.2026
Auf der Grundlage vom letzten Mal haben wir das
Pong-Spiel um einfache Nutzer-Eingaben erweitert.
Zunächst haben wir Tastatureingaben aus events, gelesen.
pygame.events.get() holt sich eine Liste an allen Ereignissen
die seit dem letzten Aufruf geschehen sind, in der Reihenfolge in
welche diese Passiert sind. Wenn nun ein Ereignis vom Typen
KEYUP oder KEYDOWN ist, bedeutet es jeweils, dass eine Taste
losgelassen oder gedrückt wurde (event.type). Die konkrete Taste
lässt sich durch die Variable event.key herausfinden. Eine Liste
der möglichen Tasten findet sich in der PyGame-Dokumentation von
pygame.key.
Wir speichern den aktuellen Bewegungszustand eines Paddels in einer Variable,
welche genau drei Zustände ausdrücken kann:
- Das Paddel bewegt sich aufwärts
- Das Paddel bewegt sich abwärts
- Das Paddel bewegt sich nicht
Dazu verwenden wir eine Ganzzahl, wenn das Paddel sich nach oben Bewegt ist der
Wert -1, nach unten 1 und gar nicht 0.
Diesen Wert können wir abhängig von den Tastaturereignissen setzen, wenn also z.B.
die W-Taste gedrückt ist, würden wir den Bewegungszustand auf -1 setzen, falls die dieselbe losgelassen wird, setzen wir die Bewegung auf 0.
Diese Bewegungsvariable lässt sich auf die aktuelle Koordinaten des Paddels
in unserer Schleife addieren, sodass sich der Spieler immer weiter in eine
Richtung bewegt. Wenn der Spieler z.B. eine Bewegungsgeschwindigkeit v hat, dann
könnte das so aussehen
player.y += bewegung * v
wobei bewegung der aktuelle Bewegungszustand und player.y die y-Koordinate des Spielers ist.
Delta-Zeit
Diese naive Bewegungsimplementierung hat ein Problem, die Bewegungsgeschwindigkeit
des Spielers ist abhängig von der Leistung des Rechners, je öfter die Schleife in
einem Zeitinterval (z.B. einer Sekunde) ausgeführt wird, desto schneller
bewegt sich der Spieler, unabhängig von v. Die Lösung dazu ist Delta-Zeit.
Delta-Zeit beschreibt die Zeit, welche der letzte durchaluf der Spielschleife
gebraucht hat und kann auf Bewegung hinzumultipliziert werden. Die aktuelle
Deltazeit in Sekunden lässt sich einfach durch die tick()-Methode einer pygame.time.Clock ermitteln.
Session-Code
import pygame
size = width, height = 1280, 920
screen = pygame.display.set_mode(size)
time = pygame.time.Clock() # initialisiere eine Uhr
pong_ball_size = 30
screen_middle = width / 2, height / 2
pong_ball = pygame.Rect((
screen_middle[0] - (pong_ball_size / 2),
screen_middle[1] - (pong_ball_size / 2)),
(pong_ball_size, pong_ball_size)
)
player_1 = pygame.Rect((50, height / 2 - 50), (10, 100))
player_2 = pygame.Rect((1280 - 50 - 10, height / 2 - 50), (10, 100))
bewegung_player_1 = 0
while True:
dt = time.tick() # hole die Delta-Zeit
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
exit(0)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_w: # registriere Bewegungstasten
bewegung_player_1 = -1
if event.key == pygame.K_s:
bewegung_player_1 = 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_w or event.key == pygame.K_s: # Keine weitere
# Bewegung
bewegung_player_1 = 0
player_1.y += bewegung_player_1 * 1 * dt # Bewegungsberechnung
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255,255,255), pong_ball)
pygame.draw.rect(screen, (255,255,255), player_1)
pygame.draw.rect(screen, (255,255,255), player_2)
pygame.display.flip()
Eine kleine Übungsaufgabe ist nun, die Bewegung von player_2 zu implementieren.