Dojo Defender Session 3 : Notes du coach
Objectif de cette session
Après cette session, un ninja sait :
- Expliquer la différence entre pgzero et raw pygame
- Écrire la game loop lui-même (
while running: clock.tick(60)) - Convertir des Actors en GameObject avec Surface et Rect
- Gérer l’input avec
pygame.key.get_pressed()etKEYDOWN - Charger et jouer du son avec
pygame.mixer
Préparation (30 min avant la session)
- Les ZIP du starter prêts sur USB et sur le site :
dojo-defender-s4-starter.fr.zipetdojo-defender-s4-solution.fr.zip. - Lancer le starter une fois sur le portable de la salle dojo.
- Vérifie que les sons sont prêts dans
dojo-defender-assets/sounds/, ou renvoie les ninjas vers la solution. - Explique pourquoi on change : « pgzero, c’est des petites roues. Maintenant, vous devenez de vrais développeurs Pygame. »
Répartition du temps (3 heures)
Cette session fait partie intégrante de la session 4 normale (Pong). Utilise le temps comme ceci :
| Temps | Activité |
|---|---|
| 0:00 à 1:15 | Session 4 : Pong (étapes 1-4) |
| 1:15 à 1:30 | Intro Dojo Defender : pgzero vs pygame |
| 1:30 à 2:00 | Explorer le code + restart (Basic) |
| 2:00 à 2:30 | Ajouter le son (Stretch) |
| 2:30 à 2:50 | Expert : bouton mute, volume, particles |
| 2:50 à 3:00 | Showcase + cliffhanger |
Questions fréquentes
« Les images ne se chargent pas »
Il manque probablement l’extension .png. En pgzero, elle était ajoutée automatiquement, en pygame non. Vérifie : GameObject('player_ship.png', ...).
« pygame.image.load donne une erreur »
Le chemin doit être correct. Le starter utilise _DIR pour déterminer le chemin du script. Mets print(_DIR) pour débugger.
« Le son ne marche pas »
Vérifie que pygame.mixer.init() a été appelé. Sans cette ligne, pygame.mixer.Sound() ne fait rien.
« Je n’entends rien pour bg_music »
pygame.mixer.music.play(-1) est nécessaire — sans -1, ça ne joue qu’une fois.
« Pourquoi tout est dans une seule boucle while ? »
Parce que pygame n’a pas de fonctions draw() et update(). Tout se passe dans la boucle. C’est comme ça que marchent les vrais jeux : à chaque frame, tout est refait.
Indices pour Stretch et Expert
Stretch : son
La méthode la plus simple : copie les sons du dossier de la solution. Ou télécharge dojo-defender-assets séparément.
Expert : mute
Utilise un seul booléen muted. pygame.mixer.music.set_volume(0) coupe la musique. Pour les SFX, tu dois entourer chaque play() d’un if not muted:.
Expert : effet de particules Une particule simple : stocke (x, y, dx, dy, durée de vie) dans un dict. Fais-les bouger et pâlir à chaque frame. Supprime-les quand la durée de vie est à 0.
Script du cliffhanger
« Vous avez porté Dojo Defender vers le vrai pygame et vous avez ajouté du son. La prochaine fois : les POWER-UPS. Des boucliers, des speed-boosts, des tirs en éventail. Et un vrai boss à la fin des vagues. »