Tato lekce navazuje na lekci A10, nyní si naprogramujeme hrací kostku v programu microPython s některými dalšími možnostmi.
název: B10 Hrací kostka
kategorie: B mírně pokročilí
ref.číslo: B10
projekt: 10+10 dní s microbitem pro mírně pokročilé, lekce B10
verze: 01, 2017-04-13
autor: Ivo Obr, Lanškroun
Tato lekce navazuje na lekci A10 ale přesto zopakuji to nejdůležitější. Všichni znají dřevěnou hrací kostku na “Člověče nezlob se” nebo jiné deskové hry. Víme, že krychle má šest stran a na každé straně kostky je jiné číslo, a to od jedné do šesti. Čísla jsou vytvořena barevnými tečkami, my použijeme matici 5×5 LED diod, na které pohodlně barevné tečky vytvoříme zapnutými LED diodami. Pro nás to budou bloky “show leds”, šest jich bude pro čísla od jedné do šesti, sedmý bude úvodní.
Vytvoříme si proměnnou se jménem “hod” (jako že hodíme kostkou), do které budeme vkládat čísla, která budou “padat” (od 1 do 6). Ale protože můžeme krásně kostku upravovat, je elektronická, tak nejvyšší zobrazené číslo grafikou tam může být 9.
Při startu programu bude nastaveno maximální číslo, které může padnout 6, ale my si můžeme stiskem tlačítka “B” zvolit maximální hodnotu , která může padnout od šesti do devíti. Tato hodnota se vždy po stisku tlačítka “B” zobrazí na displeji. Stiskem tlačítkem “A” provedeme jednoduše hod kostkou.
Jaké budeme mít v programu proměnné :
“hod” hodnota která padne po hodu kostkou
“max_hod” maximální hodnota, která může padnout
obrázky hodnot devět obrázků se jmény “jed”, “dva” až “dev”
“seznam_h” seznam obrázků. Pokud to není jasné, podívejte se do lekce B8
Na obrázku je uveden celý program v jazyku MicroPython. Vysvětlení a komentáře jsou uvedeny pod programem :
řádek 4:
Deklarace proměnné “max_hod”. Obsahem budou celá čísla, prvotní nastavení má hodnotu standardní kostky, to je šest. Po stisku tlačítka “B” se tato hodnota bude měnit v rozsahu 6 až 9 a budeme ji používat u generátoru náhodných čísel, kde proměnná “max_hod” bude “horní mez”.
řádek 5 – 13:
Deklarace obrázků.
řádek 14:
Deklarace seznamu obrázků. To bude mít velký význam pro zjednodušení programu. Na každý obrázek z tohoto seznamu se můžeme dostat pomocí jména seznamu a indexu. Index se uvádí hned za jménem seznamu v hranatých závorkách.
První obrázek má index nula, poslední v našem programu pak osm. Pokud například padne číslo tři, tak se k obrázku znázorňující trojku dostaneme takto : seznam_h[2]. Proč? Prvý člen seznamu má index s hodnotou nula (“seznam_h[0]”).
Jestliže si tedy vygenerujeme náhodné číslo a to bude mít hodnotu tři, tak tato hodnota je v proměnné “hod”. K obrázku se dostaneme : seznam_h[hod – 1] .
řádek 15:
Na začátku programu vypíšeme text “E KOSTKA”. Můžete si samozřejmě text změnit na jiný, který se Vám bude zdát lepší.
řádek 16:
Zobrazíme na displeji obsah proměnné “max_hod”. Šlo by šestku zobrazit jednodušeji, ale protože si můžete upravit na řádku č.4 počáteční maximální hodnotu, nemusíte už upravovat řádek 16. (Mohli by jste na něj zapomenout, že tam přímo zobrazujete číslici 6.) Proč je tam funkce “str()” ? Upravuje numerickou hodnotu na znak, který lze zobrazit pomocí display.show().
řádek 17:
Cyklus, který opakujeme stále dokola už známe z minulých lekcí.
řádek 18-20:
Testujeme stisk tlačítka “A”. Aby se provedli příkazy uvedené a odsazené za “if”, musí být tlačítko “stisknuto” a “uvolněno” (“was_pressed”). Pokud si tam dáte “is_pressed”, budou se čísla velice rychle na displeji měnit do doby, než tlačítko uvolníte. Můžete si to vyzkoušet, je to také jedna z variant jak “kutálet kostkou”.
Jakmile se začnou provádět odsazené příkazy za “if”, vygeneruje se náhodné číslo v rozsahu jedna až “max_hod” a uloží se tato hodnota do proměnné “hod”.
Nejprve se sníží hodnota hodu o jedničku, abychom se dostali do správného rozsahu indexů v seznamu obrázků. Pak se se seznamu vybere správný obrázek podle indexu (pořadí) a příkaz “display.show()” tento obraz znázorní na displeji.
řádek 21-25:
Testujeme stisk tlačítka “B”. Aby se provedli příkazy uvedené a odsazené za “if”, musí být tlačítko “stisknuto” a “uvolněno” (“was_pressed”). Po každém stisku přičteme do proměnné “max_hod” hodnotu jedna. Následným příkazem “if” zjišťujeme, jestli hodnota v proměnné “max_hod” nepřesáhla devět. Pokud ano (hodnota bude deset), pak vrátíme hodnotu maximálního hodu zpět na šest. Takže za devítkou následuje hodnota šest. A posledním řádkem odsazeným za detekcí tlačítka “B” hodnotu zobrazíme na displeji.