Dojo Defender Session 2 : Notes du coach
Objectif de cette session
Après cette session, un ninja sait :
- Créer des balles avec
on_key_downet un mécanisme de cooldown - Faire apparaître des objets ennemis et les faire bouger avec une oscillation sinusoïdale
- Détecter les collisions entre les balles et les ennemis (boucle imbriquée)
- Mettre en place un système de vagues avec une difficulté qui monte
Préparation (30 min avant la session)
- Les ZIP du starter prêts sur USB et sur le site :
dojo-defender-s3-starter.fr.zipetdojo-defender-s3-solution.fr.zip. - Lancer le starter une fois sur le portable de la salle dojo.
- Les ninjas qui ont manqué la S1 : renvoie-les vers la solution de la S1.
Répartition du temps (3 heures)
Cette session fait partie intégrante de la session 3 normale (Space Blaster). Utilise le temps comme ceci :
| Temps | Activité |
|---|---|
| 0:00 à 1:00 | Session 3 : Space Blaster (étapes 1-4) |
| 1:00 à 1:15 | Retour sur Dojo Defender + télécharger le starter |
| 1:15 à 1:45 | Étapes 1-2 : tirer + cooldown |
| 1:45 à 2:15 | Étape 3 : faire apparaître + bouger les ennemis |
| 2:15 à 2:45 | Étape 4 : collision + vagues |
| 2:45 à 3:00 | Showcase + cliffhanger |
Questions fréquentes
« on_key_down n’est pas reconnu »
C’est un callback Pgzero — la fonction doit s’appeler exactement on_key_down avec key comme paramètre. Pas de fautes de frappe.
« Mes balles disparaissent tout de suite »
Les balles font y -= 8 mais commencent à ship.y - 20. Vérifie que bullet.y n’est pas tout de suite sous -10. Si le vaisseau est trop haut, ça peut arriver.
« RuntimeError: list changed during iteration »
Le ninja utilise for enemy in enemies (sans [:]) alors qu’il appelle enemies.remove(). Explique que [:] crée une copie.
« Les ennemis ne bougent pas en sinus »
L’oscillation sinusoïdale a besoin de start_x, strafe_amplitude et strafe_speed comme champs de l’Actor. Les ninjas plus jeunes peuvent d’abord faire un simple mouvement de ping-pong.
« Le compteur de vagues ne va pas »
enemies_destroyed % 10 == 0 se déclenche tous les 10 kills. Si le ninja ne déclare pas enemies_destroyed en global dans la fonction, le compteur ne marche pas.
Indices pour Stretch et Expert
Basic : cooldown de tir Explique pourquoi le cooldown est nécessaire : sans cooldown, l’ordinateur tire des milliers de balles par seconde quand ESPACE reste enfoncée.
Stretch : ennemis
spawn_interval = 120, c’est 2 secondes à 60 fps. À mesure que le score monte, l’intervalle descend jusqu’à 60 (1 seconde).
Expert : collision + vagues
La boucle imbriquée (balles × ennemis) est le concept le plus difficile. Dessine-le au tableau : pour chaque balle, tu vérifies tous les ennemis. break est nécessaire pour arrêter après un hit.
Expert : mouvement sinusoïdal
math.sin(timer * speed + offset) * amplitude est une onde. timer fait que l’onde continue d’avancer. Sans start_x, l’ennemi s’éloigne de sa position de départ.
Script du cliffhanger
« Aujourd’hui, tu as abattu des ennemis et survécu aux vagues. La prochaine fois : les POWER-UPS. Des boucliers qui te protègent, des speed-boosts qui te rendent plus rapide et des tirs en éventail qui lancent trois balles à la fois. Ton vaisseau devient plus fort à mesure que tu survis plus longtemps. »