Aufschlag
Lektion 35 von 40 im Kurs Spiele mit Pygame erstellen von Coddy.
Nach einem Punkt sollte der Ball in der Mitte warten, bis ein Spieler bereit ist. Ein Flag gibt an, ob er wartet:
waiting = False
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
waiting = False
# Die Schläger bewegen sich immer
if not waiting:
# Der Ball bewegt sich, prallt ab und erzielt Punkte; ein Punkt setzt waiting = TrueDie Schläger bleiben außerhalb des if, damit die Spieler sich bereit machen können, während der Ball wartet. Die Leertaste löst pro Tastendruck nur einmal eine Aktion aus; deshalb stammt sie von einem KEYDOWN-Ereignis.
Während der Ball wartet, zeige unten in der Nähe den Hinweis Press Space to serve, zentriert bei (300, 360).
Aufgabe
Mittel- Setze vor der Schleife
waiting = False. - Führe die Bewegung des Balls, die Abpraller und die Punktewertung innerhalb von
if not waiting:aus und setze nach jedem Punktwaiting = True. - Ein KEYDOWN-Ereignis für
pygame.K_SPACEsetztwaiting = False. - Zeige während des Wartens
Press Space to servezentriert bei(300, 360)an.
Probier es selbst
import pygame
pygame.init()
screen = pygame.display.set_mode((600, 400))
pygame.display.set_caption("Pong")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 36)
ball = pygame.Rect(293, 193, 14, 14)
vx, vy = 5, 4
left = pygame.Rect(20, 160, 12, 80)
right = pygame.Rect(568, 160, 12, 80)
left_score = 0
right_score = 0
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_w]:
left.y -= 6
if keys[pygame.K_s]:
left.y += 6
if keys[pygame.K_UP]:
right.y -= 6
if keys[pygame.K_DOWN]:
right.y += 6
left.clamp_ip(screen.get_rect())
right.clamp_ip(screen.get_rect())
ball.x += vx
ball.y += vy
if ball.top <= 0 or ball.bottom >= 400:
vy = -vy
if ball.colliderect(left):
vx = abs(vx)
if ball.colliderect(right):
vx = -abs(vx)
if ball.left > 600:
left_score += 1
ball.center = (300, 200)
vx = -vx
if ball.right < 0:
right_score += 1
ball.center = (300, 200)
vx = -vx
screen.fill((30, 30, 46))
pygame.draw.rect(screen, (80, 160, 255), left)
pygame.draw.rect(screen, (235, 80, 80), right)
pygame.draw.rect(screen, (255, 196, 0), ball)
score = font.render(f"{left_score} : {right_score}", True, (240, 240, 240))
screen.blit(score, score.get_rect(center=(300, 30)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Spiele mit Pygame erstellen
1Die Spielschleife
Ein Fenster öffnenDen Hintergrund füllen4Zwei Spieler und ein Ball
Der BallAbprallenÜbe selbstständig: Pygame-Playground