Menu
CoddyTech

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 + 1

El 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.

challenge icon

Desafío

Intermedio

En la parte de dibujo, reemplaza el anillo único por un bucle while:

  1. Empieza con radius = 200 y rings = 0.
  2. 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 a rings.
  3. Después del bucle, muestra f"Rings: {rings}" en (20, 20). Se lee Rings: 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()
quiz iconPonte a prueba

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

Practica por tu cuenta: Playground de Pygame