Contar con while
Parte de la sección Python en una ventana de juego del Journey de Pygame de Coddy. Lección 19 de 32.
Un bucle while se repite mientras su condición sea verdadera. Úsalo cuando no sepas de antemano cuántas veces hay que dar la vuelta:
radius = 200
rings = 0
while radius > 10:
pygame.draw.circle(screen, (150, 190, 255), (320, 240), radius, 2)
radius = radius // 2
rings = rings + 1El radio se reduce a la mitad cada vez: 200, 100, 50, 25, 12. // divide y descarta lo que queda después del punto, así que 25 // 2 es 12. Después es 6, la condición es falsa y el bucle termina después de 5 anillos. rings los cuenta. El quinto número en la llamada al círculo, 2, dibuja un contorno de 2 píxeles de ancho en lugar de un círculo relleno.
El bucle del juego también es un bucle while, uno que se ejecuta hasta que cierres la ventana. Un bucle while dentro de un fotograma debe terminar rápido, o el fotograma nunca termina. Si omites la línea que reduce el radio a la mitad, la condición permanece verdadera para siempre: el juego se congela y Check indica que el juego nunca llegó a su primer fotograma.
Desafío
IntermedioEn la parte de dibujo, reemplaza el anillo único por un bucle while:
- Empieza con
radius = 200yrings = 0. - Mientras
radius > 10: dibuja un anillo de contorno de color(150, 190, 255), de ancho 2, centrado en (320, 240); reduce a la mitad el radio con//; suma 1 arings. - Después del bucle, muestra
f"Rings: {rings}"en (20, 20). Se leeRings: 5.
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("Night Sky")
clock = pygame.time.Clock()
# Configura todo aquí, antes del bucle del juego.
font = pygame.font.Font(None, 36)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Cambia las cosas aquí, una vez por fotograma.
screen.fill((20, 24, 48))
# Dibuja aquí, después de rellenar la pantalla.
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()
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Python en una ventana de juego
4Bucles que dibujan
Repetir con forInicio, fin y pasoUsar la variable del bucleUn bucle dentro de otroContar con whilePractica por tu cuenta: Playground de Pygame