Objectif : utiliser des capteurs et actionneurs pour transformer la carte microbit en manette pour votre jeu.

La carte microbit est reliée au pc via le port usb. Il faut pour cela trouver le numéro du port série com du pc pour le renseigner dans le programme à exécuter dans thonny.

Utiliser l’éditeur microbit de capytale pour communiquer avec la carte et obtenir le numéro du port série.

https://capytale2.ac-paris.fr/web/c/fe18-10453811

import pygame

import serial

pygame.init()

LARGEUR, HAUTEUR = 800, 500
ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Pacman piloté par micro:bit")
horloge = pygame.time.Clock()

rectangle = pygame.Rect(0, 0, 80, 60)
rectangle.center = (LARGEUR // 2, HAUTEUR // 2)

vitesse = 280.0

# À adapter selon votre machine :
# Windows : "COM3", "COM4", ...
# Linux   : "/dev/ttyACM0"
# macOS   : "/dev/cu.usbmodem..."
PORT = "COM11"
BAUDRATE = 115200

ser = serial.Serial(PORT, BAUDRATE, timeout=0.02)

dx, dy = 0, 0
en_cours = True

while en_cours:
    dt = horloge.tick(60) / 1000.0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            en_cours = False
        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            en_cours = False

    # lecture des données venant de la micro:bit
    if ser.in_waiting:
        try:
            ligne = ser.readline().decode("utf-8", errors="ignore").strip()
            if ";" in ligne:
                sx, sy = ligne.split(";")
                dx = int(sx)
                dy = int(sy)
        except:
            pass

    rectangle.x += int(dx * vitesse * dt)
    rectangle.y += int(dy * vitesse * dt)

    rectangle.clamp_ip(pygame.Rect(0, 0, LARGEUR, HAUTEUR))

    ecran.fill((20, 20, 30))
    pygame.draw.rect(ecran, (80, 140, 255), rectangle, border_radius=10)
    pygame.display.flip()

ser.close()
pygame.quit()


https://capytale2.ac-paris.fr/web/c/c2a1-10453917

import pygame
pygame.init()
import serial

pygame.init()

LARGEUR, HAUTEUR = 800, 500
ecran = pygame.display.set_mode((LARGEUR, HAUTEUR))
pygame.display.set_caption("Rectangle piloté par micro:bit")
horloge = pygame.time.Clock()

rectangle = pygame.Rect(0, 0, 80, 60)
rectangle.center = (LARGEUR // 2, HAUTEUR // 2)

vitesse = 280.0

PORT = "COM11"          # à adapter
BAUDRATE = 115200

ser = serial.Serial(PORT, BAUDRATE, timeout=0.02)

dx, dy = 0, 0
couleur = (80, 140, 255)   # bleu initial

en_cours = True
while en_cours:
    dt = horloge.tick(60) / 1000.0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            en_cours = False
        if event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            en_cours = False

    if ser.in_waiting:
        try:
            ligne = ser.readline().decode("utf-8", errors="ignore").strip()
            if ligne:
                print(ligne)   # debug

            morceaux = ligne.split(";")
            if len(morceaux) == 4:
                sx, sy, sa, sb = morceaux
                dx = int(sx)
                dy = int(sy)
                a = int(sa)
                b = int(sb)

                # la couleur change et reste mémorisée
                if a == 1 and b == 1:
                    couleur = (255, 255, 0)   # jaune
                elif a == 1:
                    couleur = (255, 0, 0)     # rouge
                elif b == 1:
                    couleur = (0, 255, 0)     # vert

        except Exception as e:
            print("Erreur lecture série :", e)

    rectangle.x += int(dx * vitesse * dt)
    rectangle.y += int(dy * vitesse * dt)

    rectangle.clamp_ip(pygame.Rect(0, 0, LARGEUR, HAUTEUR))

    ecran.fill((20, 20, 30))
    pygame.draw.rect(ecran, couleur, rectangle, border_radius=10)
    pygame.display.flip()

ser.close()
pygame.quit()

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *