V této kapitola začneme povídání o programových blocích, které se dají použít ke konstrukci složitějších programových konstrukcí. Jsou to takové dílečky, které jako lego, můžete spojit dohromady různým způsobem, doplnit svými parametry a tím vytvořit různé programové struktury, které mohou řešit i poměrně komplikovaná zadání.
Abych celou věc zjednodušil rozdělil jsem celé téma na dvě kapitoly. V prvé si popovídáme o programových blocích, které najdete ve skupině „Ovládání“ a „Operátory„. Ve druhé kapitolce si pak bloky ze skupiny „Ovládání“ doplníme bloky ze skupiny „Proměnné„. Skupina „Ovládání“ je poměrně rozsáhlá a má několik podskupin bloků. V první kapitole si něco povíme o cyklech, neboli smyčkách a ve druhé se soustředíme na podmínkové příkazy. Součástí ovládání jsou ještě příkazy pro práci s klony a to si necháme na úplně jinou a samostatnou kapitolku.
Cykly
Cyklus, nebo také smyčka, je jedna ze základních programátorských konstrukcí. Slouží k provádění opakujících se dějů. Cyklus může mít spoustu podob. Může se opakovat donekonečna, nebo může mít určitý, přesně daný, počet opakování. Existují také cykly, které opakují činnost, dokud nenastane nějaká změna a pak se ukončí. Některé cykly je možné v programovém stromu použít jen jednou a nelze za ně zavěsit další část kódu (cyklus „opakuj stále„). Jiné cykly mohou být opakovaně vložené do jednoho programového stromu a je na ně možné navázat další kód (jsou to ty, co mají na blocích na konci zoubeček pro navázání dalšího kódu.
Cykly mají z hlediska logiky a své konstrukce většinou dvě části (s výjimkou neustálého opakování – nekonečné smyčky/cyklu). První součástí bloku pro cyklus je nějaká podmínka, která je vložená na horní části bloku. Jedná se třeba o okénko pro zadání počtu cyklů (například „opakuj [ 10 ] krát„, přičemž je vám jistě jasné, že číslovku 10 můžeme přepsat na jiné číslo a změnit tím fungování celého cyklu). Další variantou tohoto bloku je programový blok pro cyklus s popisem „opakuj dokud nenastane „, načež následuje takový tmavší šestiúhelník. Tento programový blok má možnost použít složitější podmínku, která je vytvářená pomocí operátorů. Funguje to přesně jako stavebnice – prostě dílky poskládáte do sebe.
To hlavní proč vlastně cyklus používáme a je to jeho druhá součást, je cosi, čemu říkáme tělo cyklu (nebo smyčky).Tělo cyklu jsou libovolné programové bloky, sevřené v jakési podkově, v bloku cyklu. Funguje to tak, že program opakovaně provádí tu část kódu, která je uvnitř cyklu – sevřená v těle cyklu.
Ale trošku zpátky, začněme něčím jednodušším.
Pro demonstraci práce s cykly jsem vám připravil jednoduchý prográmek, který vám leccos napoví. Program naleznete zde.
Test 1: Po stisku klávesy „1“ se spustí velmi jednoduchý program. Spustí se nekonečná smyčka, která v nekonečném cyklu opakuje příkaz, který má v těle. V tomto případě „přeblikává“ postupně všechny kostýmy postavy a výsledný dojem je velmi rychlá chůze medvěda na místě.
Test 2: Zkusíme medvěda trošku zpomalit. Za tím účelem vložíme do cyklu k bloku, který přepíná kostýmy ještě blok „čekej“ (ano funguje tak, že pozastaví program na interval, který vložíme do parametru bloku). My použijeme desetinné číslo (0.1). Po každém převléknutém kostýmu tak medvěd desetinu sekundy počká, než nahodí další kostým. Výsledek – chůze na místě se výrazně zpomalila.
Test 3: V předešlém testu jsme zjistili, že do těla podmínky můžeme vložit více než jeden programový blok. Vložíme tam tedy ještě jeden, který nám medvěda posune po ose x o 10 bodů. Tělo cyklu je pořád vloženo do nekonečné smyčky – tudíž nám medvěd odťape ze scény. Nicméně jsme zjistili, že do cyklu můžeme dát více různých příkazů za sebou a postava tak může zároveň provádět animovanou činnost a zároveň se posouvat.
Tím jsme ovšem možnosti, které nám nabízí cykly ani zdaleka nevyčerpali a proto pokračujeme v úpravách.
Test 4: V tomto testu upravíme použitý blok cyklu. Zbavíme bloku s nekonečným opakováním a místo něj použijeme blok s přesným počtem opakování. Tělo smyčky necháme bez úprav. Výsledek je, že medvěd udělá jen určitý počet kroků a přesune se jen o určitou vzdálenost a tím nám neuteče ze scény. Počet opakování jsem si vypočítal následujícím způsobem – potřebuji aby medvěd odkráčel dráhu dlouhou asi tak 220 vždy po 10 krocích (220 / 10 = 22). Cyklický příkaz s počtem kroků, který scratch používá, neprovádí příkazy v posledním kroku (protože je splněna podmínka počtu kroků), tudíž je nutné jeden cyklus přičíst, aby se provedl počet kroků, které chceme (tudíž 22 + 1 = 23 = počet opakování). Medvěd ná díky této konstrukci neuteče ze scény a doje tam kam chceme.
Test 5: Co se ale stane po provedení cyklu? Můžeme za ním použít další cyklus? Asi by to mělo fungovat. A ono to funguje. Jen jsem okopíroval první smyčku a připnul kopii smyčky za první cyklus. Aby to nebylo stejné upravil jsem blok pro pohyb o záporné znaménko. Výsledek celé změny je ten, že medvěd jde dopředu a pak se stejným způsobem vrací. Vypadá to tak trochu jako slavný moonwalk Michaela Jacksona. Cykly se tedy dají provádět za sebou a dá se to docela dobře použít při tvorbě komplikovanějších programových konstrukcí.
Test 6: V závěrečném testu si vyzkoušíme další vlastnost cyklů a tou je schopnost vnořit, nebo vložit jeden cyklus do druhého. V našem případě jsme prostě dva cykly z předchozího testu vložili do třetího, nekonečného, cyklu. Výsledkem je, že činnost, kterou v testu 5 medvěd provedl jen jednorázově teď provádí opakovaně a chodí po scéně sem tam. V šestém testu jsme tedy zjistili, že můžeme cykly vkládat do cyklů.
Cyklus s podmínkou
Již jsme si řekli, že existuje programový blok cyklus s podmínkou. Podmínka se skládá pomocí operátorů (což jsou zelené programové bloky). Výsledek může vypadat jako na následující grafice.
Na tomto prográmku si můžeme ukázat několik věcí.
1, Všimněte si oddělení dvou událostí – Po spuštění programu se mašinka nastaví na požadovaném místě a natočí se správným směrem a pak program čeká a nedělá nic. Pokračování nastane až se stiskem klávesy 1. Program může mít více programových stromů – bloků navěšených na události – a může se tak chovat v různých situacích různým způsobem.
2, Program pokračuje po stisku klávesy 1. Všimněte si použití zvukových bloků. Na začátku se spouští přehrávání zvuku bafající mašinky a na závěr pohybu mašinky se zvuk vypíná.
3, Program pokračuje po stisku klávesy 1. Obě použité smyčky jsou smyčky s podmínkou. Pro obě jsou použity zelené bloky – operátory (jeden je se znaménkem „je menší“ a druhý se znaménkem „je větší“). V tomto případě oba operátory slouží k porovnávání dvou hodnot. V případě že je podmínka splněná a obě hodnoty jsou stejné, cyklus je ukončen a program pokračuje dál. V praxi – jakmile mašinka dojede na požadované místo, program se zastaví a pokračuje další částí. V našem případě se lokomotiva obrátí o 90 stupňů a pokračuje v cestě svisle po ose y. Všimněte si modrých bločků s označením x a y – je v nich vložená aktuální poloha postavy na ose x a y. Podmínka v operátoru se tudíž týká aktuální pozice na ose x a y.
4, Na závěr programu je použit ukončovací blok „zastav“ nastavený tak, aby ukončil program.
Program k vyzkoušení zde.
Operátory
Ve skupině operátorů jsou zelené bloky, které lze použít na mnoho různých způsobů. Operátory lze navzájem skládat do sebe stavebnicovým způsobem a vytvářet tak složitější tvary. Svým tvarem operátory ve scratchi napovídají, kdy a hlavně kam je možné je vložit (kulaté operátory do kulatých polí a šestihranné operátory do šestihranných polí).
Primárně jsou operátory určené pro konstrukci podmínkových příkazů a matematických tvarů. Ve scratchi je kromě toho můžete použít pro spojování textových řetězců (spojování textů) a pro generování náhodných čísel v požadovaném rozsahu. Podrobněji si o tom popovídáme v následující kapitole o podmínkách.
Úkoly:
1, Zkuste využít smyčku pro tvorbu animovaného pohybu postavy. Zkuste naprogramovat, aby se dal ovládat pohyb postavy.
2, Zkus zrychlovat a zpomalovat pohyb postavy. Zkus to naprogramovat tak, abys mohl rychlost pohybu volně ovládat.
3, Zkus přeprogramovat program s lokomotivou, aby jela jiným směrem. Bylo by dobré, kdyby zůstala na kolejích :-).
Pingback: Ovládání, operátory a proměnné – ondranauci.cz
fajn ale je mi líto že se tam neprobírají pokročilejší bloky jako např. zaokrouhli,atd.