Session 2 : Dodge Meteors
Ton vaisseau flotte dans l’espace sombre pendant que des météores arrivent du haut vers le bas. Évite-les, ou perds une vie. Plus tu survis longtemps, plus ils vont vite. Et cette fois, tu construis aussi Dojo Defender : le plus grand projet qui grandit à chaque session.
Ce que tu vas apprendre aujourd’hui
- Utiliser des listes pour garder plusieurs objets
- Spawner des objets (les créer) et les supprimer
- Tenir les vies à jour et afficher un écran de game over
- Dojo Defender : ajouter ton propre vaisseau au plus grand projet
Étape 0 : Installation
- Ouvre Thonny.
- Télécharge le starter via ce lien, décompresse le ZIP et ouvre
main.py. - Clique sur Run. Tu vois ton vaisseau en bas, mais aucun météore ne tombe encore.
- Des problèmes ? Va voir Installer Thonny.
Étape 1 : Fais apparaître des météores
Complète la fonction spawn_meteor(). Un météore est un Actor qui commence en haut de l’écran à une position x au hasard :
import random
def spawn_meteor():
rock = Actor('meteor')
rock.x = 0
rock.y = random.randint(30, WIDTH - 30)
meteors.append(rock)Appelle la fonction dans update(), mais pas à chaque frame, sinon l’écran se remplit d’un coup. La fonction update() tourne 60 fois par seconde. Utilise ça pour tenir un compteur :
Regarde ci-dessous à quelle vitesse un météore se déplace selon la vitesse, et combien de pixels ça fait par seconde :
Utilise un compteur :
# en haut, en dehors des fonctions :
timer = 0
def update():
global timer
timer += 1
if timer % 60 == 0: # chaque seconde (60 frames)
spawn_meteor()Clique sur Run. Après une seconde, le premier météore apparaît, mais il ne bouge pas encore.
Étape 2 : ✅ Basic : faire tomber les météores et les faire disparaître
Fais descendre tous les météores de la liste, et supprime-les quand ils sortent de l’écran :
def update():
global timer
timer += 1
if timer % 60 == 0:
spawn_meteor()
for rock in meteors[:]: # [:] = une copie pour pouvoir supprimer sans risque
rock.y += 4
if rock.y > HEIGHT + 30:
meteors.remove(rock)Détecter une collision : Si un météore touche le vaisseau, tu perds une vie. Ajoute ceci dans la boucle :
if rock.colliderect(ship):
meteors.remove(rock)
global lives
lives -= 1
if lives <= 0:
# TODO : game over (étape 3)
passÉtape 3 : ⭐ Stretch : game over et vitesse qui augmente
Game over : Ajoute une variable game_over = False en haut. Si lives == 0, mets game_over = True. Dans draw(), affiche un texte quand game_over vaut True :
if game_over:
screen.draw.text(
"GAME OVER",
center=(WIDTH / 2, HEIGHT / 2),
color="red",
fontsize=60,
)Arrête le mouvement dans update() quand game_over vaut True :
def update():
if game_over:
return
...Augmenter la vitesse : Fais aller les météores plus vite à mesure que le score monte :
snelheid = 3 + score // 5 # tous les 5 points, +1 de vitesse
rock.y += snelheidÉtape 4 : 🔥 Expert : score et plusieurs tailles de météores
Score : Chaque seconde que tu survis, +1 point. Ajoute global score et augmente dans update() :
if timer % 60 == 0:
global score
score += 1
spawn_meteor()Plusieurs tailles : Fais des petits, des moyens et des grands météores. Utilise une variable schaal et adapte la hitbox :
def spawn_meteor():
rock = Actor('meteor')
rock.x = random.randint(30, WIDTH - 30)
rock.y = 0
rock.schaal = random.choice([0.5, 1.0, 1.5])
meteors.append(rock)Les petits météores vont plus vite ; les grands sont plus difficiles à éviter mais rapportent plus de points.
Dojo Defender
Télécharge le starter Dojo Defender d’aujourd’hui. C’est la base du projet qui grandit à chaque session. Ajoute aujourd’hui ton vaisseau et fais-le bouger avec les flèches.
Tu n’étais pas là la dernière fois ? Pas de problème — télécharge la solution de la dernière fois et tu peux suivre tout de suite.
La fiche de travail complète de Dojo Defender se trouve sur la page Dojo Defender.
Showcase
Montre ton jeu à un coach et à un buddy. Combien de temps tu survis ? Qui fait le meilleur score ?
À la prochaine !
« La prochaine fois : ton propre vaisseau RÉPLIQUE. Des ennemis en formation, et c’est toi qui les exploses. »
À emporter chez toi
- Facile : change la couleur d’arrière-plan en violet foncé ou vert foncé.
- Moyen : ajoute un son quand un météore touche le vaisseau (
sounds/hit.wav). - Difficile : fais aller les météores plus vite à mesure qu’il y en a plus à l’écran (pas seulement le score).
- Très difficile : ajoute des power-ups : une étoile dorée qui te donne une vie de plus quand tu la touches.