Noch einmal spielen
Lektion 17 von 40 im Kurs Spiele mit Pygame erstellen von Coddy.
Nach dem Spielende sollte der Spieler das Programm nicht neu starten müssen. Mit R beginnt ein neues Spiel: Setze alle geänderten Werte auf ihren Ausgangswert zurück.
elif event.key == pygame.K_r and (lives == 0 or score == 10):
score = 0
lives = 3
basket.x = 200
block.y = -20
block.x = random.randint(0, 460)Die Bedingung ist wichtig. Ohne (lives == 0 or score == 10) würde R den Punktestand mitten im Spiel löschen. Die Klammern gruppieren die beiden Spielenden, sodass and für beide gilt.
Teile dem Spieler die Taste mit: Zeige unter dem Ergebnis Press R to play again an.
Aufgabe
Mittel- Setze im KEYDOWN-Zweig, wenn die Taste
pygame.K_rgedrückt wird und das Spiel beendet ist, den Punktestand auf 0, die Leben auf 3,basket.xauf 200 und lasse einen neuen Block vony = -20aus an einer zufälligen x-Position fallen. - Zeige nach dem Ende des Spiels außerdem
Press R to play againzentriert bei(240, 200)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
paused = False
running = True
while running:
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
if lives > 0 and score < 10 and not paused:
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)))
if paused:
message = font.render("Paused", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))
pygame.display.flip()
clock.tick(60)
pygame.quit()
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
2Ereignisse und Kollisionen
Der KorbEin fallender BlockÜbe selbstständig: Pygame-Playground