Ako nakŕmiť hada (2. časť)
... dokončenie z minulej lekcie
Začneme obsluhou vytváranie nových vecí. Pred obsluhu čakanie vložte
podmienenej vykonanie príkazov
, Nazvite ho vytváranie vecí. Obsah vidíte na ďalšom
obrázku.
Novú vec budeme vytvárať náhodne s určitou pravdepodobnosťou, preto do testu podmienky dáme porovnaní náhodného čísla s konštantou. Nastavením hodnoty na 0.03 zaistíme, že sa nová vec vytvorí v každých 3 zo 100 priechodov programu hlavnej slučkou, pravdepodobnosť vzniku veci je teda 3%. Vzhľadom k tomu, že jeden priechod hlavný slučkou trvá 0.05 sekundy, budú veci vznikať v priemere každých 1.7 sekundy.
K vytvoreniu veci na ploche použijeme opäť Petríkov kamarátku - Lucku.
Najskôr ju nastavíme na náhodné políčko plochy. Pre horizontálnu pozíciu
Lucky použijeme prvok šírka plochy
, Ktorý nám odovzdá číselnú hodnotu 20, čo je šírka
plochy programu. Je možné číslo zadať priamo, ale výhodnejšie je
pracovať s všeobecnými číslami. Ušetríme si tak problémy, až niekedy v
budúcnosti budeme niečo v programe meniť, napr. Zmeníme ak rozmery plochy.
Šírku plochy odovzdáme funkciu náhodné číslo
, Ktorá vytvorí náhodné číslo v rozsahu od 0 do 19.999999999. Nasledujúce
funkcie celočíselná časť
odstráni desatinnú časť čísla. Vznikne tak náhodné celé číslo v
rozsahu 0 až 19, čo sú horizontálne súradnice prvého až posledného
políčka plochy. Pripomeňme si, že sa políčka číslujú od nuly z ľavého
dolného rohu smerom doprava a nahor. Podobne vytvoríme aj náhodnú pozíciu
vo vertikálnom smere.
Za nastavením náhodné pozície nasleduje podmienený príkaz testujúci, či je nastavené políčko prázdne. Ak áno, rozhodne sa program ďalším podmieneným príkazom, či vytvorí jed alebo jedlo. Náhodné číslo porovnávame s hodnotou 0.1, ktorá zaistí, že sa v 1 z 10 prípadov vytvorí jed, v ostatných prípadoch jedlo. Všetko vidíte na obrázku:
Na ďalšom obrázku vidíte obsluhu vytvorenie nového jedu. Jedy budeme
vytvárať s rôznou frekvenciou. Najčastejšie chceme vytvárať muchotrávku
a najmenej často krabičku s jedom. Použijeme na to viacstupňové
vetvenia príkazov
. Větvicím výrazom bude náhodné celé číslo v rozsahu 0
až 5 vytvorené pomocou prvkov celočíselná
časť
, Náhodné číslo
a číslice 6
.
V prvej vetve vytvoríme lebku pre 2 prípady z 6 (hodnoty 0 a 1), pravdepodobnosť vzniku lebky bude teda 33%. V druhej vetve vytvoríme krabičku s jedom s menšou pravdepodobnosťou - pre 1 prípad z 6 (hodnota 2), pravdepodobnosť vzniku je 17%. V ostatných prípadoch vytvoríme muchotrávku - pre zvyšné 3 prípady z 6 (hodnoty 3, 4 a 5), pravdepodobnosť 50%.
Obsluhu vytvorenie jedu zakončíme príkazom pre zapnutie
prepínača 2
. Ako si spomínate, prepínač 1
sme použili na indikáciu, že na políčku je múr. Prepínač 2 budeme
používať na indikáciu jedu na políčku. To nám neskôr uľahčí prácu,
nebudeme musieť testovať všetky možné jedy, ktoré v programe
použijeme.
Obsluhu vytváranie jedla zaistíme inou metódou. Ako vidíte na ďalšom obrázku, obsluha je vďaka použitiu zoznamu celkom jednoduchá.
Na začiatku obsluhy náhodne vyberieme stránku zoznamu, z ktorej prevezmeme
predmet jedla. Index jedla nastavíme na náhodné celé číslo v rozsahu
0 až 4, čo sú indexy prvý až posledný
stránky zoznamu. Namiesto priameho zadania čísla rozsahu náhodných hodnôt
použijeme prvok udávajúce počet stránok v zozname
. Vďaka tomu môžeme v budúcnosti pridávať do zoznamu ďalšie jedlá, bez
toho aby sme museli meniť obsluhu jedál v programe. Číslo jedla si pomocou
prvku číselná hodnota 1 (rozsah 0 až 1023)
uchováme v políčku pre budúce použitie. Ďalším príkazom položíme
predmet jedla na pozícii Lucky
. Posledným príkazom bude zapnutie prepínača 3
. Prepínač 3 použijeme na indikáciu, že na políčku je jedlo.
Tým je obsluha vytváranie nových vecí hotová a môžete ju vyskúšať
(nezabudnite na obsluhu čakanie na konci hlavnej slučky). Uprostred plochy by
sa mala objaviť hlava hada s otvárajúce sa pusou a okolo vznikajúce nové
veci. Program ukončíte kliknutím na krížik
na hornej lište okna vpravo.
Pokračujeme obsluhou ovládanie hada. Doplňte na začiatok hlavnej slučky
programu (pred obsluhu vytváranie vecí) prvok viacstupňové vetvenia
príkazov
s názvom ovládanie hada. Obsluhu vidíte na nasledujúcom
obrázku.
Vetviaci hodnotou bude funkcia vstup klávesy (nečaká na
stlačenie)
. Klávesom vľavo otočíme Petríka (teda hlavu hada) doľava a zapneme
príznak, že had je v pohybe. Podobne obslúžime aj klávesy ostatných
smerov. Ako posledný obslúžime Esc a to tak, že príkazom
koniec funkcie
(zo skupiny riadenie programu
) Ukončíme funkciu. Pretože sa jedná o hlavnú funkciu programu, ukončíme
tým aj celý program.
Program vyskúšajte. Kurzorovými klávesmi (šípkami) môžete otáčať hlavou hada do strán, klávesom Esc program ukončíte.
Našou ďalšou úlohou bude hada rozpohybovať. Rýchlosť pohybu hada zvolíme asi 2 kroky za sekundu. Aby sme mohli lepšie obsluhovať klávesnicu a generovanie vecí, cykluje hlavná slučka programu rýchlejšie (približne 18 až 20 priechodov za sekundu). Preto použijeme čítač pre ďalší krok, ktorý zaistí posun hada pri každom deviatom priechode cyklom.
Obsluhu pohybu hada vidíte na ďalšom obrázku. Umiestnite ju za obsluhu ovládanie hada, ale pred obsluhu generovanie nových vecí. Na začiatku obsluhy je vykonávaný test, či je had v pohybe (pri začatí hry totiž stojí na mieste až do stlačenia prvej klávesy smeru). Ak je tomu tak, dekrementuje sa (tj. Zníži o 1) čítač pre ďalší krok. Ak dosiahne nuly, môže had popojít o krok vpred. Najskôr znovu nastavíme čítač pre ďalší krok. Zvolili sme číslo 9, ktoré predstavuje približne 2 kroky za sekundu. Úplne presne s časovačom nemôžeme počítať, napr. V systéme Windows 98 je najmenší krok časovača približne 55 ms, zatiaľ čo vo Windows XP spravidla niečo pod 50 ms.
Pred obsluhou posunu hada otestujeme, či nie je pred hadom nepriechodná prekážka. Za neprechodnou prekážku budeme považovať múr, ale aj samotného hada, teda niektorý z jeho článkov. Na vykonanie testu použijeme Lucku. Nastavíme ju na pozíciu Petríka, otočíme v jeho smere a prevedieme krok vpred.
Ako si iste spomínate, múr sme označili prepínačom 1
. Aby sme si to uľahčili, budeme tak označovať aj políčko s článkom
hada. Ak je prepínač zapnutý, je pred hadom stenu alebo článok hada a had
umiera. Prehráme zvuk nárazu (zvuky nájdete na stiahnutie na konci lekcie) a
vykonáme animáciu smrti hada. Budeme sa ňou zaoberať až neskôr. Inak sa
had môže posunúť vpred.
V prípade posunu hada sa najskôr budeme zaoberať Petřík - hlavou hada. Zhruba uprostred obsluhy posunu hada vidíte, že Petřík prevedie krok vpred. Nasledujúce vetviaci konštrukcia uschová na novom políčku číslo udávajúce, ktorým smerom ležalo minulej políčko. Toto číslo nám pomôže neskôr pri hľadaní cesty ku koncu hada.
Číslo predstavujúce smer na minulé políčko uchováme v
číselnej premennej 2
. Pre minulej políčko smerom vpravo použijeme číslo 0, pre
smer hore 1, pre smer vľavo 2 a pre smer dole
3. Prípad pre minulý smer vľavo vidíte na obrázku,
ostatné smery sú podobné.
Vráťme sa na začiatok obsluhy posunu hada o krok vpred. Lucku sme naposledy zanechali na budúcom políčku, kde testovala stav prepínača 1. Teraz ju otočíme späť a posunieme o krok vpred, tým ju vrátime na rovnakú pozíciu ako je hlava hada. Ešte môžeme doplniť prehriatiu zvuku kroku hada.
Nasleduje cyklus zaisťujúce posun článkov hada, ako vidíte na ďalšom obrázku. Počet priechodov cyklu je daný dĺžkou hada. Na začiatku je Lucka nastavená na pozíciu hlavy hada. Na každom políčku s článkom alebo hlavou hada je uchované číslo udávajúce smer na minulé políčko. Číslo predstavuje počet kvadrantov (tj. Štvrtín otáčky), o koľko sa musí Lucka otočiť proti smeru hodinových ručičiek od nulového uhla (nulový uhol zodpovedá smeru doprava).
Najskôr sa teda Lucka otočí na minulé políčko. Nasledujúcim príkazom
prenesie predmet z minulého políčka na políčko, na ktorom stojí. Tým
posunie článok hada o krok vpred. Ďalším príkazom zapne prepínač
1
. Povedali sme si, že prepínačom 1 budeme indikovať nielen múr, ale aj
článok hada. Posledným príkazom podíde Lucka o krok vpred, to znamená na
ďalší políčko hada smerom k jeho koncu.
Po vykonaní všetkých priechodov cyklom zostane Lucka stáť na políčku za novým koncom hada. To platí aj pre dĺžku 0, kedy sa nevykoná ani jeden priechod cyklom. Nasleduje posun hlavy hada o krok vpred a úschova smere na minulé políčko, ako sme si obsluhu popísali skôr. Vymastíme obsah políčka za koncom hada prázdnym políčkom (vykoná Lucka) a vypneme príznak, že je na políčku článok hada. V prípade nájdenia jedla alebo jedu na políčko neskôr doplníme nový článok hada.
Had je posunutý. Teraz si všimneme obsahu políčka na novej pozícii hlavy
hada. Najskôr vyskúšame, ak je na políčku jedlo. Jedlo sme si označili
prepínačom 3, budeme teda testovať prepínač 3
. Obsluhu jedla vidíte tu na obrázku:
Ak je na políčku jedlo, vymažeme jedlo položením prázdneho políčka a
vypneme prepínač 3. V číselnej premennej políčka 1 máme
uschovaný číslo jedlá zo zoznamu jedál. Prevezmeme teda číselnú
hodnotu 1 políčka a použijeme ju ako index jedla, aby sme získali
článok hada, ktorý k nájdenému jedlu patrí. Vezmeme zo zoznamu článok
hada a položíme ho na pozíciu s Luckou. Ako vieme, Lucka zostala stáť na
políčku za koncom hada, pred chvíľou sme tam predbežne položili prázdne
políčko. Tým sme vytvorili nový článok hada sa spolknutým jedlom. Ešte
zapneme prepínač 1
ako príznak článku hada a zvýšime počítadlo dĺžky hada. Na záver
môžeme prehrať zvuk prehltnutie a zobraziť novú dĺžku hada.
Obsluha nájdenie jedu je podobná. Vidíte ju na obrázku nižšie. Ako viete, jed označujeme prepínačom 2. Ak zistíme teda testom prepínača 2 nájdenie jedu, opäť najskôr vymažeme políčko položením prázdneho predmetu a vypneme prepínač 2. Vykonáme obsluhu podobne ako pri bežnom jedle. Nový článok hada použijeme vždy rovnaký, nezávislý na nájdenom jedu. Opäť zapneme na pozíciu Lucky prepínač 1 ako indikátor článku hada, zvýšime dĺžku hada, prehráme zvuk prehltnutie a zobrazíme novú dĺžku. Všetko zakončíme smrťou hada.
Naším posledným úlohou bude vytvorenie funkcie pre obsluhu smrti hada. Obsah funkcie vidíte na ďalšom obrázku.
Najskôr je uchovaná dosiahnutá dĺžka hada ako nové maximálne skóre. Po kratučké pauze sa ozve zvuk zasípění. Smrť budeme indikovať postupným prekreslením všetkých článkov hada na články s lebkou. Po prekreslenie a krátkej pauze články hada vymastíme (znázorníme tak odumieranie hada). Opäť nasleduje krátka pauza a začne sa nová hra.
Po začatí hry je dôležité doplniť príkaz vyprázdnenia zásobníka klávesov. Často sa stáva, že hráč v zápale hry stláča klávesy aj počas ukončovania hry. Tak by si mohol nechtiac odštartovať ďalšiu hru.
Nasledujúce obrázky ukazujú obsluhu prekreslenie článkov hada na smrť a vymazanie článkov hada. Opäť využívame uschované smermi na predchádzajúcu políčko v číselnej hodnote 2 políčka. Vykonávame pritom animáciu otáčanie hlavy hada (hadovi sa motá hlava), v prvom prípade proti smeru hodinových ručičiek, v druhom prípade obrátene.
Predsa len ostáva ešte jedna posledná vec - ikonka programu, tak ako bude vyzerať pri zobrazení v zozname súborov. Vyberte ikonku hlavnú funkciu (s názvom Had) a tlačidlom Ikona ju upravte - napríklad do nej skopírujte hlavu hada. Ikona hlavné funkcie sa v systéme zobrazí ako ikona programu.
Teraz už môžete program spustiť a vyskúšať. Prajem veľa zábavy pri vašej prvej naozajstnej hry.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 251x (319.84 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Petr (sú obsiahnuté v EXE súbore, ktorý možno v programe priamo otvoriť)