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.zip et dojo-defender-s5-solution.fr.zip.
  • Lancer le starter une fois sur le portable de la salle dojo.
  • Vérifie que enemy_zigzag.png et enemy_charger.png se trouvent dans le dossier images/ 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 :

TempsActivité
0:00 à 1:15Session 5 : Breakout (étapes 1-4)
1:15 à 1:30Intro 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:00Showcase + 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. »