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.