Session 1 : Catch the Stars

Dans cette session, tu construis un mini-jeu : une étoile tombe et toi, tu l’attrapes avec un panier. À la fin de la session, tout bouge, le jeu compte combien d’étoiles tu attrapes et tu as ton premier jeu à toi.

Ce que tu vas apprendre aujourd’hui

  • Utiliser des variables pour placer des objets
  • La fonction draw() : ce que tu dessines à chaque frame
  • La fonction update() : ce qui change à chaque frame
  • Les entrées clavier : bouger avec les flèches

Étape 0 : Installation

  1. Ouvre Thonny.
  2. Télécharge le starter via ce lien, décompresse le ZIP et ouvre main.py dans Thonny.
  3. Clique sur le bouton vert Run. Tu vois une fenêtre bleu foncé avec un panier en bas et une étoile en haut, mais rien ne bouge encore.
  4. Des problèmes ? Va voir Installer Thonny.

Étape 1 : Laisse tomber l’étoile

La fonction update() tourne 60 fois par seconde. Tout ce que tu y mets est donc exécuté 60 fois par seconde. C’est comme ça que le mouvement fonctionne dans un jeu.

Pour l’instant, il n’y a que pass dans update(). Ça veut dire « ne fais rien ». Supprime pass et ajoute ceci :

def update():
    star.y = star.y + 3

Clique sur Run. L’étoile tombe maintenant du haut vers le bas. Quand elle sort de l’écran, elle disparaît. On va régler ça.

Que se passe-t-il ici ? star.y est la position verticale de l’étoile. Plus y est grand, plus l’étoile est bas sur l’écran. En ajoutant + 3 à chaque frame, l’étoile descend petit à petit.

Le système de coordonnées : (0, 0) se trouve en haut à gauche, pas en bas à gauche comme en maths. x va vers la droite, y va vers le bas. L’étoile commence à y = 30 (presque tout en haut), le panier est à y = 370 (presque tout en bas).

Système de coordonnées Pygame Zero : origine en haut à gauche, y va vers le bas

Bouge ta souris sur l’écran ci-dessous pour voir les coordonnées :

Bouge ta souris sur l'écran pour voir les coordonnées.

Tu veux en savoir plus sur le fonctionnement de l’écran ? → Les coordonnées expliquées

Bouge les curseurs et regarde comment actor.x et actor.y changent quand l’actor se déplace :

Étape 2 : ✅ Basic : fais bouger le panier

C’est le moment de piloter le panier. Pygame Zero a une variable pratique, keyboard, qui garde la trace des touches pressées.

Ajoute ceci dans update(), après la ligne de l’étoile :

def update():
    star.y = star.y + 3

    if keyboard.left:
        basket.x = basket.x - 5
    if keyboard.right:
        basket.x = basket.x + 5

Clique sur Run et utilise les flèches. Le panier bouge avec toi !

Astuce (facultatif, compte comme Stretch) : Si tu pousses le panier trop à gauche ou trop à droite, il disparaît de l’écran. Tu peux ajouter un test qui évite ça ? Indice : utilise WIDTH et compare avec basket.x.

Étape 3 : ⭐ Stretch : attrape l’étoile

Maintenant, tu veux que quelque chose se passe quand le panier touche l’étoile. Pour ça, tu utilises colliderect. Il vérifie si deux rectangles se chevauchent.

Ajoute ceci dans update() :

    if star.colliderect(basket):
        star.y = 0

L’étoile remonte quand tu l’attrapes. Mais et si tu la rates ? Ajoute aussi ceci :

    if star.y > HEIGHT:
        star.y = 0

Bonus : Fais réapparaître l’étoile à un endroit au hasard chaque fois. Ajoute en haut du fichier :

import random

Remplace ensuite star.y = 0 (aux deux endroits) par :

        star.x = random.randint(20, WIDTH - 20)
        star.y = 0

Maintenant, l’étoile tombe chaque fois à un autre endroit. Bien plus difficile à attraper !

Étape 4 : 🔥 Expert : ajoute un score

Un vrai jeu garde la trace de ton score. Pour ça, tu as besoin d’une variable qui vit en dehors des fonctions : une variable globale.

Comment fonctionne une variable : une petite boîte avec un nom et une valeur

Clique sur le bouton ci-dessous pour voir comment score change chaque fois que tu attrapes une étoile :

Ajoute ceci tout en haut, en dehors de toutes les fonctions (après les lignes de basket et star) :

score = 0

Dans draw(), ajoute :

    screen.draw.text(f"Score: {score}", topleft=(10, 10), color="white")

Dans update(), adapte le code de l’attrape pour que le score monte :

    if star.colliderect(basket):
        global score
        score = score + 1
        star.x = random.randint(20, WIDTH - 20)
        star.y = 0

global score dit à Python : « je parle du score d’en dehors de cette fonction, pas d’une nouvelle variable locale. » Sans cette ligne, tu obtiens une erreur.

Clique sur Run. Le score est en haut à gauche et augmente chaque fois que tu attrapes une étoile !

Showcase

Montre ton jeu à un coach et à un buddy. Raconte ce que tu as fait : ce qui marche et ce que tu as ajouté en plus.

À la prochaine !

« La prochaine fois : des trucs qui RÉPLIQUENT. Et ça fait BOUM, avec un vrai son. »

À emporter chez toi

Essaie une de ces extensions à la maison. Chacune a un indice de code pour te lancer.

  1. Limite les vies — Ajoute levens = 3. En cas de raté (star.y > HEIGHT) : levens -= 1. Arrête le jeu quand levens == 0 avec game_over = True et affiche « Game Over » dans draw().

  2. Couleur d’étoile aléatoire — À chaque attrape : donne une nouvelle couleur à l’étoile avec random.randint(50, 255) pour le rouge, le vert et le bleu. Commence à 50, pas à 0 — sinon l’étoile est parfois noire et invisible.

  3. Arrière-plan — Dessine des étoiles fixes en arrière-plan dans draw(), avant le score. Utilise screen.draw.filled_circle(x, y, 2, "white") à 20 positions au hasard. Fais random.seed(42) pour qu’elles ne clignotent pas.

  4. Deuxième étoile — Fais sterren = [star, Actor("star")]. Donne à chaque étoile son propre x. Mets-les à jour toutes les deux dans update() et dessine-les dans draw().

  5. Meilleur score — Garde high_score. Si score > high_score : high_score = score. Affiche f"Meilleur : {high_score}" à côté du score.

  6. Panier plus petit — Tous les 5 points : basket.width = max(30, basket.width - 5). Remets basket.width à sa valeur au redémarrage.

  7. Bombe — Ajoute un cercle rouge qui tombe de temps en temps. Utilise un timer bom_timer et random.randint pour décider quand il apparaît. Si le panier touche la bombe : score -= 2.

  8. Niveau de difficulté — Tous les 5 étoiles : augmente la vitesse de chute de 1. Prévois un maximum : max(3, star_snelheid).

Bloqué ? Demande au dojo suivant à un coach, ou essaie simplement autre chose. Programmer, c’est faire.

Regarde le cheatsheet de cette session