Menu
CoddyTech

Gewinnen oder verlieren

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

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.

Fasse alles, was sich bewegt, unter einer Bedingung zusammen, damit es anhält, wenn das Spiel endet:

if lives > 0 and score < 10:
    # Tasten, der Korb, der Block, gefangene und verfehlte Objekte

Das 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 auf (240, 160) gesetzt ist. Beim Blitten an einem Rect wird dessen linke obere Ecke verwendet, sodass der Text zentriert ist.

challenge icon

Aufgabe

Mittel

Beende das Spiel mit einem Sieg oder einer Niederlage.

  1. Rücke alles, was sich bewegt (die Tasten, den Korb, den Block, das Fangen und Verfehlen), unter if lives > 0 and score < 10: ein.
  2. Zeige nach Punktestand und Leben Game over, wenn lives == 0, oder You win!, wenn score == 10, zentriert bei (240, 160).

Drücke „Spielen“ und verfehle drei Blöcke: Game over wird angezeigt und das Spiel stoppt. 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

    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 Spiele mit Pygame erstellen

Übe selbstständig: Pygame-Playground