Menu
CoddyTech

Pause

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

Es gibt zwei Möglichkeiten, die Tastatur auszulesen. pygame.key.get_pressed() gibt in jedem Frame an, welche Taste gerade gedrückt gehalten wird: geeignet für Bewegungen. Ein KEYDOWN-Ereignis tritt einmal auf, und zwar in dem Frame, in dem die Taste gedrückt wird: geeignet für Aktionen, die einmal pro Tastendruck stattfinden.

Pausieren ist eine Aktion, die einmal pro Tastendruck stattfindet. 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 der Bedingung hinzu, die das Spiel ausführt, und zeige Paused an, solange sie aktiv ist.

challenge icon

Aufgabe

Mittel
  1. Setze vor der Schleife paused = False.
  2. Wechsle in der Ereignisschleife den Wert von paused, wenn die Taste eines KEYDOWN-Ereignisses pygame.K_p ist.
  3. Führe das Spiel nur aus, wenn es nicht pausiert ist: if lives > 0 and score < 10 and not paused:.
  4. Wenn paused wahr ist, zeige Paused zentriert bei (240, 160) an.

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