Un bucle dentro de otro
Parte de la sección Python en una ventana de juego del Journey de Pygame de Coddy. Lección 18 de 32.
El cuerpo de un bucle puede contener otro bucle. El bucle interno se ejecuta por completo en cada iteración del externo:
for row in range(4):
for col in range(8):
x = 130 + col * 50
y = 210 + row * 60
pygame.draw.rect(screen, (255, 210, 90), (x, y, 20, 20))Para row 0, el bucle interno dibuja 8 ventanas a lo largo de la parte superior. Después, row pasa a ser 1 y el bucle interno dibuja 8 más, 60 píxeles más abajo. Cuatro filas de ocho suman 32 ventanas. Una cuadrícula siempre tiene esta forma: un bucle para las filas y otro para las columnas.
pygame.draw.rect(screen, colour, (x, y, width, height)) dibuja un rectángulo relleno con la esquina superior izquierda en (x, y).
Fíjate en la sangría: el for interno tiene sangría respecto al externo, y su cuerpo tiene otra sangría, 8 espacios desde el bucle externo.
Desafío
IntermedioIlumina todo el edificio:
- Envuelve el bucle de las ventanas en
for row in range(4):. - Establece
y = 210 + row * 60, para que las filas queden en y 210, 270, 330 y 390. - Obtendrás 32 ventanas: 4 filas de 8.
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()
# Prepara todo aquí, antes del bucle del juego.
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# Actualiza las cosas aquí, una vez por fotograma.
screen.fill((20, 24, 48))
# Dibuja aquí, después de rellenar la pantalla.
pygame.draw.rect(screen, (40, 44, 70), (100, 180, 440, 300))
for col in range(8):
x = 130 + col * 50
y = 210
pygame.draw.rect(screen, (255, 210, 90), (x, y, 20, 20))
pygame.display.flip()
clock.tick(60)
pygame.quit()
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