Menu
CoddyTech

Uma lista de objetos

Parte da seção Sprites e imagens do Journey de Pygame da Coddy. Lição 13 de 36.

Duas estrelas nomeadas não formam um céu. Quarenta precisam de uma lista: crie os objetos em um loop e acrescente cada um deles.

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))

Então, um loop atualiza todas elas e outro desenha todas elas:

for star in stars:
    star.update()

Dentro do for, star é cada objeto, um de cada vez, então star.update() move aquela estrela com sua própria velocidade. Adicionar mais cem estrelas muda um número; o código de atualização e desenho continua igual.

Crie a lista uma vez, antes do loop do jogo. Uma lista criada dentro do loop é uma nova lista de novas estrelas a cada quadro, todas de volta às posições iniciais, então nada se move.

challenge icon

Desafio

Médio
  1. Adicione import random no início.
  2. Antes do loop, crie stars: uma lista de 40 objetos Star, cada um com um x aleatório de 0 a 639, um y aleatório de 0 a 479 e uma velocidade aleatória de 1 a 3.
  3. No loop, atualize cada estrela em stars e desenhe cada estrela após o fill. Remova slow e fast.

Experimente você mesmo

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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Sprites e imagens

Pratique por conta própria: Playground de Pygame