Menu
CoddyTech

Wer zuerst fünf hat

Lektion 37 von 41 im Kurs Spiele mit Pygame erstellen von Coddy.

Der erste Spieler, der 5 Punkte erreicht, gewinnt. Speichere den Namen des Gewinners in einer Variable, die zunächst None enthält, Pythons Wert für „noch nichts“:

winner = None

if left_score == 5:
    winner = "Left player wins!"
elif right_score == 5:
    winner = "Right player wins!"

Teste es mit winner is None oder winner is not None. Sobald jemand gewonnen hat, wartet der Ball weiter: Mit der Leertaste wird nur aufgeschlagen, solange winner is None gilt.

Zeige den Gewinner zentriert bei (300, 120) anstelle der Aufschlagmeldung an.

challenge icon

Aufgabe

Mittel

Beende das Match bei fünf Punkten.

  1. Setze vor der Schleife winner = None. Setze es nach der Wertung auf "Left player wins!", wenn left_score == 5, oder auf "Right player wins!", wenn right_score == 5.
  2. Mit der Leertaste wird nur aufgeschlagen, solange winner is None gilt.
  3. Zeige den Gewinner zentriert bei (300, 120) anstelle von Press Space to serve an.

Drücke „Spielen“: Bei fünf Punkten wird der Gewinner angezeigt. Drücke dann „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
waiting = False

running = True
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

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

    if not waiting:
        ball.x += vx
        ball.y += vy
        if ball.top <= 0 or ball.bottom >= 400:
            vy = -vy
        if ball.colliderect(left):
            vx = abs(vx)
            vy = (ball.centery - left.centery) // 6
        if ball.colliderect(right):
            vx = -abs(vx)
            vy = (ball.centery - right.centery) // 6
        if ball.left > 600:
            left_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True
        if ball.right < 0:
            right_score += 1
            ball.center = (300, 200)
            vx = -vx
            waiting = True

    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)))
    if waiting:
        message = font.render("Press Space to serve", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(300, 360)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground