Menu
CoddyTech

Pause

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

Es gibt zwei Möglichkeiten, die Tastatur abzufragen. pygame.key.get_pressed() gibt in jedem Frame an, welche Taste gerade gedrückt gehalten wird: geeignet für die Bewegung nach rechts. Ein KEYDOWN-Ereignis tritt nur einmal auf, und zwar in dem Frame, in dem die Taste gedrückt wird, so wie MOUSEBUTTONDOWN bei einem Klick: geeignet für Aktionen, die bei jedem Tastendruck einmal ausgeführt werden.

Das Pausieren ist eine Aktion, die einmal pro Tastendruck ausgeführt wird. Mit get_pressed würde das Gedrückthalten von P für einen Moment die Pause in jedem Frame ein- und ausschalten. Mit dem Ereignis wird sie einmal umgeschaltet:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        running = False
    elif event.type == pygame.KEYDOWN:
        if event.key == pygame.K_p:
            paused = not paused

not paused wandelt True in False um und umgekehrt. Füge die Pause zu der Bedingung hinzu, unter der das Spiel ausgeführt wird, und zeige Paused an, solange sie aktiv ist.

challenge icon

Aufgabe

Mittel

Mit P pausierst du das Spiel.

  1. Setze vor der Schleife paused = False. Ändere es in der Ereignisschleife, wenn die Taste eines KEYDOWN-Ereignisses pygame.K_p ist.
  2. Führe das Spiel nur aus, wenn lives > 0 and score < 10 and not paused.
  3. Zeige während paused Paused zentriert bei (240, 160) an.

Drücke „Spielen“ und tippe auf P: Das Spiel friert ein und zeigt Paused an. Drücke dann „Prüfen“.

Probier es selbst

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Catch the Blocks")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)

basket = pygame.Rect(200, 330, 80, 16)
block = pygame.Rect(220, 0, 20, 20)
score = 0
lives = 3

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    if lives > 0 and score < 10:
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            basket.x -= 8
        if keys[pygame.K_RIGHT]:
            basket.x += 8
        basket.clamp_ip(screen.get_rect())

        block.y += 3
        if block.top > 360:
            block.y = -20
            block.x = random.randint(0, 460)
            lives -= 1
        if block.colliderect(basket):
            block.y = -20
            block.x = random.randint(0, 460)
            score += 1

    screen.fill((30, 30, 46))
    pygame.draw.rect(screen, (80, 160, 255), basket)
    pygame.draw.rect(screen, (235, 80, 80), block)
    score_text = font.render(f"Score: {score}", True, (240, 240, 240))
    screen.blit(score_text, (10, 10))
    lives_text = font.render(f"Lives: {lives}", True, (240, 240, 240))
    screen.blit(lives_text, (370, 10))
    if lives == 0:
        message = font.render("Game over", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    elif score == 10:
        message = font.render("You win!", True, (240, 240, 240))
        screen.blit(message, message.get_rect(center=(240, 160)))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground