TP micro:bit — Vers le jeu final
TP micro:bit — Vers le jeu final
Objectifs cantonaux : ROBO-1, ROBO-2, ROBO-3 (rattachés à O1.5, O1.6). Semaine dédoublée (×2, groupes A/B séparés).
Cours complet sur la plateforme Runestone de Cédric Donner : TP micro:bit — le jeu.
Vous avez maintenant tous les outils nécessaires (while, break, boutons, pixels, fonctions) pour programmer un petit jeu complet sur le micro:bit.
Attendre un appui sans rien faire d’autre
▷ Motif — bloquer jusqu’à un appui
Le motif while True + break permet aussi de bloquer un programme jusqu’à ce qu’un évènement précis se produise, puis de continuer.
from microbit import *
def wait_press(button):
while True:
if button.was_pressed():
break
sleep(100)
wait_press(button_a)
display.show(Image.HAPPY)L’accéléromètre
Le micro:bit contient un accéléromètre, un capteur qui détecte son inclinaison et ses mouvements.
◈ Syntaxe — Accéléromètre
accelerometer.current_gesture() # renvoie 'up', 'down', 'left', 'right', 'shake', ...
accelerometer.get_x() # accélération gauche-droite (négatif = gauche)
accelerometer.get_y() # accélération avant-arrière (négatif = arrière)Exercice 1 — déplacer un pixel avec l’accéléromètre
En reprenant le programme de la semaine dernière (déplacement d’un pixel avec les boutons), remplacez les boutons par l’accéléromètre : le pixel doit se déplacer dans la direction où vous inclinez le micro:bit.
from microbit import *
x = 2
y = 2
display.set_pixel(x, y, 9)
while True:
if accelerometer.current_gesture() == 'left':
x -= 1
elif accelerometer.current_gesture() == 'right':
x += 1
elif accelerometer.current_gesture() == 'up':
y -= 1
elif accelerometer.current_gesture() == 'down':
y += 1
display.clear()
display.set_pixel(x, y, 9)
sleep(200)Le jeu : atteindre un but
Le but du jeu : partant du centre de l’écran, atteindre une position cible tirée au hasard, en inclinant le micro:bit. Vous allez le construire étape par étape.
▷ Étape 1 — les variables du jeu
Quatre variables globales :
x,y: position du joueur (au centre au départ)but_x,but_y: position du but (aléatoire, avecrandint(0, 4))
Affichez le joueur à intensité maximale et le but à faible intensité (par exemple 2).
▷ Étape 2 — déplacement en continu
Avec une boucle while True, faites en sorte que le pixel du joueur se déplace selon l’inclinaison détectée par l’accéléromètre (comme à l’exercice 1).
▷ Étape 3 — victoire ou défaite
Après chaque déplacement, testez :
- si le joueur est sorti de l’écran (\(x\) ou \(y\) en dehors de 0..4) → manche perdue,
- si le joueur est arrivé au but (\(x\) ==
but_xet \(y\) ==but_y) → manche gagnée.
Affichez une image différente pour chaque cas.
▷ Étape 4 — recommencer une manche
Écrivez une fonction nouvelle_manche() qui réinitialise les positions du joueur et du but (utilisez global pour modifier les variables globales depuis la fonction).
▷ Étape 5 — le score
Ajoutez une variable score. Chaque manche gagnée rapporte un point ; une manche perdue remet le score à zéro. La partie est gagnée à 5 points.
Solution complète (à consulter après avoir essayé)
from microbit import *
from random import randint
def nouvelle_manche():
global x, y, but_x, but_y
x = 2
y = 2
but_x = randint(0, 4)
but_y = randint(0, 4)
nouvelle_manche()
score = 0
while True:
if accelerometer.current_gesture() == 'left':
x -= 1
elif accelerometer.current_gesture() == 'right':
x += 1
elif accelerometer.current_gesture() == 'up':
y -= 1
elif accelerometer.current_gesture() == 'down':
y += 1
if x > 4 or x < 0 or y > 4 or y < 0:
display.show(Image.SAD)
score = 0
sleep(500)
nouvelle_manche()
elif x == but_x and y == but_y:
score += 1
if score >= 5:
display.show(Image.HAPPY)
sleep(1000)
score = 0
nouvelle_manche()
display.clear()
display.set_pixel(x, y, 9)
display.set_pixel(but_x, but_y, 2)
sleep(500)À vous de jouer
Améliorez le jeu si vous en avez le temps : augmenter la vitesse à chaque manche gagnée, ajouter une mise en pause avec le bouton A, ou inventer un nouveau jeu avec les mêmes briques (boutons, pixels, accéléromètre, while True, break).
Devoir donné par Cédric
Terminer le jeu micro:bit (au minimum les étapes 1 à 4).