Menu
CoddyTech

Ein voller Himmel

Teil des Abschnitts Python in einem Spielfenster der Pygame-Journey von Coddy. Lektion 32 von 32.

Das Spiel endet, wenn zwanzig Sterne am Himmel stehen. Zwei Dinge ändern sich: Durch Klicks kommen keine Sterne mehr hinzu, und eine Nachricht weist darauf hin. Beide lesen dieselbe Liste:

if event.type == pygame.MOUSEBUTTONDOWN and len(stars) < 20:
    stars.append(event.pos)
if len(stars) == 20:
    message = font.render("The sky is full!", True, (230, 230, 240))
    screen.blit(message, message.get_rect(center=(320, 240)))

message.get_rect(center=(320, 240)) ist das Rechteck des Textbilds, dessen Mitte bei (320, 240) platziert ist. Wenn du den Text dort auf die Oberfläche zeichnest, erscheint er in der Mitte des Fensters, unabhängig von seiner Länge.

Prüfe hier == 20, nicht > 20: Die Begrenzung stoppt die Liste bei 20, sodass sie nie mehr enthält.

Wenn der Himmel voll ist, bleibt nichts anderes zu tun, als ihn anzusehen. Abschnitt 2 zeigt, wie du mit einer Taste ein Spiel neu startest und wie du ein Spiel mit einem Sieg oder einer Niederlage beendest.

challenge icon

Aufgabe

Mittel

Vervollständige Night Sky:

  1. Füge nur bei einem Klick einen Stern hinzu, solange len(stars) < 20 gilt.
  2. Wenn len(stars) == 20 gilt, zeige The sky is full! in (230, 230, 240) zentriert bei (320, 240) an.

Probier es selbst

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()

# Richte hier alles ein, bevor die Spielschleife beginnt.
stars = []
font = pygame.font.Font(None, 36)

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            stars.append(event.pos)

    # Ändere hier einmal pro Frame die Dinge.

    screen.fill((20, 24, 48))
    # Zeichne hier, nachdem der Bildschirm gefüllt wurde.
    pygame.draw.circle(screen, (240, 230, 160), (560, 80), 40)
    pygame.draw.rect(screen, (14, 16, 30), (0, 430, 640, 50))
    for star in stars:
        colour = (255, 255, 255)
        if random.randint(1, 30) == 1:
            colour = (110, 120, 170)
        pygame.draw.circle(screen, colour, star, 3)
    text = font.render(f"Stars: {len(stars)}/20", True, (230, 230, 240))
    screen.blit(text, (20, 20))

    pygame.display.flip()
    clock.tick(60)

pygame.quit()

Alle Lektionen in Python in einem Spielfenster

Übe selbstständig: Pygame-Playground