loading-icone

Jeu du Panier

Tu adores les pommes ? Récolte un maximum de pommes en codant un jeu ! 🛒🍎

Maintenant que tu as appris à utiliser ton micro:bit, il est temps de passer aux choses sérieuses avec un petit projet guidé.

L’objectif de ce projet est de créer un jeu du panier.

Jeu du panier

Principe du jeu

L’objectif est d’attraper des pommes qui tombent du ciel à l’aide d’un panier.

Visuel du jeu sur un micro:bit

Visuel du jeu sur un micro:bit

Avant de coder, voici les trois différentes parties du jeu :

Le panier

Le panier se trouve sur le sol. Il peut se déplacer sur tout l’axe horizontal (axe X), mais pas sur l’axe vertical (axe Y). Il sert à attraper les pommes qui tombent du ciel.

Les pommes

Les pommes tombent une par une du ciel, depuis une position aléatoire. Il faut réussir à en attraper le plus possible pendant la partie.

Fin de la partie

La partie s’achève dès qu’une pomme touche le sol. Dans ce cas, un message de fin de partie et le score du joueur sont affichés.

Maintenant que tu as compris comment le jeu fonctionne, passe à la page suivante pour commencer à coder !

Partie I : Le panier

Dans cette partie, tu vas commencer par t’occuper du panier.

Étape 0 : Mise en place

Commence par créer un nouveau fichier pour coder le projet.

Comme à chaque fois, pense à importer toutes les fonctions de la bibliothèque microbit en écrivant :

1
from microbit import *

Position initiale du panier

Le panier est affiché sur un unique pixel. Comme dit précédemment, il reste sur la ligne du bas, donc pas besoin de s’occuper de l’axe Y. En revanche, le panier n’a pas toujours la même position sur l’axe X (horizontal).

Étape 1 : Position initiale du panier

Commence par créer une variable pos_panier qui représente la position du panier sur l’axe X. Au début de la partie, le panier est au milieu de la ligne du bas, comme sur l’image ci-dessous.

Position initiale du panier sur le micro:bit

Position initiale du panier sur le micro:bit

Quelques rappels avant de continuer !

Rappel : Les variables booléennes

Une variable booléenne représente deux valeurs : True (Vrai 🇫🇷) ou False (Faux 🇫🇷).
Une affirmation vérifiée est vraie (True), autrement elle est fausse (False).

Appuie sur le bouton Run pour exécuter le code python ci-dessous
Le résultat :

        

    

Ce code affiche le mot clé True, donc l’affirmation 1 < 2 est vraie.

Une variable booléenne permet de stocker le résultat d’un test.

Appuie sur le bouton Run pour exécuter le code python ci-dessous
Le résultat :

        

    

Tu peux également assigner directement les valeurs True ou False.

Appuie sur le bouton Run pour exécuter le code python ci-dessous
Le résultat :

        

    

Différence entre = et ==

En Python, = et == fonctionnent différemment. Le = est utilisé pour assigner une valeur, tandis que le == est utilisé pour une comparaison.

Appuie sur le bouton Run pour exécuter le code python ci-dessous
Le résultat :

        

    

Rappel : Les boucles

Les variables booléennes sont utilisées dans les conditions (if) ou comme condition d’arrêt dans les boucles (while). Pour l’utilisation dans les boucles, il faut penser à actualiser la valeur de la variable à l’intérieur de la boucle, de sorte à ce qu’au bout d’un moment, la condition devienne fausse et que la boucle s’arrête.

Appuie sur le bouton Run pour exécuter le code python ci-dessous
Le résultat :

        

    
Appuie sur le bouton Run pour exécuter le code python ci-dessous
Le résultat :

        

    

Bien évidemment, si tu as une quelconque question, ou que tu veux qu’on te réexplique quelque chose, n’hésite pas à demander de l’aide à un organisateur.

Déplacer le panier

Maintenant que la première variable pos_panier a été créée, tu vas pouvoir déplacer le panier. Pour cela, tant que le joueur n’a pas perdu, il peut bouger le panier horizontalement à l’aide des boutons du micro:bit :

  • Bouton A pour aller vers la gauche.
  • Bouton B pour aller vers la droite.
Les mouvements possibles du panier sur le micro:bit

Les mouvements possibles du panier sur le micro:bit

Rappel : les trois super fonctions des boutons 😎

  • get_presses : nombre d’appuis sur un bouton depuis la dernière fois.
  • is_pressed : est-ce que le bouton est en train d’être appuyé ?
  • was_pressed : est-ce que le bouton a été appuyé ?

Étape 2 : Déplacer le panier

Code les déplacements du panier. En fonction du bouton qui est appuyé, calcule la nouvelle position du panier en mettant à jour la valeur de pos_panier. Ensuite, redessine-le à l’écran.

De plus, rajoute un délai entre chaque tour de boucle pour éviter que les pixels ne clignotent. Pour cela, tu peux ajouter sleep(150) à la fin de ta boucle.

Tu n’as pas le droit de me fuir de la sorte

Il faut empêcher le panier de sortir de l’écran, sinon cela cause une erreur !

Pour cela, n’oublie pas de vérifier les cas suivants à l’aide de conditions :

  • Si le panier dépasse vers la droite, que faire ?
  • Si le panier dépasse vers la gauche, que faire ?

Avant de passer à la partie suivante, assure-toi d’avoir un panier qui peut bouger à gauche et à droite sur toute la ligne grâce aux boutons.

Partie II : Les pommes

Dans cette partie, tu vas t’occuper des pommes en quatre étapes :

  1. Faire apparaître la pomme.
  2. Faire tomber la pomme.
  3. Faire réapparaître la pomme lorsque la précédente a été attrapée par le panier.
  4. Compter le nombre de pommes attrapées pour avoir un score.

Faire apparaître la pomme

Pour créer la pomme, tu vas utiliser deux variables : pomme_x et pomme_y. L’utilisation de ces deux variables te permet de conserver la position horizontale de la pomme en x, et sa position verticale en y.

1
2
3
4
5
pomme_x = 1
pomme_y = 0

# Pour afficher la pomme en 2e colonne, 1re ligne (celle du haut).
display.set_pixel(pomme_x, pomme_y, 9)

Rappel : Générer un nombre aléatoire 🎲

Appuie sur le bouton Run pour exécuter le code python ci-dessous
Le résultat :

        

    

La pomme apparaît dans une colonne aléatoire (axe X) sur la ligne du haut (axe Y) du micro:bit.

Positions possibles où la pomme peut apparaître sur le micro:bit

Positions possibles où la pomme peut apparaître sur le micro:bit

Étape 3 : Faire apparaître la pomme

Initialise les variables pomme_x et pomme_y aux valeurs qui conviennent.

En cas de besoin, n’hésite pas à demander de l’aide aux organisateurs qui sont là pour t’aider.

Faire tomber la pomme

Il faut maintenant faire descendre la pomme de l’écran. Cependant, on veut que les pommes tombent moins vite que le panier ne se déplace. Si on fait tomber les pommes à chaque fois que l’on peut déplacer le panier, les pommes vont descendre trop vite.

Pour ralentir leur chute, tu vas utiliser un compteur : la pomme ne descendra qu’après un certain nombre de tours de boucle (par exemple, tous les 10 tours).

Étape 4 : Faire tomber la pomme

Pour faire tomber la pomme, tu crées deux variables :

  • tour : le nombre de tours de boucle effectués depuis la dernière fois qu’une pomme est descendue. Cette variable est initialisée à 0.
  • tour_max : le nombre de tours de boucle à attendre pour faire descendre une pomme. Donne-lui par exemple une valeur de 10.

En utilisant les conditions et les variables que tu viens de créer, vérifie les conditions suivantes :

  • Si tour est égal à tour_max, tu fais descendre la pomme en modifiant la variable pomme_y et en remettant la variable tour à 0.
  • Sinon, ça veut dire que tour est inférieur à tour_max. Augmente alors tour de 1.

N’oublie pas de redessiner la pomme à chaque tour.

La pomme traverse le sol

Si tu testes ton code, tu remarqueras qu’au bout d’un moment, le micro:bit t’affiche une erreur. Cela survient lorsque la pomme traverse le sol. Ne t’inquiète pas, la prochaine étape résout ce problème.

Faire réapparaître la pomme

Étape 5 : Faire réapparaître la pomme

Si la pomme est sur la dernière ligne, la plus basse, il faut gérer les deux cas suivants :

  • Si sa position est la même que celle du panier, alors le joueur a réussi à l’attraper. Il faut alors faire apparaître une nouvelle pomme en haut de l’écran.
  • Sinon, le joueur a perdu. Laisse cette partie vide pour l’instant, tu y reviendras dans la dernière partie du projet.

Compter les pommes attrapées

Étape 6 : Compter les pommes attrapées

Enfin, tu vas compter le nombre de pommes attrapées au cours de la partie. Pour cela, tu peux t’aider d’une variable. Affiche ce score à la fin de la partie.

Pas de point gratuit

Il ne faut pas comptabiliser un point si la pomme tombe à côté du panier.

Avant de passer à la suite…

À vérifier

Avant de passer à la partie suivante, veille à vérifier ces différents points :

  • toujours pouvoir bouger le panier dans les deux directions ;
  • avoir toujours au moins une pomme qui tombe sur ton écran ;
  • pouvoir attraper la pomme avec le panier ;
  • avoir un score qui compte le nombre de pommes attrapées.

Si tu rencontres le moindre problème avec ton jeu, n’hésite pas à appeler un organisateur pour lui demander des conseils.

Partie III : Fin de partie

Le jeu du panier est terrible car il se termine forcément par la défaite du joueur. C’est justement le moment de s’occuper de la fin de partie.

Étape 7 : Fin de partie

Quand le joueur a perdu, il faut sortir de la boucle. Pour cela, il suffit de passer ta condition de boucle à False.

Une fois sortie de la boucle, tu dois afficher un message (avant le score) pour indiquer au joueur qu’il a perdu.

Une fois cette étape finie, ton jeu devrait marcher entièrement ! Tu peux t’amuser à y jouer pour vérifier que tout fonctionne correctement.

Partie IV : Améliorations

Une fois le jeu fini, tu peux ajouter plusieurs améliorations. Note que chaque amélioration est réalisable indépendamment des autres.

Tout fonctionne ?

Avant d’intégrer des améliorations à ton jeu du panier, assure-toi qu’il fonctionne déjà parfaitement. Si ce n’est pas le cas, n’hésite pas à demander de l’aide aux organisateurs !


Bonus 1 : Accélérer la chute des pommes

Pour rendre la partie plus difficile et amusante, tu peux augmenter la vitesse de chute des pommes au fur et à mesure de l’avancement de la partie.

Pas trop vite non plus !

Il faut tout de même s’assurer que le jeu reste faisable, en posant par exemple une limite de vitesse de chute maximum.

Bonus 2 : Rajouter un son

À chaque fois que tu collectes une pomme, tu peux rajouter un petit son. Tu peux utiliser la fonction music.play comme dans l’exemple ci-dessous !

1
2
3
4
5
# Importer la bibliothèque `music`.
import music

# Jouer une note.
music.play("F:2")

N’hésite pas à demander à un organisateur de l’aide si tu souhaites changer de note ou même faire une mélodie !

Bonus 3 : Pour la fin des temps !

Mieux vaut être prudent

Cette amélioration va modifier une grande partie de ton code. Avant de commencer, pense à sauvegarder une version de ton programme qui fonctionne, afin de pouvoir y revenir en cas de problème.

Bonus 3.1 : Choix de fin de partie

Ton objectif est d’ajouter un choix à la fin de la partie :

  • appuyer sur le bouton A pour relancer une nouvelle partie ;
  • appuyer sur le bouton B pour arrêter complètement le jeu.

Bonus 3.2 : Meilleur score

Pour aller plus loin, tu peux créer une variable best_score. Elle servira à mémoriser le meilleur score obtenu depuis le lancement du programme.

Tu peux aussi ajouter la possibilité d’afficher ce meilleur score en appuyant sur le logo du micro:bit.

Enfin, n’hésite pas à afficher un petit message lorsque tu bats ton précédent best_score.

Un peu d’aide ?

Ce qui serait amusant, c’est que tu essayes de le faire toute seule : avec tes idées, ta façon de penser, et ta manière de faire. Bien-sûr, tu peux appeler un organisateur si quelque chose te bloque.

Si tu ne sais vraiment pas par où commencer ou que tu veux juste continuer à être un peu guidé, voici quelques petites pistes :

  • prévoir une boucle supplémentaire qui englobe l’ensemble du jeu, ainsi qu’une variable permettant de décider si le programme continue ou s’arrête ;
  • utiliser plusieurs conditions pour détecter les appuis sur les boutons et déclencher les actions correspondantes ;
  • à la fin de chaque partie, mettre à jour la variable best_score si nécessaire et afficher un message indiquant si le record a été battu.

Bravo, te voilà arrivée à la fin de ce projet !

Tu as maintenant un code qui fonctionne. Si tu as encore d’autres idées d’améliorations, essaye de les mettre en place par toi-même ! Peut-être que les organisateurs les rajouterons à ce sujet. 😉

Retour au Menu