Dojo Defender Session 4 : Notes du coach
Objectif de cette session
Après cette session, un ninja sait :
- Appliquer une state machine (MENU → PLAYING → GAME_OVER)
- Écrire une fonction reset qui remet toutes les variables globales à zéro
- Implémenter plusieurs IA d’ennemis (drone, zigzag, charger)
- Construire un système de waves qui fait monter la difficulté
Préparation (30 min avant la session)
- Les ZIP du starter prêts sur USB et sur le site :
dojo-defender-s5-starter.fr.zipetdojo-defender-s5-solution.fr.zip. - Lancer le starter une fois sur le portable de la salle dojo.
- Vérifie que
enemy_zigzag.pngetenemy_charger.pngse trouvent dans le dossierimages/du starter. - Explique la state machine au tableau : dessine trois blocs (MENU, PLAYING, GAME_OVER) avec des flèches entre eux.
Répartition du temps (3 heures)
Cette session fait partie intégrante de la session normale 5 (Breakout). Utilise le temps comme ceci :
| Temps | Activité |
|---|---|
| 0:00 à 1:15 | Session 5 : Breakout (étapes 1-4) |
| 1:15 à 1:30 | Intro Dojo Defender : dessiner la state machine au tableau |
| 1:30 à 2:00 | Étapes 1-2 : menu + game over + reset (Basic) |
| 2:00 à 2:30 | Étape 3 : trois types d’ennemis (Stretch) |
| 2:30 à 2:50 | Étape 4 : waves améliorées (Expert) |
| 2:50 à 3:00 | Showcase + cliffhanger |
Questions fréquentes
« Mon écran de game over est noir »
Tu ne dessines probablement rien dans la branche elif state == "GAME_OVER". Vérifie que screen.fill() et le dessin du texte GAME OVER se trouvent bien dans cette branche. Utilise le même arrière-plan que pour PLAYING.
« Le reset ne marche pas complètement »
La fonction reset_game() oublie souvent une variable. Les plus souvent oubliées : shoot_cooldown, explosion_active, explosion_frame, spawn_counter. Fais vérifier au ninja que TOUT est remis à zéro.
« Le zigzag sort de l’écran »
Le zigzag peut rester « collé » au bord si enemy.dx n’est pas inversé. Vérifie si le test enemy.rect.left <= 0 or enemy.rect.right >= WIDTH est avant le mouvement — non, il doit venir après le mouvement, ou alors le test doit être correct. L’ordre est : bouge en x, puis vérifie s’il est sorti, puis inverse. Attention : si la vitesse est trop grande, il peut encore passer à travers le bord.
« Le charger est trop rapide / trop lent »
Ajuste le facteur * 0.8. Avec * 1.0, le charger descend aussi vite qu’il ne bouge horizontalement. Expérimente. Astuce : ralentis un peu plus le charger pour les débutants, rends-le plus rapide à mesure que la wave monte.
« ESPACE tire aussi dans le menu »
La touche ESPACE doit d’abord vérifier ce que vaut state. Fais réécrire aux ninjas la logique KEYDOWN comme à l’étape 1. Si l’ordre est faux (d’abord le tir, ensuite le menu), le joueur tire par accident dans le menu.
« Mon jeu ne s’arrête pas après le game over »
state = "GAME_OVER" doit être mis quand lives <= 0. Vérifie que ça arrive à tous les endroits où le joueur prend des dégâts (astéroïde qui touche le vaisseau, ennemi qui touche le vaisseau, ennemi qui atteint le bas).
Indices pour Stretch et Expert
Stretch : trois types d’ennemis
L’erreur la plus facile : ne pas mettre enemy.type dans la fonction de spawn. enemy.type est alors indéfini et la logique de mouvement ne fait rien. Fais ajouter un print(enemy.type) aux ninjas pour débugger.
Expert : waves améliorées
Le système de waves, c’est la cerise sur le gâteau. Seulement si l’étape 3 marche. Fais d’abord écrire aux ninjas une fonction spawn_enemy() qui appelle les trois autres. Ensuite, ils peuvent ajouter la logique des waves.
Défi pour les ninjas rapides : « Que se passe-t-il si le charger se dirige vers la gauche ou vers le bord ? Et si tu fais monter la vitesse du charger avec la wave ? »
Script du cliffhanger
« Dojo Defender a reçu un menu, trois types d’ennemis et un système de waves qui devient de plus en plus difficile. La prochaine fois : les POWER-UPS. Des boucliers qui te protègent, des speed-boosts et des spread-shots qui tirent trois balles à la fois. Accroche-toi. »