Ovládání klávesnicí
Zůstaneme ještě u programu Cesta z minulé kapitoly. Program upravíme tak, abychom Petříka v bludišti ovládali klávesnicí namísto aby hledal cestu sám. Budeme zkoušet více metod ovládání, necháme si je všechny v programu uschované pro možnost porovnání. Uschováme si i metodu, ve které Petřík hledá východ sám.
Přetáhněte do hlavního cyklu programu ze skupinky
řízení programu prvek
skupina
. Prvek skupina nic nedělá, slouží
jen ke shluknutí úseku programu do jednoho místa. Přemístěte do něj
všechny příkazy, které jsou nyní v hlavním cyklu: prvek otočení vpravo,
cyklus pro nalezení průchodného políčka a příkaz pro provedení kroku
(zachovejte původní pořadí prvků). Skupinu sklapněte a připište k ní
poznámku Petřík jde sám. Tím jsme si metodu automatického
vyhledání východu uschovali do jedné skupiny, aby se nám "nepletla
dohromady" s ostatními metodami, které budeme vytvářet. Zkuste program pro
kontrolu spustit. Měl by fungovat stejně jako před úpravou.
Skupinu vyberte kliknutím myší na její ikonku. Na panelu nástrojů
zapněte tlačítko Vypnout . Skupina i
všechny prvky v ní zešednou. Tato funkce nám umožňuje vypínat části
programu pokud je zrovna v programu nepotřebujeme. Když program spustíte,
uvidíte, že Petřík pouze stojí v levém dolním rohu a nic se neděje.
Program se chová tak, jakoby tam skupina s příkazy vůbec nebyla.
Naši novou část programu budeme konstruovat uvnitř hlavního cyklu programu, hned pod předcházející skupinou. Využijeme nový konstrukční prvek
- vícestupňové


Vícestupňové větvení příkazů slouží k větvení programu na více částí v závislosti na hodnotě proměnné či výrazu. Obvyklým použitím je větvení podle číselné hodnoty. Později budeme větvení používat i pro jiné typy dat, jako například texty.
Prvek větvení obsahuje další čtyři prvky. Do prvního prvku,
pro hodnotu výrazu ,
vkládáme proměnnou či výraz, podle kterého se má větvení provést. My
sem umístíme prvek vstup klávesy (čeká na stisk)
, který
bude větvicí konstrukci předávat číselný kód stisknuté klávesy.
Následují dva spojené prvky - proveď příkazy v případě,
že a výraz je roven hodnotě
.
Jedná se o jednu větev větvicí konstrukce. Do prvku výraz je roven
hodnotě umisťujeme hodnotu, pro kterou budou příkazy ve větvi
provedeny. Větví může být libovolné množství, stejně tak testovaných
hodnot ve větvi může být libovolně. Celou větev proveď příkazy
v případě, že
zkopírujte ještě třikrát.
Máme teď čtyři větve větvicí konstrukce. Do testované hodnoty v
první větvi dáme ze skupinky ovládání
,
klávesnice
, klávesy
, řídicí klávesy
kód
klávesy nahoru
. Tato větev se provede při stisku klávesy
nahoru. Do příkazů větve
dáme příkaz pro krok. Budeme hlídat, aby
Petřík neprocházel přes zeď. Okraj plochy hlídat nemusíme, Petřík ven z
plochy neuteče. Namísto jednoduchého kroku použijeme podmíněný příkaz.
Do testu podmínky dáme porovnání předmětů zda je před Petříkem zeď.
Pokud ano
, nebude se dít nic. Pokud ne
,
Petřík udělá krok.
Do dalších tří větví uvedeme postupně jako testované hodnoty klávesy
vlevo , vpravo
a
dolů
a jako příkazy prvky vlevo
,
vpravo
a vzad
.
Posledním prvkem větvicí konstrukce je prvek jinak proveď
příkazy . Jak napovídá název, příkazy v této části
konstrukce se provedou tehdy, když testovaná hodnota nebude nalezena ani v
jedné z větví. V našem případě zde nebude nic.
Spusťte program. Petřík stojí v levém dolním rohu. Vyzkoušíte-li kurzorové klávesy (šipky), zjistíte, že se Petřík otáčí vlevo, vpravo, vzad a dělá krok vpřed. Můžete Petříka vodit bludištěm. Až dorazíte k východu, Petřík se otočí na vás a po stisku další klávesy program skončí.
Použitý způsob ovládání je ovládání typické pro auta. Používáme ho v případech, kdy potřebujeme pohybovaným objektem přesně otáčet do požadovaného směru, ale není tak důležitá rychlost pohybu po ploše (manipulovatelnost).
V případech, kdy je potřeba se rychle a snadno přemisťovat, použijeme následující způsob ovládání. Řídíme v něm ne otáčení postavy, ale popocházení ve směru šipky.
Zkopírujte pravým tlačítkem myši předešlou větvicí konstrukci
ještě jednou níže. Původní konstrukci vypněte tlačítkem
Vypnout . Novou konstrukci nazvěte ovládání Petříka
směry. Z větví vyhoďte příkazy pro otáčení vlevo, vpravo a
vzad.
První větev větvicí konstrukce (pro šipku nahoru) upravíme tak, aby se
Petřík otočil nahoru a udělal krok. Krok máme již připraven - kontroluje
se v něm, zda před Petříkem není zeď. Směr otočení Petříka nastavíme
pomocí prvku směr . Najdete
ho v rozšířených funkcích Petříka. Prvek vložte před podmínku k
provedení kroku Petříka. Jako parametr připojte prvek nahoru (1/2
pi, tj. 90 stupňů)
, je ve skupince výpočty
,
podskupince úhel, směr
. Je to
číselná konstanta mající hodnotu pi/2, neboť úhly se v
Petrovi měří v radiánech.
Vytvořte příkazy pro nastavení směru i v ostatních větvích větvicí konstrukce, směry změňte odpovídajícím způsobem podle směrů kláves. Příkaz pro opatrné provedení kroku bychom mohli zkopírovat z první větve, ale jak už jsme si řekli dříve, rozkopírování kódu je neprogramátorské. Raději použijeme funkci.
Co je funkce? Funkce je prvek, který obsahuje část programu. Namísto vícenásobného výskytu shodné části programu použijeme vícekrát funkci, která potřebnou část programu vykoná. Program se zpřehlední a budou se nám snáze provádět změny.
Novou funkci vytvoříme přetažením prvku funkce z pole
Knihovna proměnných a funkcí do pole Společné
proměnné a funkce. Funkci pojmenujte Opatrný krok
vpřed. Když dvakrát kliknete na ikonku funkce, objeví se prázdné
editační okno. Funkce zatím neobsahuje žádné příkazy.
Mohli bychom teď ve funkci vytvořit příkaz pro krok, ale my si to
usnadníme, protože máme tento příkaz již v programu vytvořený.
Přepněte se zpět do hlavní funkce programu (tlačítkem Předešlá
editace ) a najděte podmíněný příkaz s testem zdi a krokem
vpřed (je ve větvi pro šipku nahoru). Kliknutím na ikonku podmíněný
příkaz označte. Klikněte na tlačítko Kopie
(nebo na
klávesnici stiskněte Ctrl+C). Označený prvek programu
(včetně připojených prvků) se uschová do schránky k přenášení
dat.
Vraťte se do funkce Opatrný krok vpřed (tlačítkem
Následující editace ).
Klikněte na tlačítko Vložit
(nebo
stiskněte Ctrl+V). V okně se objeví přenášená část
programu.
Teď již můžeme z větve pro šipku nahoru podmíněný příkaz vyhodit a nahradit ho funkcí pro opatrný krok. Doplníme ji i do ostatních větví za příkazy nastavení směru.
Program můžete spustit a vyzkoušet. Jak vidíte, Petřík teď popojde o krok ve směru stisknuté klávesy šipky.
Do třetice všeho dobrého si vyzkoušíme ještě jednu metodu ovládání,
kterou budeme používat u složitějších a dokonalejších her. Možná jste
si všimli, že držíte-li u předešlých dvou metod chvíli klávesu,
Petřík se pohybuje i potom, co jste již klávesu dávno pustili. Příčinou
je rychlejší generování kódů držených kláves, než je schopen Petřík
popocházet, a tak se klávesy uchovávají v zásobníku kláves. Jistým
řešením je příkaz vyprázdnění zásobníku kláves , který
zruší klávesy uchované v zásobníku kláves. Použijeme ho vždy na
začátku každé obsluhy platného znaku z klávesnice před provedením kroku
Petříka.
Další nectnost, která nám může u předešlých dvou metod ovládání vadit, se projevuje při ovládání rychlých dějů nebo při jemném grafickém ovládání. Zkuste si v nastavení sprajtu Petříka změnit počet fází na krok na 1 (po zkoušce vraťte zpět na 8). Petřík bude rychle přeskakovat po políčkách. Když na delším volném úseku klávesu chvíli podržíte, Petřík poskočí nejdříve o políčko, chvíli čeká a až pak začne rychle přeskakovat na další políčka. Příčinou tohoto jevu je způsob generování znaků klávesnicí - prodleva po první klávese a potom opakování. Při psaní textů je tato vlastnost užitečná, ale při hraní her nám může trochu vadit.
Náš požadavek na ovládání klávesnicí je, aby se Petřík pohyboval
vždy, když držíme klávesu. Bez úvodních prodlev a bez setrvačnosti po
uvolnění klávesy. K tomuto účelu slouží funkce je stisknuta
klávesa ze skupinky klávesnice
.
Funkce otestuje požadovanou klávesu, zda ji uživatel drží, a navrátí
příznak ano/ne.
Nejdříve opět vypněte předešlou metodu tlačítkem
Vypnout . Pod ni připravte prvek podmíněné provedení
příkazů
. Můžete ho nazvat třeba ovládání držením
kláves. Do testu podmínky platí-li, že
vložte prvek je stisknuta klávesa
,
jako parametr k němu připojte klávesu nahoru
. Do
větve platnosti podmínky potom proveď
vložte
příkazy pro popojítí nahoru, tak jako u předešlého typu ovládání.
Konstrukci teď čteme: "Je-li držena klávesa nahoru, potom se otoč
nahoru a opatrně popojdi o krok, jinak pokračuj testem dalších
kláves."
Ve větvi neplatnosti podmínky jinak proveď
vytvořte stejnou konstrukci znovu, tentokrát ale pro směr vlevo. V její
větvi neplatnosti podmínky vytvořte obsluhu směru vpravo a nakonec vytvořte
obsluhu směru dolů. Do větve neplatnosti podmínky v obsluze směru dolů
(tedy úplně poslední větev) vložte příkaz čekání (bez zadání
= 0.05 s)
, najdete ho ve skupince řízení
programu
. Značka malého rovnítka
před
ikonkou čekání indikuje nepovinnost parametru příkazu, žádný parametr
nemusíme doplňovat, použije se implicitní hodnota 0,05 sekundy.
Proč příkaz čekání? Operační systém Windows je víceúlohový. To znamená, že současně může být v chodu více programů. Každý program by měl zajistit, aby zbytečně nespotřebovával výkon počítače, když to nutně nepotřebuje. Známkou dobrého programátora je slušné chování jeho programů v prostředí, ve kterém poběží. Když by uživatel žádnou klávesu nestiskl, smyčka programu by jela neustále dokola velkou rychlostí. Program by se tvářil jako nečinný, ale přitom by jel na plné obrátky. Ti zkušenější si mohou spustit systémový program Sledování systému a sledovat zatížení procesoru. Program neberoucí ohled na své okolí zabírá téměř celý výkon počítače a počítač se tak stává těžce ovladatelný.
Na obrázku vidíte hotovou obsluhu ovládání Petříka. Části pro obsluhu kroku v daném směru jsou sklapnuty, známe je již z předešlého ovládání.
Nevýhodou takového dlouhého řetězce podmínek je, že může být na první pohled nepřehledný. Ukážeme si ještě jinou možnost stavby podobné konstrukce, i když nutno říct že méně používanou a svým způsobem neobvyklou (běžné programovací jazyky neumožňují vícenásobné větvení podle jiných typů dat než číselné konstanty).
Vypněte naši poslední variantu tlačítkem Vypnout .
Zkopírujte si znovu variantu ovládání Petříka směry a
přejmenujte ji na ovládání držením kláves 2.
Podmínková konstrukce pracovala tak, že se provedla právě jedna z větví v
závislosti na stisknuté klávese. Z prvku pro hodnotu výrazu
zrušte funkci vstupu z klávesnice a nahraďte ji prvkem
ano
(ze skupinky výpočty
,
logické operace
).
V testovaných hodnotách jednotlivých větví postupně nahraďte kódy
kláves kombinacemi prvku je stisknuta klávesa a
kódu klávesy. Postupujte následovně: Kliknutím myší na ikonu kódu
klávesy prvek kódu klávesy vyberte. Stiskem tlačítka
Vyjmout
(nebo z klávesnice Ctrl+X) přesuňte
prvek kódu klávesy do schránky. Na jeho původní místo vložte prvek
je stisknuta klávesa
.
Vyberte ho myší a stiskněte tlačítko Vložit
(nebo z
klávesnice Ctrl+V). Kód klávesy se připojí k testu stisku
klávesy. Závěrem doplňte do prvku jinak proveď příkazy
prvek čekání (bez zadání = 0.05 s)
, jinak
by program ve volných chvílích přetěžoval chod počítače.
Hotovou konstrukci vidíte na dalším obrázku (pro přehlednost jsou příkazy pro pohyb sklapnuty ve skupinách). Jak funguje? Program při svém chodu na začátku zjistí, že ve větvích bude testována logická hodnota platnosti. Prochází jednotlivé větve a hledá stejnou hodnotu, tedy platnou podmínku. Příkazy v nalezené větvi provede a pokračuje až za celou konstrukcí vícestupňového větvení příkazů, dalších případných splněných podmínek a větví si již nevšímá. Jinak řečeno, vykoná se první (a jediná) větev se splněnou podmínkou (stisknutou klávesou), jinak se vykoná až poslední z příkazů - čekání.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 404x (130.28 kB)
Aplikace je včetně zdrojových kódů v jazyce Petr (jsou obsaženy v EXE souboru, který lze v programu přímo otevřít)