Session 8 : Notes du coach

Objectif de cette session

À la fin du checkpoint Basic, un ninja sait :

  • Faire défiler l’arrière-plan sans couture avec la technique du double blit.
  • Déplacer des obstacles de droite à gauche et les supprimer quand ils sortent de l’écran.
  • Enlever une vie lors d’une collision et arrêter le jeu à 0 vie.

Ce qui n’est pas attendu après la session 8 : les étoiles, l’augmentation de la difficulté, l’écran de game over. Ça, c’est du matériel Stretch/Expert.


Préparation (30 min avant la session)

  • L’image d’arrière-plan du starter doit faire exactement WIDTH pixels de large (800px par défaut) pour que le double blit soit sans couture.
  • speed est un float. Fais remarquer aux ninjas que pygame.Rect n’accepte que des entiers. Le starter utilise déjà int(scroll_x) ; vérifie que les ninjas ne l’enlèvent pas.
  • Timer de spawn : le starter utilise pygame.USEREVENT + 1. Explique rapidement comment fonctionne pygame.time.set_timer : il envoie automatiquement un event toutes les N millisecondes.

Répartition du temps (3 heures)

TempsActivité
0:00 à 0:10Accueil, récapitulatif de la session 7
0:10 à 0:20Projecteur : expliquer l’arrière-plan qui défile
0:20 à 1:30Travail en autonomie : étapes 1 et 2
1:30 à 2:15Stretch (étoiles)
2:15 à 2:45Expert (vitesse qui augmente) + buffer
2:45 à 3:00Showcase + cliffhanger

Questions fréquentes

« L’arrière-plan clignote » int(scroll_x) manque au moment du blit. pygame.Surface.blit attend des entiers ; si tu passes un float, pygame en fait un en interne mais ça peut donner des problèmes de cohérence d’une frame à l’autre. Vérifie les deux appels blit.

« Les obstacles ne sont pas supprimés » Vérifie que obstacles.remove(obs) est bien dans le check colliderect, pas dehors. Erreur fréquente : le if est à la mauvaise indentation.

« La vitesse augmente mais les obstacles n’arrivent pas plus souvent » pygame.time.set_timer doit être appelée à nouveau à chaque frame si l’intervalle change. Ajoute ça dans la game loop, pas une seule fois à l’initialisation. Autre solution : utilise un compteur de frames au lieu d’un timer.

« L’écran de game over disparaît tout de suite » pygame.time.wait(3000) fonctionne en dehors de la game loop. Mais si running = False est déjà mis avant le blit et le wait supplémentaires, ça ne marche pas. Assure-toi que le blit et le wait du game over sont après la boucle while running, ou utilise un flag game_over séparé.


Indices pour Stretch et Expert

Stretch : les étoiles : Les étoiles sont aussi des objets pygame.Rect. Fais remarquer aux ninjas que star.center donne un tuple (x, y), pratique pour pygame.draw.circle.

Expert : la vitesse qui augmente : speed = BASE_SPEED + score * 0.1 est simple mais efficace. Explique pourquoi on utilise max(500, ...) pour l’intervalle de spawn : sans minimum, l’intervalle deviendrait négatif ou nul avec un score élevé.


Dojo Defender aujourd’hui

Session 7 de Dojo Defender = les ninjas choisissent et construisent leur propre feature. Ça se passe dans la deuxième moitié de la session (après Sky Highway).

Préparation

  • ZIP du starter : dojo-defender-s8-starter.zip dans code/sessions/08-sky-highway/dojo-defender-starter/ — c’est la solution DD S6 complète (avec le boss).
  • Imprime les modèles de planification de la fiche de travail Dojo Defender.
  • Mets-toi d’accord avec les coaches sur qui accompagne quels ninjas pendant la partie Dojo Defender.

Temps

TempsActivité
1:15 à 1:30Intro Dojo Defender
1:30 à 1:45Choisir une feature + planifier
1:45 à 2:30Construire en autonomie
2:30 à 2:50Showcase

Features possibles (pour les coaches)

  • Power-ups (facile) : les ennemis lâchent des power-ups (spread shot, shield, speed boost) avec 20% de chance.
  • High score (facile) : garde le meilleur score dans highscore.txt, affiche-le dans le menu et au game over.
  • Difficulté (facile) : ajuste l’intervalle de spawn, la vitesse des ennemis ou le nombre de vies.
  • Nouvel ennemi (difficile) : un ennemi qui laisse une traînée de particules.
  • Idée perso (tous niveaux) : le ninja imagine lui-même une feature.

À surveiller : les ninjas veulent souvent trop de choses en même temps. Aide-les à choisir la plus petite version qui marche.

Script du cliffhanger

Lis ceci au groupe :

« Aujourd’hui, ton vaisseau a volé sur une route sans fin. La prochaine fois, quelqu’un arrive qui SE DÉFEND : un boss avec trois phases, une barre de HP, et des projectiles qui foncent sur toi. Tu arrives à le battre ? »