Menu
CoddyTech

Une explosion de particules

Fait partie de la section Son et sensations de jeu du Journey Pygame de Coddy. Leçon 9 sur 23.

Une particule est un point. Une explosion est composée de nombreuses particules créées dans la même image, au même endroit, chacune partant dans sa propre direction. Crée-les avec une boucle for et donne à chacune une vitesse aléatoire :

for i in range(20):
    particles.append({
        "x": x,
        "y": y,
        "vx": random.uniform(-3, 3),
        "vy": random.uniform(-3, 3),
        "life": random.randint(20, 40),
    })

random.uniform(-3, 3) est un nombre décimal aléatoire compris entre -3 et 3, ce qui permet à une particule de se déplacer dans n’importe quelle direction, lentement ou rapidement. randint ne donnerait que des nombres entiers, et l’explosion partirait en quelques lignes droites.

Les appels aléatoires doivent se trouver dans la boucle. Choisis vx une seule fois avant la boucle et les 20 particules auront la même vitesse : elles se déplaceront ensemble comme un seul point.

Une durée de vie aléatoire fait disparaître l’explosion de manière irrégulière, ce qui semble naturel : les particules lentes près du centre et les rapides en périphérie disparaissent à des moments différents.

Un clic de souris est un événement pygame.MOUSEBUTTONDOWN, et event.pos correspond au point où le clic a eu lieu.

challenge icon

Défi

Moyen

Un clic crée une particule qui monte. Transforme-la en une explosion :

  1. Lors d’un clic, ajoute 20 particules au point cliqué.
  2. Attribue à chacune vx et vy à partir de random.uniform(-3, 3), ainsi qu’une life à partir de random.randint(20, 40).

Essayez vous-même

import random
import pygame

pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Fireworks")
clock = pygame.time.Clock()

particles = []

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.MOUSEBUTTONDOWN:
            x, y = event.pos
            particles.append({"x": x, "y": y, "vx": 0, "vy": -2, "life": 30})

    for p in particles:
        p["x"] += p["vx"]
        p["y"] += p["vy"]
        p["life"] -= 1

    screen.fill((20, 20, 36))
    for p in particles:
        if p["life"] > 0:
            pygame.draw.circle(screen, (255, 160, 60), (p["x"], p["y"]), 3)
    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 Son et sensations de jeu

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