Menu
CoddyTech

Una lista de objetos

Parte de la sección Sprites e imágenes del Journey de Pygame de Coddy. Lección 13 de 36.

Dos estrellas con nombre no forman un cielo. Cuarenta necesitan una lista: crea los objetos en un bucle y añade cada uno.

stars = []
for i in range(40):
    x = random.randint(0, 639)
    y = random.randint(0, 479)
    speed = random.randint(1, 3)
    stars.append(Star(x, y, speed))

Después, un bucle las actualiza a todas y otro las dibuja a todas:

for star in stars:
    star.update()

Dentro de for, star es cada objeto por turno, así que star.update() mueve esa estrella a su propia velocidad. Añadir cien estrellas más cambia un solo número; el código de actualización y dibujo sigue igual.

Crea la lista una vez, antes del bucle del juego. Una lista creada dentro del bucle es una nueva lista de estrellas nuevas en cada fotograma, todas de vuelta en sus posiciones iniciales, así que nunca se mueve nada.

challenge icon

Desafío

Intermedio
  1. Agrega import random al principio.
  2. Antes del bucle, crea stars: una lista de 40 objetos Star, cada uno con un valor x aleatorio de 0 a 639, un valor y aleatorio de 0 a 479 y una velocidad aleatoria de 1 a 3.
  3. En el bucle, actualiza cada estrella de stars y dibuja cada estrella después del relleno. Elimina slow y fast.

Pruébalo tú mismo

import pygame

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

class Star:
    def __init__(self, x, y, speed):
        self.x = x
        self.y = y
        self.speed = speed

    def update(self):
        self.y += self.speed
        if self.y > 480:
            self.y = 0

    def draw(self, screen):
        pygame.draw.circle(screen, (255, 255, 255), (self.x, self.y), 4)


slow = Star(200, 0, 1)
fast = Star(440, 0, 3)

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

    slow.update()
    fast.update()

    screen.fill((20, 22, 40))
    slow.draw(screen)
    fast.draw(screen)
    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 Sprites e imágenes

Practica por tu cuenta: Playground de Pygame