Aplikace A11 hrací kostka v pohybu

Tato lekce navazuje na lekci A10, protože micro:bit má senzor na pohyb, můžeme obohatit naši hrací kostku o “skutečné házení”.

název: A11 Hrací kostka v pohybu
kategorie: A začátečníci
ref.číslo: A11
projekt:
verze: 01, 2017-04-23
autor: Ivo Obr, Lanškroun


Je krásné,  kolik nápadů může přijít k novým funkcím mikropočítačů. Protože náš Micro:bit má senzor na pohyb, můžeme obohatit naši hrací kostku o “skutečné házení”.

Vyměníme naše tlačítko “A” pro hod kostkou za její “zatřesení”, které bude simulovat hod. Tím se přiblížíme ke skutečné hře s kostkou, kdy pohybem volíme další číslo na kostce. Destička mikropočítače obsahuje 3D akcelerometr, který umožňuje měřit zrychlení ve třech osách. Jestliže destičkou zatřeseme, obvody akcelerometru dají signál, že došlo k zrychlenému pohybu destičky a my tento signál můžeme použít místo stisku tlačítka “A”. Pokud nebudeme zkoušet program přímo na destičce mikropočítače, ale v aplikaci Block Editoru, je pod obrázkem micro:bit tlačítko “shake”, které imituje zatřesení.

Jak je uvedeno výše, po zatřesení destičkou mikropočítače vznikne signál, který musíme nějak zachytit. Pro nás to bude událost, kterou registrujeme blokem “on shake” (v překladu při zatřesení). Jak vidíte na obrázku, vytvořili jsme si novou proměnnou se jménem “hodit”, do které na úplném začátku dáme hodnotu nula. Hodnota nula bude znamenat, že nedošlo k “třesení” destičkou. Jakmile ale destičkou zatřeseme, dojde k události “on shake” a ta nám změní hodnotu proměnné se jménem “hodit” na hodnotu jedna. Tím jsme událost zachytili do této proměnné. Pro nás to bude znamenat, že když je v proměnné “hodit” jednička, vygenerujeme nové náhodné číslo a to dáme do proměnné se jménem “hod”.

Hlavní program z lekce A10 upravíme takto :

Z konce kleští bloku “while True” vytáhneme čtyři bloky (while, set, change a while). Oba  bloky “while” vymažeme,  – už tlačítko “A” nebudeme používat.   Tím jsme z kleští bloku”while True” odstranili čekání na stisk nebo uvolnění tlačítka a program nám bude velmi rychle opakovat bloky, které jsou v něm.

 

 

Takže nyní na konci tohoto cyklu (opakování) vložíme dotaz, zda obsah proměnné “hodit” se rovná jedné. Ve většině neustálého opakování bude zjištěna nula, ale když zatřeseme destičkou, stane se to, že proměnná vlivem události “on shake” nabude hodnoty jedna. Pokud k tomu dojde, uděláme následující věci – necháme zpracovat bloky :

 

  • vygenerujeme novou hodnotu do proměnné “hod”
  • přičteme jedničku, abychom dostali patřičný rozsah hodnot 1 až 6
  • vykreslíme na displeji nový obrázek, že je kostka v pohybu a počkáme alespoň jednu vteřinu.
  • do proměnné “hodit” nesmíme zapomenout vrátit hodnotu nula (už je destička v klidu)

 

Nejdříve si nezapomeneme dát na začátek programu blok, který nám naplní proměnnou “hodit” hodnotou nula.  Také si všimněte, že jsem vyřadil blok pro vypsání textu “HRACI KOSTKA” a změnil jsem obrázek v prvním bloku “show leds” ze šipky na malou kostku.

 

 

 

Další obrázek ukazuje bloky, které řeší “zatřesení destičkou” :

Všimněte si obrázku v bloku “show leds”, který se zobrazí ještě před obrázkem hodnoty na kostce. Je to z důvodů, aby bylo zcela jasno, že došlo k události zatřesení a že se vygenerovalo nové náhodné číslo.

 

 

 

Znovu si program projdeme od začátku do konce a provedeme pečlivou kontrolu. Program si nahrajeme do mikropočítače ikonou compile, a vyzkoušíme. Pokud funguje tak, jak jsme si popsali výše, je to OK a máme další užitečný program, který můžeme používat v rodině nebo u přátel. 🙂 Doporučuji gumičkou upevnit napájecí články AAA zespodu zaháknutím za tlačítka tak, aby bylo vidět na displej (nepoužívat napájení z USB kabelu).

 

Pokud nám vše funguje tak jak má, je čas se zamyslet, co by se dalo vylepšit. Může se stát, že někteří hráči budou mít problém se zatřesením destičky micro:bitu. Pak by bylo dobré, abychom ponechali i původní možnost hodu kostkou pomocí tlačítka “A”. Není nic jednoduššího. Blokový editor nám umožňuje vytvořit událost i pomocí tlačítka “A”, a tak velmi lehce doplníme program, kde pomocí tlačítka “A” změníme obsah proměnné “hodit” na hodnotu jedna, viz obrázek :

Na obrázku je jen začátek programu, důležité je všimnout si nového bloku zachytávajícího událost stisku tlačítka “A”.

No a protože máme ještě volné tlačítko “B”, můžeme program vylepšit, jak jsme slíbili v lekci A10 a to tak, že na elektronické kostce může být znázorněno tečkami také číslo sedm, osm a devět. Takže si tlačítkem “B” můžeme nastavit, jaké maximální číslo bude padat. Standardně při spuštění programu to bude šest.

K tomuto účelu  si vytvoříme novou proměnnou, ve které si budeme pamatovat, jaké maximální číslo může padat. Proměnnou si nazveme “max_hod” a na začátek programu dáme blok, ve kterém nastavíme jeho počáteční hodnotu šest.

Jak už tušíte že doplníme další blok na událost tlačítka “B”, a do kleští této události dáme bloky, které :

  • zvýší hodnotu proměnné “max_hod” o hodnotu jedna
  • pokud hodnota v proměnné “max_hod” bude deset, tak ji změníme na šest
  • hodnotu vypíšeme na displeji

Doplnit jen bloky na událost tlačítka “B” ještě nestačí. Musíme doplnit bloky pro vykreslování hodnot sedm, osm a devět. Ukázka pro sedmičku:

Nejsnadněji to uděláme, když si vybereme blok “if” s testem na šestku a uděláme si duplikaci tohoto bloku. V duplikovaném bloku šestku změníme na sedmičku a zaškrtneme centrální ledku. Pro hodnotu osm a devět uděláme stejný postup při úpravách. Pak bloky připojíme v pořadí čísel za blok “if” se šestkou. Myslím si, že už v této lekci to zvládnete a není třeba přikládat obrázek.

To však ještě nestačí. Nyní musíme ještě změnit generování náhodného čísla a to tak, že když v proměnné “max_hod” je šestka, tak blok na generování je v rozsahu 0-5, ale když bude obsah proměnné “max_hod” sedm, tak blok pro generování musí mít rozsah čísel 0-6. Bohužel nemůžeme v bloku změnit pětku na proměnnou “max_hod”, tak to budeme muset udělat jinak.  Budeme se ptát pomocí bloku “if”, jaká hodnota je v proměnné “max_hod” a podle toho provedeme blok “pick random” s odpovídající hodnotou:

Je to trochu složitější ale funguje to. Tento složený blok nám nahradí jediný blok z původního programu.

Při tvorbě takto složeného bloku postupujeme tak, že si nejdříve vytvoříme blok “if”, do kterého vložíme test na hodnotu v proměnné “max_hod” a do kleští vložíme původní blok “set”. Pak blok “if” duplikujeme třikrát a bloky sestavíme. Nakonec upravíme hodnoty v jednotlivých blocích.

Při testování programu bych Vám doporučoval zkoušet program již na skutečné destičce Microbitu, protože webovská aplikace zkresluje časy.

 

A máme nyní skvělý program, který funguje jako opravdová kostka na pohyb, má alternativní možnost hodu a také má další možnosti “zrychlení” hry nastavením maximální hodnoty, která padne.

 

Na konec ještě obrázek koncové části programu tak, aby jste viděli řazení bloků :

 

Důležité je, aby jste programu rozuměli. To je zcela zásadní a máte-li nějaké pochybnosti nebo něčemu nerozumíte, je třeba si lekci vzít od začátku znova a postupovat pomaleji a každou větu si promyslet.

Toto není jediný způsob, jak sestavit program pro uvedenou činnost hrací kostky.

Můžete se pustit do experimentování s dalšími funkcemi, zkusit upravit vykreslování obrázků, které jsou nesymetrické jako např. trojka, kde uhlopříčka jde zleva doprava. Můžeme upravit zobrazení trojky, že náhodně bude někdy zleva a někdy zprava směrem dolů.

Tak dobrou zábavu nejen s programováním, ale také s využitím tohoto programu na micro:bit.

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted in kat A - začátečníci.