Menu
CoddyTech

Mit While zählen

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

Eine while-Schleife wird wiederholt, solange ihre Bedingung wahr ist. Verwende sie, wenn du nicht im Voraus weißt, wie oft die Schleife durchlaufen werden soll:

radius = 200
rings = 0
while radius > 10:
    pygame.draw.circle(screen, (150, 190, 255), (320, 240), radius, 2)
    radius = radius // 2
    rings = rings + 1

Der Radius halbiert sich jedes Mal: 200, 100, 50, 25, 12. // dividiert und lässt den Teil nach dem Komma weg, also ist 25 // 2 gleich 12. Dann ist der Wert 6, die Bedingung ist falsch und die Schleife endet nach 5 Ringen. rings zählt sie. Die fünfte Zahl im Aufruf von circle, 2, zeichnet eine 2 Pixel breite Kontur statt eines ausgefüllten Kreises.

Auch die Spielschleife ist eine while-Schleife, die so lange läuft, bis du das Fenster schließt. Eine while-Schleife innerhalb eines Frames muss schnell enden, sonst endet der Frame nie. Lässt du die Zeile weg, die den Radius halbiert, bleibt die Bedingung für immer wahr: Das Spiel friert ein, und Check meldet, dass das Spiel seinen ersten Frame nie erreicht hat.

challenge icon

Aufgabe

Mittel

Ersetze im Zeichenteil den einzelnen Ring durch eine while-Schleife:

  1. Beginne mit radius = 200 und rings = 0.
  2. Solange radius > 10 gilt: Zeichne einen Ringumriss in der Farbe (150, 190, 255), mit einer Breite von 2 und zentriert bei (320, 240); halbiere den Radius mit //; erhöhe rings um 1.
  3. Zeige nach der Schleife f"Rings: {rings}" bei (20, 20) an. Die Ausgabe lautet Rings: 5.

Probier es selbst

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.
font = pygame.font.Font(None, 36)

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

    # Ändere hier Dinge, einmal pro Frame.

    screen.fill((20, 24, 48))
    # Zeichne hier, nachdem der Bildschirm gefüllt wurde.
    pygame.draw.circle(screen, (150, 190, 255), (320, 240), 200, 2)
    text = font.render("Rings: 1", True, (230, 230, 240))
    screen.blit(text, (20, 20))

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

pygame.quit()
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Python in einem Spielfenster

Übe selbstständig: Pygame-Playground