Gewinnen oder verlieren
Teil des Abschnitts Die Spielschleife der Pygame-Journey von Coddy. Lektion 29 von 32.
Ein Spiel endet. Hier verlierst du, wenn die Leben 0 erreichen, und gewinnst, wenn der Punktestand 10 erreicht. Solange keines von beidem passiert ist, läuft das Spiel.
Packe alles, was sich bewegt, unter eine Bedingung, damit es stoppt, wenn das Spiel endet:
if lives > 0 and score < 10:
# Tasten, der Korb, der Block, gefangene und verfehlte BlöckeDas Zeichnen bleibt außerhalb dieses if: Der Bildschirm zeigt weiterhin das letzte Bild und darüber das Ergebnis.
if lives == 0:
message = font.render("Game over", True, (240, 240, 240))
screen.blit(message, message.get_rect(center=(240, 160)))message.get_rect(center=(240, 160)) ist das Rect des Textbildes, dessen Mittelpunkt bei (240, 160) liegt. Beim Blitten an einem Rect wird dessen linke obere Ecke verwendet, sodass der Text zentriert ist.
Aufgabe
Mittel- Rücke alles, was sich bewegt (die Tasten, den Korb, den Block, Fänge und Fehlschläge), unter
if lives > 0 and score < 10:ein. - Zeige nach dem Zeichnen von Punktestand und Leben
Game overan, wennlives == 0, oderYou win!, wennscore == 10, zentriert bei(240, 160).
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
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))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Alle Lektionen in Die Spielschleife
2Formen und Farben
Kreise, Linien, VieleckeUmrisse und EckenEine Szene aus FormenFarben, die sich ändern5Fang die Blöcke
Der KorbEin fallender BlockÜbe selbstständig: Pygame-Playground