Menu
CoddyTech

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 = 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
  1. Setze vor der Schleife waiting = False.
  2. Führe die Bewegung des Balls, die Abpraller und die Punktewertung innerhalb von if not waiting: aus und setze nach jedem Punkt waiting = True.
  3. Ein KEYDOWN-Ereignis für pygame.K_SPACE setzt waiting = False.
  4. Zeige während des Wartens Press Space to serve zentriert 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()
quiz iconTeste dich selbst

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

Übe selbstständig: Pygame-Playground