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 pausednot 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.
Aufgabe
MittelMit P pausierst du das Spiel.
- Setze vor der Schleife
paused = False. Ändere es in der Ereignisschleife, wenn die Taste eines KEYDOWN-Ereignissespygame.K_pist. - Führe das Spiel nur aus, wenn
lives > 0 and score < 10 and not paused. - Zeige während
pausedPausedzentriert 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