Menu
CoddyTech

Aufschlag

Lektion 35 von 41 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 = True

Die 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).

challenge icon

Aufgabe

Mittel

Warte nach jedem Punkt auf einen Aufschlag.

  1. Setze vor der Schleife waiting = False.
  2. Führe die Bewegung des Balls, die Abpraller und die Punktewertung unter if not waiting: aus und setze waiting = True nach jedem Punkt.
  3. Ein KEYDOWN von pygame.K_SPACE setzt waiting = False. Zeige während des Wartens Press Space to serve zentriert bei (300, 360) an.

Klicke auf „Spielen“ und verfehle den Ball: Er wartet in der Mitte, bis du die Leertaste drückst. Klicke dann auf „Prüfen“.

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()

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground