10. Ovládání klávesnicí <<< Obsah >>> 12. Jak nakrmit hada
Zkusíme si udělat malou hru. Ani byste nevěřili, co se stalo. Petřík v bludišti narazil na příšery. Ale nebojte se, až ho ozbrojíme, hravě je zvládne. Budeme pokračovat v našem programu Cesta z předešlé kapitoly, ve kterém jsme zanechali zapnutý poslední způsob ovládání - ovládání držením kláves 2. Nebo si můžete otevřít program Příšery, který je již připraven v ukázkových programech Petra.
Nejdříve zajistíme, aby se v bludišti objevovaly příšery. Zkopírujte pravým tlačítkem myši v okně Společné proměnné a funkce prvek prázdné políčko . Přejmenujte ho na Příšera a přikreslete do něj nějakou příšerku. Může vypadat třeba takto:
Příšerky se nám budou generovat náhodně. Do hlavní smyčky programu přidejte prvek podmíněné provedení příkazů . Do testu podmínky platí-li, že doplňte porovnávací funkci je menší než (ze skupiny výpočty , podskupiny porovnání ). Jako první parametr pro porovnání použijeme funkci náhodné číslo (0 <= x < 1) (ze skupiny výpočty , podskupiny funkce ). Druhým parametrem bude číselná konstanta s nastavenou hodnotou 0.2 (buď jako text prvku nebo pomocí prvků číslic a desetinné tečky). Za chvíli doplníme obsluhu vytvoření příšery.
Co taková funkce s náhodou bude dělat? Z textů k prvkům čteme: "Platí-li, že náhodné číslo je menší než 0.2, vytvoř příšeru." Náhodné číslo je desetinné číslo s náhodnou hodnotou od nuly do jedničky. Číslo 0.2 je jedna pětina z jedničky. Náhodné číslo má hodnotu menší než 0.2 v pětině případů. To znamená, že při opakovaném průchodu se příšera vytvoří v každém pátém případě.
K vytvoření příšerky použijeme Petříkovu kamarádku - Lucku. Nejdříve určíme náhodné místo, kde bude příšerka vytvořena. Do větve pro splněnou podmínku přetáhněte prvky horizontální pozice a vertikální pozice (ze skupiny Lucka , podskupiny Lucka - rozšíření ). K oběma prvkům připojte funkci celočíselná část (ze skupiny výpočty , podskupiny funkce ), protože souřadnice políček udáváme v celých číslech. K funkcím celočíselné části připojte funkci náhodné číslo (0 <= x < 1) . K náhodnému číslu lze připojit jako parametr číslo, určující rozsah náhodného čísla. Například přidáním čísla 10 by náhodné číslo generovalo čísla v rozsahu 0 až 10. My doplníme k náhodnému číslu pro horizontální pozici prvek šířka plochy a pro vertikální pozici prvek výška plochy (oba ve skupince plocha ).
Rozeberme si podrobněji způsob výpočtu horizontální náhodné pozice. Výchozím prvkem v horizontálním směru je šířka plochy . Tento prvek nám navrací číslo udávající šířku plochy v krocích (v políčkách). V našem programu to bude číslo 12, což je šířka plochy, jak jsme si ji kdysi nastavili. Údaj o šířce plochy prvek předá funkci náhodné číslo (0 <= x < 1) , která vygeneruje náhodné číslo v rozsahu 0 až šířka plochy (bez koncové hodnoty), nebo-li číslo v rozsahu 0 až 11.99999999. Z funkce náhodného čísla je číslo předáno funkci celočíselná část . Ta ořízne část čísla za desetinnou tečkou a navrátí pouze celou část čísla. Vznikne číslo 0 až 11, což jsou souřadnice prvního až posledního políčka ve vodorovném směru. Možná jste si již všimli, že se políčka počítají z levého dolního rohu, počínaje nulou.
Máme tedy Lucku na náhodné pozici v ploše. Teď bychom mohli položit do plochy předmět příšerky, ale ještě musíme otestovat, zda je na tomto místě volné políčko, zda tam není třeba zeď. Pokud políčko nebude volné, nic se neprovede a příšerka se nevytvoří. Výsledek je zde, zkuste program spustit:
Nyní trochu vylepšíme obsluhu provádění kroků Petříka. Zkopírujte pravým tlačítkem myši v okně Společné proměnné a funkce funkci Opatrný krok vpřed. Vytvoří se nová funkce s názvem Opatrný krok vpřed 2. Přejmenujte ji na Opatrný krok daným směrem.
Přepněte se dvojklikem do nově vytvořené funkce a podívejte se na okno vlevo dole. Má titulek Místní proměnné a funkce. Význam okna nás zatím ještě nebude zajímat, pouze si všimneme prvku vstupní proměnné . Z okna Knihovna proměnných a funkcí přetáhněte do prvku novou číselnou proměnnou číslo a nazvěte ji požadovaný směr.
Přepněte se zpět do hlavní funkce programu. V konstrukci ovládání držením kláves 2 najděte první větev ovládání Petříka, obsluhu pro šipku nahoru. Položte sem nově vytvořenou funkci Opatrný krok daným směrem. Po položení funkce můžete vidět, že k funkci je připojena číselná proměnná s názvem požadovaný směr. Je to samozřejmě ta, kterou jsme si právě sami vytvořili. S její pomocí budeme funkci předávat parametr, kterým bude požadovaný směr kroku. Přetáhněte z příkazu pro nastavení směru do parametru funkce prvek nahoru . Zbývající příkazy - nastavení směru a funkci Opatrný krok vpřed - můžete z větve vyhodit. Stejně upravte i větve pro ostatní směry. Takto bude vypadat obsluha kroku nahoru:
Teď připravíme obsah funkce Opatrný krok daným směrem. Přepněte se do ní. Nejdříve zkušebně doplňte na začátek funkce příkaz pro nastavení směru Petříka a jako parametr doplňte vstupní proměnnou požadovaný směr. Tím jsme vlastně navrátili původní funkčnost programu, abychom ověřili, že jsme při úpravách neudělali chybu. Program spusťte a vyzkoušejte ho, měl by fungovat stejně jako dřív. Je-li vše v pořádku, můžete příkaz pro nastavení směru opět zrušit.
Pokud bychom původní ovládání použili pro střílení, tak by nám možná mohlo vadit, že se nemůžeme otočit na cíl, aniž bychom přitom nepopošli o krok k cíli. Uděláme si proto malé vylepšení ovládání. Jestliže nebude Petřík otočen v požadovaném směru, nejdříve se tam otočí a až potom se rozejde. Bude tak možné Petříka krátkým ťuknutím na klávesu otočit a až držením klávesy ho rozejít vpřed. Upravte obsah funkce podle následujícího obrázku.
Na začátku funkce se nejdříve provede porovnání současného směru otočení Petříka s požadovaným směrem, předaným jako parametr funkce. Zjistíme tak, zda je Petřík v požadovaném směru již otočen.
Je-li Petřík otočen správně, může popojít o krok vpřed. Udělá to ovšem opatrným způsobem. Nejdříve otestuje, zda před ním není zeď. Není-li zeď, může popojít. Je-li zeď, zůstane stát a proběhne obsluha čekání. Hlavní smyčka programu totiž potřebuje, aby každý její průchod trval alespoň jedno čekání kvůli rovnoměrnému vytváření nových příšerek. Jedno čekání je v hlavní smyčce dosazeno v případě, že není stisknuta žádná klávesa pro pohyb. Čekání při stisku klávesy pro pohyb je obslouženo v této funkci. Nečeká se po příkazu kroku, příkaz kroku již čekání zajišťuje vnitřně.
Není-li Petřík správně otočen, otočí se do požadovaného směru a program chvíli čeká. Čekání zajišťuje, aby se Petřík při krátkém ťuknutí do klávesnice nerozešel.
Spusťte program a vyzkoušejte ovládání. Především zkuste otáčení Petříka na místě a zatáčení během chůze.
Pustíme se do obsluhy střelby po příšerkách. Trochu si přitom "vystřelíme z Lucky". Použijeme totiž ke střelbě opět Petříkovu kamarádku - Lucku. Lucka bude střelou, kterou bude Petřík střílet. Ale to je v pořádku, udělá to pro něj ráda.
Dvojklikem na sprajt Lucka v okně Společné proměnné a funkce vyvolejte editaci sprajtu Lucky (poznámka - sprajtem označujeme pohyblivý animovaný objekt). Uvidíte plochu s 4 x 5 obrázky Lucky. Stiskněte tlačítko Vlastnosti , objeví se okno pro nastavení vlastností sprajtu. Změňte řádek Fází na krok (0 = ihned) z 8 na 2 (střela poletí rychle) a řádek Fází pro pohyb změňte ze 4 na 0 (střela při letu nepotřebuje měnit vzhled). Stiskněte klávesu Enter (nebo klikněte na tlačítko OK). Obrázky sprajtu se změnily tak, že Lucka je teď pouze v jednom sloupci.
Chytněte levým tlačítkem myši první z obrázků Lucky a odsuňte ho mimo plochu obrázků. Po uvolnění tlačítka myši obrázek zmizí, vyhodili jsme ho ze sprajtu pryč. Dvakrát klikněte levým tlačítkem myši na uvolněné prázdné okénko. Vyvolá se editor obrázku sprajtu. Namalujte obrázek střely - například malou šedou kuličku (nástrojem koule , použijte bílou barvu):
Jako podklad obrázku ponechejte původní našedle fialovou barvu. Je to "průhledná" barva, zajišťující viditelnost původního obsahu okna v okolí střely. Ve výběru barev grafického editoru je to barva vlevo nahoře.
Tlačítkem Předešlá editace se vraťte zpět do editoru sprajtu Lucky. Uchopte pravým tlačítkem myši upravený první obrázek a přetahováním jej rozkopírujte do všech ostatních políček sprajtu. Později můžete obrázky ještě posunout tak, aby střely vycházely přesně z místa hlavně pistole.
Teď upravený sprajt vyzkoušejte. Klikněte na tlačítko Test . Objeví se okno se zelenou plochou, uprostřed je sprajt střely. Klikněte někam do plochy okna, střela se na určené místo přesune. Test sprajtu ukončíte tlačítkem Storno.
Střelu máme připravenou, nyní musíme vytvořit ovládání střely. Vraťte se do hlavní funkce programu. Do hlavní smyčky, ihned za obsluhu vygenerování nové příšery, doplňte nový prvek podmíněné provedení příkazů a nazvěte ho výstřel ze zbraně. Střelbu ze zbraně budeme aktivovat klávesou mezerníku, proto do testu podmínky platí-li, že dejte funkci je stisknuta klávesa s prvkem klávesy mezerník (ve skupině klávesy , podskupina znakové klávesy ).
Celkovou sestavu obsluhy střelby vidíte na následujícím obrázku. V obsluze nastavíme střelu (Lucku) na výchozí pozici, potom střela letí, po doletu střelu vypneme.
Při zahájení letu střely nastavíme pozici a směr střely podle pozice a směru Petříka, potom zapneme viditelnost střely. Prvky pozice a směru již známe, co se ale skrývá za prvkem viditelnosti? Všechny sprajty (tj. pohyblivé objekty, kterými jsou i Petřík a Lucka) mají dva základní stavy - viditelný a neviditelný. Ve viditelném stavu (kromě toho, že je sprajt vidět) se provádí animace sprajtu a sprajt se pohybuje pomalu. Je-li sprajt neviditelný, přemisťuje se na novou pozici okamžitě. Z Petříka se stává "Super Petřík", který se pohybuje jako blesk.
Viditelnost Lucky nastavíme příkazem viditelná . Jako parametr viditelnosti sprajtů obvykle uvádíme logickou konstantu ano nebo ne , tak přepínáme sprajt mezi režimy "Louda" a "Super". Celou obsluhu aktivace střely vidíte na následujícím obrázku. Pro zpřehlednění je obsluha v samostatné skupině.
Vytvoříme obsluhu pohybu střely. Za skupinu přípravy výchozí pozice střely přidejte prvek cyklu opakování příkazů s počtem , pojmenujte ho let střely. Do počtu opakování cyklu dejte číslo 4. To je maximální vzdálenost, kam střela poletí.
Let střely přerušíme, narazí-li střela do stěny. Proto dejte na začátek těla cyklu podmínku s testem, zda je před Luckou předmět Zeď. Pokud ano, přeruší se provádění cyklu příkazem přeruš opakování (je ve skupince řízení programu ). Po kontrole nárazu do zdi již můžeme dát příkaz pro pohyb střely krok .
Za posunem střely o krok otestujeme, zda střela zasáhla cíl. Použijeme podmíněný příkaz s testem, zda předmět na pozici s Luckou je předmět Příšera. Pokud ano, vymažeme příšerku položením předmětu prázdné políčko a přerušíme cyklus letu střely. Někdy v budoucnu sem můžete doplnit další obsluhy zásahu, jako třeba čítač zásahů nebo zvuk zaúpění příšery.
Celou obsluhu letu střely vidíte na dalším obrázku. Za obsluhou letu střely uveďte ještě vypnutí viditelnosti Lucky a program můžete vyzkoušet.
Chcete-li dále hru vylepšovat, můžete přikreslit Petříkovi zbraň. Nebo můžete na začátek podmíněného příkazu pro obsluhu střelby doplnit zvuk výstřelu. Použijte prvek přehrátí zvuku . Do okna Společných proměnných a funkcí přetáhněte z banky zvuků třeba zvuk [vzory]\Zbraně\Puška a pistole\Pistole a ten použijte ve funkci přehrátí zvuku. Podobně můžete do obsluhy zásahu příšery doplnit zaúpění příšery - například zvuk [vzory]\Lidské\Výkřiky\Au 2.