9. Jak makrmit hada (1. část) <<< Obsah >>> 11. Začínáme s grafikou
...dokončení z minulé lekce
Začneme obsluhou vytváření nových
věcí. Před obsluhu čekání vložte podmíněné provedení
příkazů , nazvěte ho vytváření věcí. Obsah vidíte na dalším obrázku.
Novou věc budeme vytvářet náhodně s určitou pravděpodobností, proto do testu podmínky dáme porovnání náhodného čísla s konstantou. Nastavením hodnoty na 0.03 zajistíme, že se nová věc vytvoří v každých 3 ze 100 průchodů programu hlavní smyčkou, pravděpodobnost vzniku věci je tedy 3%. Vzhledem k tomu, že jeden průchod hlavní smyčkou trvá 0.05 sekundy, budou věci vznikat v průměru každých 1.7 sekundy.
K vytvoření věci na ploše použijeme
opět Petříkovu kamarádku - Lucku. Nejdříve ji nastavíme na
náhodné políčko plochy. Pro horizontální pozici Lucky
použijeme prvek šířka
plochy , který nám předá
číselnou hodnotu 20, což je šířka plochy programu. Je možné
číslo zadat přímo, ale výhodnější je pracovat s obecnými
čísly. Ušetříme si tak problémy, až někdy v budoucnu
budeme něco v programu měnit, např. změníme-li rozměry
plochy. Šířku plochy předáme funkci náhodné číslo
,
která vytvoří náhodné číslo v rozsahu od 0 do
19.999999999. Následující funkce celočíselná část
odstraní desetinnou část čísla. Vznikne tak náhodné celé
číslo v rozsahu 0 až 19, což jsou horizontální souřadnice
prvního až posledního políčka plochy. Připomeňme si, že
se políčka číslují od nuly z levého dolního rohu směrem
doprava a nahoru. Podobně vytvoříme i náhodnou pozici ve
vertikálním směru.
Za nastavením náhodné pozice následuje podmíněný příkaz testující, zda je nastavené políčko prázdné. Pokud ano, rozhodne se program dalším podmíněným příkazem, jestli vytvoří jed nebo jídlo. Náhodné číslo porovnáváme s hodnotou 0.1, která zajistí, že se v 1 z 10 případů vytvoří jed, v ostatních případech jídlo. Vše vidíte na obrázku:
Na dalším obrázku vidíte obsluhu
vytvoření nového jedu. Jedy budeme vytvářet s různou
četností. Nejčastěji chceme vytvářet muchomůrku a
nejméně často krabičku s jedem. Použijeme k tomu vícestupňové větvení
příkazů . Větvicím
výrazem bude náhodné celé číslo v rozsahu 0 až 5 vytvořené pomocí prvků celočíselná část
, náhodné číslo
a
číslice 6
.
V první větvi vytvoříme lebku pro 2 případy z 6 (hodnoty 0 a 1), pravděpodobnost vzniku lebky bude tedy 33%. Ve druhé větvi vytvoříme krabičku s jedem s menší pravděpodobností - pro 1 případ z 6 (hodnota 2), pravděpodobnost vzniku je 17%. V ostatních případech vytvoříme muchomůrku - pro zbylé 3 případy z 6 (hodnoty 3, 4 a 5), pravděpodobnost 50%.
Obsluhu vytvoření jedu zakončíme
příkazem pro zapnutí přepínače
2 . Jak si vzpomínáte, přepínač 1
jsme použili k indikaci, že na políčku je zeď. Přepínač 2
budeme používat k indikaci jedu na políčku. To nám později
usnadní práci, nebudeme muset testovat všechny možné jedy,
které v programu použijeme.
Obsluhu vytváření jídla zajistíme jinou metodou. Jak vidíte na dalším obrázku, obsluha je díky použití seznamu celkem jednoduchá.
Na začátku obsluhy náhodně vybereme
stránku seznamu, ze které převezmeme předmět jídla. Index
jídla nastavíme na náhodné celé číslo v rozsahu 0 až 4, což jsou indexy první až poslední stránky
seznamu. Namísto přímého zadání čísla rozsahu náhodných
hodnot použijeme prvek udávající počet stránek v seznamu . Díky tomu
můžeme v budoucnu přidávat do seznamu další jídla, aniž
bychom museli měnit obsluhu jídel v programu. Číslo jídla si
pomocí prvku číselná
hodnota 1 (rozsah 0 až 1023)
uchováme v
políčku pro příští použití. Dalším příkazem
položíme předmět jídla na pozici Lucky
. Posledním
příkazem bude zapnutí přepínače 3
.
Přepínač 3 použijeme k indikaci, že na políčku je jídlo.
Tím je obsluha vytváření nových věcí
hotova a můžete ji vyzkoušet (nezapomeňte na obsluhu
čekání na konci hlavní smyčky). Uprostřed plochy by se
měla objevit hlava hada s otevírající se pusou a kolem
vznikající nové věci. Program ukončíte kliknutím na
křížek na
horní liště okna vpravo.
Pokračujeme obsluhou ovládání hada.
Doplňte na začátek hlavní smyčky programu (před obsluhu
vytváření věcí) prvek vícestupňové větvení příkazů
s názvem ovládání
hada. Obsluhu vidíte na
následujícím obrázku.
Větvicí hodnotou bude funkce vstup klávesy (nečeká na
stisk) . Klávesou vlevo
otočíme Petříka (tedy hlavu hada) doleva a zapneme příznak,
že had je v pohybu. Podobně obsloužíme i klávesy ostatních
směrů. Jako poslední obsloužíme klávesu Esc a to tak, že příkazem konec funkce
(ze skupiny řízení
programu
) ukončíme funkci.
Protože se jedná o hlavní funkci programu, ukončíme tím i
celý program.
Program vyzkoušejte. Kurzorovými klávesami (šipkami) můžete otáčet hlavou hada do stran, klávesou Esc program ukončíte.
Naším dalším úkolem bude hada rozpohybovat. Rychlost pohybu hada zvolíme asi 2 kroky za sekundu. Abychom mohli lépe obsluhovat klávesnici a generování věcí, cykluje hlavní smyčka programu rychleji (přibližně 18 až 20 průchodů za sekundu). Proto použijeme čítač pro další krok, který zajistí posun hada při každém devátém průchodu cyklem.
Obsluhu pohybu hada vidíte na dalším obrázku. Umístěte ji za obsluhu ovládání hada, ale před obsluhu generování nových věcí. Na začátku obsluhy je prováděn test, zda je had v pohybu (při zahájení hry totiž stojí na místě až do stisku první klávesy směru). Je-li tomu tak, dekrementuje se (tj. sníží o 1) čítač pro další krok. Dosáhne-li nuly, může had popojít o krok vpřed. Nejdříve znovu nastavíme čítač pro další krok. Zvolili jsme číslo 9, které představuje přibližně 2 kroky za sekundu. Úplně přesně s časovačem nemůžeme počítat, např. v systému Windows 98 je nejmenší krok časovače přibližně 55 ms, zatímco ve Windows XP zpravidla něco pod 50 ms.
Před obsluhou posunu hada otestujeme, zda není před hadem neprůchodná překážka. Za neprůchodnou překážku budeme považovat zeď, ale také samotného hada, tedy některý z jeho článků. K provedení testu použijeme Lucku. Nastavíme ji na pozici Petříka, otočíme v jeho směru a provedeme krok vpřed.
Jak si jistě vzpomínáte, zeď jsme
označili přepínačem
1 . Abychom si to usnadnili, budeme tak
označovat i políčko s článkem hada. Je-li přepínač
zapnut, je před hadem zeď nebo článek hada a had umírá.
Přehrajeme zvuk nárazu (zvuky naleznete ke stažení na konci
lekce) a provedeme animaci smrti hada. Budeme se jí zabývat až
později. Jinak se had může posunout vpřed.
V případě posunu hada se nejdříve budeme zabývat Petříkem - hlavou hada. Zhruba uprostřed obsluhy posunu hada vidíte, že Petřík provede krok vpřed. Následující větvicí konstrukce uschová na novém políčku číslo udávající, kterým směrem leželo minulé políčko. Toto číslo nám pomůže později při hledání cesty ke konci hada.
Číslo představující směr na minulé
políčko uchováme v číselné
proměnné 2 . Pro minulé
políčko směrem vpravo použijeme číslo 0, pro směr nahoru 1, pro
směr vlevo 2 a pro směr dolů 3.
Případ pro minulý směr vlevo vidíte na obrázku, ostatní
směry jsou obdobné.
Vraťme se na začátek obsluhy posunu hada o krok vpřed. Lucku jsme naposledy zanechali na příštím políčku, kde testovala stav přepínače 1. Teď ji otočíme zpět a posuneme o krok vpřed, tím ji navrátíme na stejnou pozici jako je hlava hada. Ještě můžeme doplnit přehrátí zvuku kroku hada.
Následuje cyklus zajišťující posun článků hada, jak vidíte na dalším obrázku. Počet průchodů cyklu je dán délkou hada. Na začátku je Lucka nastavena na pozici hlavy hada. Na každém políčku s článkem nebo hlavou hada je uchováno číslo udávající směr na minulé políčko. Číslo představuje počet kvadrantů (tj. čtvrtin otáčky), o kolik se musí Lucka otočit proti směru hodinových ručiček od nulového úhlu (nulový úhel odpovídá směru doprava).
Nejdříve se tedy Lucka otočí na minulé
políčko. Následujícím příkazem přenese předmět z
minulého políčka na políčko, na kterém stojí. Tím posune
článek hada o krok vpřed. Dalším příkazem zapne přepínač 1 .
Řekli jsme si, že přepínačem 1 budeme indikovat nejen zeď,
ale i článek hada. Posledním příkazem popojde Lucka o krok
vpřed, to znamená na další políčko hada směrem k jeho
konci.
Po vykonání všech průchodů cyklem zůstane Lucka stát na políčku za novým koncem hada. To platí i pro délku 0, kdy se neprovede ani jeden průchod cyklem. Následuje posun hlavy hada o krok vpřed a úschova směru na minulé políčko, jak jsme si obsluhu popsali dříve. Vymažeme obsah políčka za koncem hada prázdným políčkem (provede Lucka) a vypneme příznak, že je na políčku článek hada. V případě nalezení jídla nebo jedu na políčko později doplníme nový článek hada.
Had je posunut. Teď si povšimneme obsahu
políčka na nové pozici hlavy hada. Nejdříve vyzkoušíme,
je-li na políčku jídlo. Jídlo jsme si označili přepínačem
3, budeme tedy testovat přepínač
3 . Obsluhu jídla vidíte zde na obrázku:
Je-li na políčku jídlo, vymažeme jídlo
položením prázdného políčka a vypneme přepínač 3. V číselné proměnné políčka 1 máme
uschováno číslo jídla ze seznamu jídel. Převezmeme tedy číselnou hodnotu 1 políčka a použijeme ji jako index jídla,
abychom získali článek hada, který k nalezenému jídlu
patří. Vezmeme ze seznamu článek hada a položíme ho na
pozici s Luckou. Jak víme, Lucka zůstala stát na políčku za
koncem hada, před chvílí jsme tam prozatímně položili
prázdné políčko. Tím jsme vytvořili nový článek hada se
spolknutým jídlem. Ještě zapneme přepínač 1
jako příznak článku hada a zvýšíme čítač délky hada.
Na závěr můžeme přehrát zvuk polknutí a zobrazit novou
délku hada.
Obsluha nalezení jedu je podobná. Vidíte ji na obrázku níže. Jak víte, jed označujeme přepínačem 2. Zjistíme-li tedy testem přepínače 2 nalezení jedu, opět nejdříve vymažeme políčko položením prázdného předmětu a vypneme přepínač 2. Provedeme obsluhu podobně jako při běžném jídle. Nový článek hada použijeme vždy stejný, nezávislý na nalezeném jedu. Opět zapneme na pozici Lucky přepínač 1 jako indikátor článku hada, zvýšíme délku hada, přehrajeme zvuk polknutí a zobrazíme novou délku. Vše zakončíme smrtí hada.
Naším posledním úkolem bude vytvoření funkce pro obsluhu smrti hada. Obsah funkce vidíte na dalším obrázku.
Nejdříve je uchována dosažená délka hada jako nové maximální skóre. Po kratičké pauze se ozve zvuk zasípění. Smrt budeme indikovat postupným překreslením všech článků hada na články s lebkou. Po překreslení a krátké pauze články hada vymažeme (znázorníme tak odumírání hada). Opět následuje krátká pauza a zahájí se nová hra.
Po zahájení hry je důležité doplnit příkaz vyprázdnění zásobníku kláves. Často se stává, že hráč v zápalu hry mačká klávesy i během ukončování hry. Tak by si mohl nechtěně odstartovat další hru.
Následující obrázky ukazují obsluhu překreslení článků hada na smrt a vymazání článků hada. Opět využíváme uschované směry na předchozí políčko v číselné hodnotě 2 políčka. Provádíme přitom animaci otáčení hlavy hada (hadovi se motá hlava), v prvním případě proti směru hodinových ručiček, v druhém případě obráceně.
Přece jen zbývá ještě jedna poslední věc - ikonka programu, tak jak bude vypadat při zobrazení v seznamu souborů. Vyberte ikonku hlavní funkci (s názvem Had) a tlačítkem Ikona ji upravte - například do ní zkopírujte hlavu hada. Ikona hlavní funkce se v systému zobrazí jako ikona programu.
Teď již můžete program spustit a vyzkoušet. Přeji mnoho zábavy u vaší první opravdové hry.
9. Jak nakrmit hada (1. část) <<< Obsah >>> 11. Začínáme s grafikou