Programování pro hračičky/Opičky/Lekce 5

Z Wikiverzity
Jak používat klasifikační nálepkuTato stránka je součástí kurzu:
středoškolská
Příslušnost: skupinová

Podmíněné příkazy[editovat]

Jak jsme si uvědomili v minulé lekci, opičce můžeme zadávat i příkazy, které v některých případech nejdou vykonat, aniž bychom tím přerušili vykonávání programu — můžeme opičce například zadat vem sušenku s tím, že pokud je v daném místě sušenka, pak ji opička sebere, a pokud tam sušenka není, tak sice ohlásí chybu, ale pokračuje dalšími příkazy, které jí předepisuje probíhající program. Možná nás hned napadlo, oč výhodnější by bylo, kdyby opička mohla nejprve zjistit, zda jde nějaký příkaz v daném místě vykonat, a podle toho jej pak buď vykonala, nebo nevykonala, či případně dokonce pokračovala odlišnou sekvencí dalších příkazů — tedy například kdyby zjistila, zda na místě, kde se právě nachází, leží nějaká sušenka, a pak buď sušenku vzala a donesla svému majiteli, anebo odešla jinam pro jinou potravu.

Opička skutečně takovouto možnost má. Naučme ji například takovýto příkaz vemsu:

'ájo pozor vemsu znamená pokud vidíš sušenku, vem sušenku, tvař se vítězoslavně

a spusťme jej jednou ve chvíli, kdy se někde v místnosti nachází sušenka (ta může ležet volně, tedy přímo v inventáři místnosti, ale také třeba na stole, na míse apod.), a jednou ve chvíli, kdy se sušenka v místnosti nenachází. V prvním případě opička vezme sušenku a zatváří se vítězoslavně, ve druhém případě neudělá nic (tedy ani neohlásí chybu).

To, co se nám právě podařilo vytvořit, se v programování nazývá podmíněným příkazem. Běžnými slovy bychom mohli říci, že v našem příkladu se příkazy vem sušenku a tvař se vítězoslavně provedou jen pod podmínkou, že opička v místnosti vidí sušenku. Programátorsky exaktnější by bylo říci, že tyto příkazy se provedou, pokud je splněna podmínka vidíš sušenku.[1] Takto budeme výrazu podmínka používat nadále.

Opičce můžeme zadat též alternativní příkaz nebo příkazy pro případ, že sušenka se v místnosti nenachází:

'ájo pozor vemsu2 znamená pokud vidíš sušenku, vem sušenku, tvař se vítězoslavně, jinak tvař se jako opička toužící po sušence

Stejně jako po podmínce může následovat celá dlouhá řada příkazů, které se mají postupně vykonat, pokud je podmínka splněna, může i po slově jinak následovat celá dlouhá řada příkazů, které se mají postupně vykonat, pokud podmínka není splněna. Chceme-li, aby opička poté, co vykoná podmíněný příkaz, pokračovala ve vykonávání programu nějakými dalšími příkazy nezávislými na podmínce, uzavřeme podmíněný příkaz slovem potom:

'ájo pozor vemsu3 znamená pokud vidíš sušenku, vem sušenku, očichej sušenku, jinak tvař se jako opička toužící po sušence, potom usměj se, vzdychni
'ájo pozor vemsu4 znamená pokud vidíš sušenku, vem sušenku, očichej sušenku, potom sever, východ, nahoru

Testovatelné podmínky[editovat]

V úvodním příkladu jsme nechali opičku rozhodovat podle přítomnosti, resp. viditelnosti předmětu v místnosti. To je nejvýkonnější podmínka, kterou opička zvládá. Předměty můžeme označovat nejrůznějším způsobem, stejně jako když si je sami ve hře chceme třeba prohlédnout, a mohou to být jak skutečné samostatné herní objekty, s nimiž se dá různě zacházet (jako třeba sušenka nebo stůl), tak i různé popisové detaily. Všechno, co si jako hráči můžeme prohlédnout, dokáže opička rozpoznat v podmíněném příkazu. Rozpoznat je možno i to, že nějaký předmět v místnosti není, resp. je v místnosti pro opičku neviditelný, tedy místo tvaru vidíš použít tvaru nevidíš:

'ájo pozor salatven znamená pokud vidíš ledničku, otevři ledničku, vem salát, zavři ledničku, polož salát
'ájo pozor nasever znamená pokud vidíš severní dveře, otevři severní dveře, sever
'ájo pozor somruj znamená pokud nevidíš sušenku, tvař se jako opička hrozněmoc potřebující sušenku
'ájo pozor nejdeto znamená pokud nevidíš schody, rozhlédni se, tvař se bezradně

Následuje-li v podmínce za slovy vidíš nebo nevidíš slovo směr a ještě jedno další slovo, pak opička otestuje, zda toto další slovo označuje některý ze směrů, jimiž je možno se z místnosti vydat dál:

'ájo pozor jelisever znamená pokud vidíš směr sever, sever, jinak vzdychni toužebně seversky
'ájo pozor najih znamená pokud nevidíš směr jih, otevři dveře, potom jih

Další poměrně výkonná podmínka umožňuje testovat opiččin inventář. Je uvedena slovem máš nebo nemáš, po němž následuje označení předmětu ve 4. pádě:

'ájo pozor oblkoš znamená pokud máš noční košili, oblékni si noční košili
'ájo pozor jezsu znamená pokud nemáš sušenku, vem sušenku, potom jez sušenku

Tatáž slova máš a nemáš je možno použít rovněž ke zjišťování hladu a žízně:

'ájo pozor najezse znamená pokud máš hlad, vem sušenku, jez sušenku
'ájo pozor pítčinepít znamená pokud nemáš žízeň, ne, jinak pij vodu

Konečně, opička umí otestovat, zda se nachází ve vnitřním, nebo venkovním prostoru a zda je kolem ní noc, či den, respektive tma, či světlo:

'ájo pozor jdiven znamená pokud jsi vevnitř, otevři dveře, sever, zavři dveře
'ájo pozor dresscode znamená pokud nejsi venku, sundej si čepici
'ájo pozor kuknebe znamená prohlédni si nebe, pokud je den, prohlédni si slunce, jinak prohlédni si hvězdy
'ájo pozor hleďven znamená pokud není noc, podívej se oknem ven
'ájo pozor kuk něco znamená pokud je světlo, prohlédni si něco
'ájo pozor šetříme znamená pokud není tma, zhasni pochodeň

Při používání podmíněných příkazů je vhodné si ještě jednou připomenout, že v rámci hry je opička sice živá bytost, ale ve skutečnosti je to jen program, který nereaguje na smysl sdělení, ale jen podle přesně daných pravidel analyzuje jeho zevní podobu. Pokud se nám stane, že program s podmíněným příkazem nefunguje tak, jak má, je to velmi často proto, že jsme nezapsali správně podmínku nebo její parametr (tedy třeba označení předmětu, který máme na mysli).

Úkoly[editovat]

  • Vyzkoušejte si v různých krátkých programech postupně všechny druhy podmínek, které opička umí — testování přítomnosti předmětu v místnosti, testování existence průchodu v daném směru, testování přítomnosti předmětu v inventáři, testování hladu nebo žízně, testování polohy uvnitř či venku, testování dne či noci, testování osvětlení. Aspoň jednou přitom použijte slovo jinak pro popis činnosti v případě nesplnění podmínky a aspoň jednou slovo potom pro popis činnosti po skončení podmíněného příkazu.

Pracovní odkazy[editovat]

Poznámky[editovat]

  1. Takto je podmínka formulována v nové verzi opiček, spuštěné 8. listopadu 2020. Ve starší verzi měla podmínka tvar tu je sušenka, ten však neumožňoval používání parametrů v podmínkách kvůli rozdílnosti pádových tvarů (třeba vůči vem sušenku).