Menu
CoddyTech

Contare con while

Fa parte della sezione Python in una finestra di gioco del percorso Pygame di Coddy. Lezione 19 di 32.

Un ciclo while si ripete finché la sua condizione è vera. Usalo quando non sai in anticipo quante volte ripetere il ciclo:

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

Il raggio si dimezza ogni volta: 200, 100, 50, 25, 12. // divide e scarta la parte dopo la virgola, quindi 25 // 2 è 12. Poi diventa 6, la condizione è falsa e il ciclo termina dopo 5 anelli. rings li conta. Il quinto numero nella chiamata circle, 2, disegna un contorno largo 2 pixel invece di un cerchio pieno.

Anche il ciclo di gioco è un ciclo while: continua finché non chiudi la finestra. Un ciclo while all'interno di un frame deve terminare rapidamente, altrimenti il frame non finisce mai. Se ometti la riga che dimezza il raggio, la condizione rimane vera per sempre: il gioco si blocca e Check indica che il gioco non ha mai raggiunto il primo frame.

challenge icon

Sfida

Medio

Nella parte di disegno, sostituisci l’anello singolo con un ciclo while:

  1. Inizia con radius = 200 e rings = 0.
  2. Finché radius > 10: disegna un anello di contorno di colore (150, 190, 255), larghezza 2, centrato in (320, 240); dimezza il raggio con //; aggiungi 1 a rings.
  3. Dopo il ciclo, mostra f"Rings: {rings}" in (20, 20). Si legge Rings: 5.

Provalo tu

import pygame

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

# Prepara tutto qui, prima del ciclo di gioco.
font = pygame.font.Font(None, 36)

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

    # Modifica gli elementi qui, una volta per fotogramma.

    screen.fill((20, 24, 48))
    # Disegna qui, dopo aver riempito lo schermo.
    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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Python in una finestra di gioco

Esercitati da solo: Playground Pygame