micro:bit to wszechstronna płytka edukacyjna, idealna do wprowadzania dzieci i młodzieży w świat programowania, robotyki i elektroniki. Dzięki wbudowanemu modułowi random w MicroPythonie możesz łatwo generować liczby losowe, co otwiera drzwi do tworzenia angażujących gier, takich jak kostka do gry, papier-kamień-nożyce czy losowe kierunki ruchu.
W tym artykule krok po kroku poznasz mechanizmy losowania liczb, przeanalizujesz przykładowe projekty i dowiesz się, jak rozwijać proste gry. Omówimy kod w MicroPythonie, bo jest prosty i potężny dla początkujących programistów robotyki.
Wprowadzenie do losowości w micro:bit
Losowe liczby są podstawą wielu gier i symulacji w robotyce. micro:bit wykorzystuje moduł random z MicroPythona, który symuluje chaos poprzez algorytmy pseudolosowe. Zawsze zaczynaj od importu: import random.
Kluczowe funkcje:
random.randint(a, b)– zwraca liczbę całkowitą z zakresu odadobwłącznie (np. 1–6 dla kostki);random.choice(lista)– wybiera losowy element z listy (np. imię lub kierunek);random.randrange(n)– zwraca losową liczbę całkowitą od 0 don-1;random.random()– daje liczbę zmiennoprzecinkową od 0.0 do 1.0.
Dla powtarzalnych testów użyj random.seed(liczba), co ustawia ziarno generatora – idealne do debugowania gier.
micro:bit reaguje na gesty jak potrząśnięcie (accelerometer.was_gesture('shake')), przyciski czy radio, co czyni losowanie interaktywnym.
Podstawowa gra – kostka do gry
Najprostsza gra to symulator kostki – potrząśnij micro:bit, a wyświetli się liczba od 1 do 6. Ten projekt uczy podstaw losowania i obsługi akcelerometru.
Oto kompletny kod w MicroPythonie:
from microbit import *
import random
while True:
if accelerometer.was_gesture('shake'):
n = random.randint(1, 6)
display.show(str(n))
sleep(1500)
display.clear()
Jak to działa:
- pętla
while Truestale czeka na zdarzenie potrząśnięcia, - po wykryciu gestu generuje liczbę i konwertuje ją na tekst funkcją
str(), sleep(1500)utrzymuje cyfrę na ekranie przez 1,5 s, a następniedisplay.clear()czyści wyświetlacz.
Aby dodać feedback, po wylosowaniu liczby możesz zagrać dźwięk (music.pitch(440, 200)) lub wykorzystać wynik do sterowania kierunkiem ruchu robota.
Gra z kierunkami – „w którą stronę teraz?”
Potrząśnij micro:bit, a urządzenie wylosuje strzałkę: północ, wschód lub zachód. To wprowadza zmienne i warunki if-elif.
Kod:
from microbit import *
import random
while True:
if accelerometer.was_gesture('shake'):
direction = random.randint(1, 3)
if direction == 1:
display.show(Image.ARROW_N)
elif direction == 2:
display.show(Image.ARROW_E)
else:
display.show(Image.ARROW_W)
sleep(2000)
display.clear()
Kluczowe elementy:
- zmienna
direction– przechowuje losową wartość (1–3); - warunki
if / elif– mapują liczby na obrazki strzałek z bibliotekiImage; sleep(2000)– pauzuje wyświetlanie na 2 sekundy.
Rozwinięcie: użyj random.choice([Image.ARROW_N, Image.ARROW_E, Image.ARROW_S, Image.ARROW_W, Image.ARROW_NE]), aby wprowadzić więcej kierunków bez instrukcji warunkowych.
Zaawansowana gra – papier, kamień, nożyce – bezprzewodowo
Dwóch graczy na dwóch micro:bitach gra przez radio – losowanie decyduje o wyniku. To projekt łączący losowość z komunikacją radiową.
Przygotowanie – ustaw grupę radiową i włącz radio na obu urządzeniach:
from microbit import *
import random
import radio
radio.config(group=1)
radio.on()
wynik_starcia = -1 # Inicjalizacja; 0 oznacza koniec rundy
def losuj():
global rzut
rzut = random.randint(0, 2) # 0-papier, 1-kamień, 2-nożyce
while True:
if accelerometer.was_gesture('shake') and wynik_starcia != 0:
losuj()
radio.send(str(rzut))
# Odbierz odpowiedź, porównaj rzuty i pokaż wynik (X - przegrana, OK - zwycięstwo, kaczuszka - remis)
Mechanizm działania:
- pierwszy micro:bit losuje wartość 0–2 i wysyła ją przez
radio.send, - drugi odbiera (
radio.receive), porównuje rzuty i odsyła wynik kodem (np. 11–zwycięstwo, 10–remis, 12–przegrana), - rozwiązanie jest przeznaczone dla dwóch urządzeń; dla większej liczby graczy rozszerz protokół i dodaj identyfikatory.
Zastosowanie w robotyce: robot „walczy” z drugim – losowy wybór broni decyduje o ruchu serwomechanizmów lub animacji LED.
Licznik z losowym twistem – hybrydowa gra
Połącz losowanie z licznikiem, np. w grze w zgadywanie liczby. Użyj zmiennej do śledzenia prób.
Przykładowy kod:
from microbit import *
import random
licznik = 0
cel = random.randint(1, 9) # Ukryta losowa liczba
while True:
if button_a.was_pressed():
licznik += 1
display.show(str(licznik))
if button_b.was_pressed():
display.scroll("Cel: " + str(cel))
licznik = 0
Oto możliwe ulepszenia:
- reset przez potrząśnięcie,
- wyświetlanie graficzne po trafieniu (np.
display.show(Image.HEART)), - tryb multiplayer: wysyłaj wartość licznika do drugiego micro:bita przez radio jako zdalny ekran.
Inne pomysły na gry z losowaniem
Oto garść inspiracji do dalszych eksperymentów:
- Ruletka –
random.choice(["Czerwone", "Czarne", "Zero"])z kolorowymi ikonami na LED-ach; - Losowe imiona – lista imion graczy i wybór zwycięzcy przez
random.choice(names); - Pseudolosowa sekwencja –
random.seed(42)dla odtwarzalnych testów i porównań; - Integracja z elektroniką – losowa liczba steruje buzzerem (np. ton = liczba × 100 Hz) lub intensywnością LED.
Porównanie funkcji losujących
Oto krótkie porównanie najczęściej używanych funkcji w MicroPythonie na micro:bit:
| Funkcja | Zakres | Zastosowanie w grach |
|---|---|---|
randint(1, 6) |
1 do 6 włącznie | Kostka |
choice(lista) |
Losowy element listy | Kierunki, wybory |
randrange(10) |
0 do 9 | Identyfikatory graczy |
random() |
0.0–1.0 | Procentowe szanse (np. 50% sukcesu) |
Wskazówki dla programistów robotyki
Przy tworzeniu projektów pamiętaj o kilku zasadach:
- Testuj z ziarnem –
random.seed(1337)zapewnia powtarzalne wyniki; - Dodawaj przerwy – unikaj nieskończonych pętli bez
sleep(), które obciążają urządzenie; - Wybierz edytor – użyj MakeCode dla bloków lub Mu dla Pythona;
- Łącz z sensorami – integruj odczyty (światło, temperatura) i losuj na ich podstawie;
- Ucz poprzez praktykę – projekty rozwijają logikę, pracę ze zmiennymi i warunkami – idealne na lekcje robotyki.