🚀 Mission : Détruire les navires ennemis et rester le dernier survivant !
Principe du jeu
Votre objectif ? Couler les navires adverses et être le dernier joueur encore en lice ! Chaque micro:bit représente un champ de bataille : à vous de viser juste.
Comment ça marche ?
- Un navire caché : Dès que vous allumez votre micro:bit, un navire apparaît aléatoirement sur la grille de LEDs (reconnaissable à sa lumière plus faible).
- Un missile à guider : La LED la plus brillante, c’est votre missile ! Inclinez votre micro:bit (avant/arrière, gauche/droite) pour le déplacer et viser l’ennemi.
- Prêt à tirer ?
- Bouton A : Figez la position de votre missile pour ajuster votre tir.
- Bouton B : FEU ! Envoyez votre missile vers les adversaires.
- Touché ! Si votre missile atteint un navire, la micro:bit de la victime joue une musique de défaite… mais attention, elle reviendra en jeu après un délai ! À vous de la neutraliser à nouveau.
💻 À vous de coder ! Pour créer ce jeu, voici les fonctionnalités clés à programmer :
- Communication radio : Envoyez et recevez les coordonnées (ligne/colonne) des tirs entre toutes les micro:bits du jeu.
- Contrôle du missile : Utilisez l’accéléromètre pour déplacer le missile en inclinant la carte.
- Gestion des tirs :
- Bouton A : Verrouillez la position du missile.
- Bouton B : Lancez le tir et transmettez les coordonnées aux autres joueurs.
- Position aléatoire du navire : À chaque début de partie, le navire apparaît à un endroit aléatoire.
- Détection de collision : Si un missile touche un navire, affichez une croix et déclenchez une musique de défaite.
- Temps de réapparition : Un navire touché réapparaît après quelques secondes : soyez prêt à recommencer !
💡 Pourquoi c’est génial ?
- Un jeu multijoueur : Affrontez vos amis en temps réel !
- De la stratégie : Mémorisez les tirs et neutralisez vos adversaires.
- Un projet complet : Codez la logique, l’affichage des LEDs, les sons et la communication entre cartes.
🛠️ Prêt à relever le défi ? Avec la micro:bit, vous allez apprendre à : ✔ Utiliser des capteurs (accéléromètre, boutons). ✔ Programmer l’affichage des LEDs et des sons. ✔ Faire communiquer plusieurs cartes entre elles.
À vos micro:bits ! Qui sera le dernier survivant ? 🎮💥
Le champ de bataille :

Ton navire : LED reconnaissable à sa lumière plus faible.

Ton missile : la LED la plus brillante

Déplace ton missile penche à droite/gauche

En avant / en arrière

Bouton A : fige le tir

Bouton B : Lance le missile

Touché

Programme en mode bloc
sous vittascience : https://fr.vittascience.com/microbit
Un exemple de programmation pour émettre les coordonnées x, y du missile et les recevoir :


Pour tester si le bouton B est relâché :

Pour gérer le roulis (droite/gauche) :

Pour gérer le tangage (avant/arrière) :

Pour gérer l’affichage de la position du missile :

Pour gérer l’affichage aléatoire du navire :

Puis dans Répéter indéfiniment :

Si touché :

Pour figer la cible avec le bouton A, avec une variable emettre :
- emettre = 0 : réglage de la cible
- emettre = 1 : cible figée

Le bouton A fige la position du tir :


Programme en python
Librairie à importer :
from microbit import *
import radio
import random
import math
import music
Pour configurer la radio :
radio.on()
radio.config(channel = 83, power = 6, length = 32, group=5)
Fonction pour émettre les coordonnées pour correspondre au programme en mode bloc :
def radio_sendValue(name, value):
radio.send("&&&" + "int:" + "[" + name + ";" + str(value) + "]&&&")
Fonction pour recevoir les coordonnées pour correspondre au programme en mode bloc :
def radio_receiveValue():
data = radio.receive()
if data:
print("receive", data)
parseData = data[8:-4].split(';')
return parseData[0], int(parseData[1])
else:
return None, None
Pour afficher une image de LEDs :
led_image = Image('00000:00000:00000:00000:00000')
display.show(led_image)
Affichage d’une LED :
display.set_pixel(x, y, 9)
display.set_pixel(x_cible, y_cible, 4)
pour générer un nombre aléatoire :
x_cible = random.randint(0, 4)
y_cible = random.randint(0, 4)
Affichage d’une croix :
display.show(Image.NO)
Affichage signe envoyé :
display.show(Image.YES)
Gestion des boutons A et B :
if button_a.is_pressed():
while not (not button_a.is_pressed()):
pass
Gestion de l’accéléromètre :
if (
math.atan2(
accelerometer.get_x(),
math.sqrt(accelerometer.get_y()**2 + accelerometer.get_z()**2)
) * 180.0 / math.pi > 30
):
x = 4
if (
math.atan2(
accelerometer.get_y(), -accelerometer.get_z()) *
180.0 / math.pi > 30
):
y = 4
Lancement de la musique :
music.play(music.JUMP_DOWN, loop=False)
