Menu
CoddyTech

Une liste d’objets

Fait partie de la section Sprites et images du Journey Pygame de Coddy. Leçon 13 sur 36.

Deux étoiles nommées ne font pas un ciel. Il en faut quarante dans une liste : crée les objets dans une boucle et ajoute chacun à la liste.

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

Ensuite, une boucle les met toutes à jour et une autre les dessine toutes :

for star in stars:
    star.update()

Dans la boucle for, star désigne chaque objet à tour de rôle, donc star.update() déplace cette étoile à sa propre vitesse. Ajouter une centaine d’étoiles de plus ne change qu’un nombre ; le code de mise à jour et de dessin reste le même.

Crée la liste une seule fois, avant la boucle de jeu. Une liste créée dans la boucle contient de nouvelles étoiles à chaque image, toutes revenues à leur position de départ, donc rien ne bouge jamais.

challenge icon

Défi

Moyen
  1. Ajoute import random en haut.
  2. Avant la boucle, crée stars : une liste de 40 objets Star, chacun avec une valeur x aléatoire de 0 à 639, une valeur y aléatoire de 0 à 479 et une vitesse aléatoire de 1 à 3.
  3. Dans la boucle, mets à jour chaque étoile de stars et dessine chaque étoile après le remplissage. Supprime slow et fast.

Essayez vous-même

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 iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Sprites et images

Entraînez-vous par vous-même : Playground Pygame