Session 3 : Space Blaster
Les ennemis sont en formation en haut de l’écran. Toi, tu es en bas avec un vaisseau et un seul objectif : les éliminer tous avant qu’ils atteignent le fond. Appuie sur ESPACE pour tirer, et ne rate pas.
Ce que tu vas apprendre aujourd’hui
- Garder les projectiles dans une liste
- Créer un projectile quand tu appuies sur ESPACE
- La collision entre les projectiles et les ennemis
- Game over quand un ennemi atteint le fond
É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 le vaisseau en bas et 12 ennemis dans une grille, mais rien ne bouge et tu ne sais pas encore tirer.
Étape 1 : Fais bouger le vaisseau
Le vaisseau bouge déjà avec les flèches. Vérifie le code dans update(). Fais en sorte que le vaisseau ne sorte pas de l’écran :
if keyboard.left and ship.x > 30:
ship.x -= 5
if keyboard.right and ship.x < WIDTH - 30:
ship.x += 5Étape 2 : ✅ Basic : tirer avec ESPACE
Complète la fonction shoot(). Un projectile est un Actor qui commence à la position du vaisseau :
def shoot():
kogel = Actor('bullet')
kogel.x = ship.x
kogel.y = ship.y - 20
bullets.append(kogel)Appelle shoot() quand la barre d’espace est pressée. Utilise on_key_down (style Pgzero) :
def on_key_down(key):
if key == keys.SPACE:
shoot()Fais monter les projectiles dans update() et supprime-les quand ils sortent de l’écran :
for kogel in bullets[:]:
kogel.y -= 8
if kogel.y < -10:
bullets.remove(kogel)Étape 3 : ⭐ Stretch : toucher les ennemis
colliderect vérifie si la hitbox rectangulaire de deux actors se chevauche. Bouge ta souris sur l’écran ci-dessous pour voir quand ça arrive :
Vérifie dans update() si un projectile touche un ennemi :
for kogel in bullets[:]:
kogel.y -= 8
if kogel.y < -10:
bullets.remove(kogel)
continue
for vijand in enemies[:]:
if kogel.colliderect(vijand):
bullets.remove(kogel)
enemies.remove(vijand)
global score
score += 10
breakCondition de victoire : Si enemies est vide, tu as gagné :
if not enemies:
screen.draw.text("TU GAGNES !", center=(WIDTH/2, HEIGHT/2), color="yellow", fontsize=60)Étape 4 : 🔥 Expert : faire bouger les ennemis et game over
Fais descendre les ennemis lentement. Utilise un timer :
vijand_timer = 0
def update():
global vijand_timer
vijand_timer += 1
if vijand_timer % 90 == 0: # toutes les 1,5 seconde
for vijand in enemies:
vijand.y += 20Game over quand un ennemi atteint le fond :
for vijand in enemies:
if vijand.y > HEIGHT - 30:
global game_over
game_over = TrueTirer plus vite : Prévois un cooldown pour que le ninja ne puisse pas tirer à l’infini :
shoot_cooldown = 0
def update():
global shoot_cooldown
if shoot_cooldown > 0:
shoot_cooldown -= 1
def on_key_down(key):
global shoot_cooldown
if key == keys.SPACE and shoot_cooldown == 0:
shoot()
shoot_cooldown = 15Showcase
Montre ton jeu à un coach. En combien de temps tu élimines tous les ennemis ? Compare ton score avec un buddy.
À la prochaine !
« La prochaine fois : deux joueurs, une balle : PONG. Et tu apprends le vrai pygame, sans pgzrun. »
À emporter chez toi
- Facile : change la couleur des projectiles ou des ennemis.
- Moyen : fais bouger les ennemis à gauche et à droite (une seule direction par pas, demi-tour au bord).
- Difficile : ajoute une second wave : quand tous les ennemis sont partis, fais apparaître une nouvelle rangée qui descend plus vite.
- Très difficile : fais aussi tirer les ennemis : envoie un projectile vers le bas au hasard toutes les N frames.
Regarde le cheatsheet de cette session
Dojo Defender
Télécharge le starter Dojo Defender d’aujourd’hui.
Tu n’étais pas là la dernière fois ? Télécharge la solution de la session 1 et commence avec ça.
La fiche de travail complète : Dojo Defender Session 2.