Menu
CoddyTech

Wer zuerst fünf Punkte erreicht

Teil des Abschnitts Projekte der Pygame-Journey von Coddy. Lektion 19 von 31.

Der erste Spieler, der 5 Punkte erreicht, gewinnt. Speichere den Namen des Gewinners in einer Variable, die zunächst den Wert None hat, 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: Die Leertaste schlägt nur auf, solange winner is None gilt.

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

challenge icon

Aufgabe

Mittel
  1. Setze vor der Schleife winner = None.
  2. Setze nach der Punktevergabe winner auf "Left player wins!", wenn left_score == 5, oder auf "Right player wins!", wenn right_score == 5.
  3. Mit der Leertaste wird nur aufgeschlagen, solange winner is None gilt.
  4. Wenn es einen Gewinner gibt, zeige ihn zentriert bei (300, 120) anstelle von Press Space to serve 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
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 Projekte

Übe selbstständig: Pygame-Playground