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 od a do b włą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 do n-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 True stale 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ępnie display.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 biblioteki Image;
  • 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:

  • Ruletkarandom.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 sekwencjarandom.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 ziarnemrandom.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.