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
- Ouvre Thonny.
- Télécharge le starter via ce lien, décompresse le ZIP et ouvre
main.pydans Thonny. - 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.
- 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 + 3Clique 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).
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 + 5Clique 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 = 0L’étoile remonte quand tu l’attrapes. Mais et si tu la rates ? Ajoute aussi ceci :
if star.y > HEIGHT:
star.y = 0Bonus : Fais réapparaître l’étoile à un endroit au hasard chaque fois. Ajoute en haut du fichier :
import randomRemplace ensuite star.y = 0 (aux deux endroits) par :
star.x = random.randint(20, WIDTH - 20)
star.y = 0Maintenant, 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.
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 = 0Dans 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 = 0global 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.
Limite les vies — Ajoute
levens = 3. En cas de raté (star.y > HEIGHT) :levens -= 1. Arrête le jeu quandlevens == 0avecgame_over = Trueet affiche « Game Over » dansdraw().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.Arrière-plan — Dessine des étoiles fixes en arrière-plan dans
draw(), avant le score. Utilisescreen.draw.filled_circle(x, y, 2, "white")à 20 positions au hasard. Faisrandom.seed(42)pour qu’elles ne clignotent pas.Deuxième étoile — Fais
sterren = [star, Actor("star")]. Donne à chaque étoile son proprex. Mets-les à jour toutes les deux dansupdate()et dessine-les dansdraw().Meilleur score — Garde
high_score. Siscore > high_score:high_score = score. Affichef"Meilleur : {high_score}"à côté du score.Panier plus petit — Tous les 5 points :
basket.width = max(30, basket.width - 5). Remetsbasket.widthà sa valeur au redémarrage.Bombe — Ajoute un cercle rouge qui tombe de temps en temps. Utilise un timer
bom_timeretrandom.randintpour décider quand il apparaît. Si le panier touche la bombe :score -= 2.Niveau de difficulté — Tous les 5 étoiles : augmente la vitesse de chute de 1. Prévois un maximum :
max(3, star_snelheid).