Ovládání klávesnicí

Ostatní jazyky Petr Lite Políčková grafika 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ětvení příkazů (mezi programátory někdy označován jako "hrábě"). Najdete ho ve skupince řízení programu . Položte ho do hlavní smyčky pod skupinu Petřík jde sám.

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 (manipulovatel­nost).

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ženo 390x (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)

 

  Aktivity (1)

Článek pro vás napsal Panda38
Avatar
Programátor C++, WinAPI, ASM.

Jak se ti líbí článek?
Celkem (2 hlasů) :
4444 4


 


Miniatura
Předchozí článek
Petr v bludišti
Miniatura
Všechny články v sekci
Políčková grafika
Miniatura
Následující článek
Samá příšera

 

 

Komentáře
Zobrazit starší komentáře (5)

Avatar
ADAMNAICLER
Člen
Avatar
ADAMNAICLER:

Mám stejný problém.A taky problém z předchozích tutoriálů zjistit co je to ten hlavní cyklus.

 
Odpovědět 24.11.2012 17:30
Avatar
ADAMNAICLER
Člen
Avatar
ADAMNAICLER:

Prominte že to píšu dvakrát.

 
Odpovědět 24.11.2012 17:32
Avatar
ADAMNAICLER
Člen
Avatar
ADAMNAICLER:

Tak dělejte odpovězte mi někdo!Hodinu tu čekám.

 
Odpovědět  -10 24.11.2012 18:39
Avatar
matesax
Redaktor
Avatar
Odpovídá na ADAMNAICLER
matesax:

To je tak těžké stáhnout si přiloženou ukázku? Jasně tam je hlavní cyklus - bez kterého se vše provede jen jednou... Proto je třeba program zacyklit...

 
Odpovědět 24.11.2012 18:52
Avatar
misko.lenko
Člen
Avatar
misko.lenko:

Ako ten stiahnuty súbor dám do Petr lite ?

 
Odpovědět 26.6.2013 19:13
Avatar
Panda38
Redaktor
Avatar
Odpovídá na misko.lenko
Panda38:

Rozbalit "7_cesta.exe" do Petrovy složky PROGRAM, tj. zpravidla "C:\Program Files\Peter\PROG­RAM\". Po spuštění Petra se ten program objeví v seznamu programů.

 
Odpovědět 28.6.2013 14:10
Avatar

Člen
Avatar
:

V případě, že někdo tento program bude zkoušet, tak zde není úplně dobře vysvětlena jedna podstatná věc. Zkopírujete si Cesta (z minulého dílu), smažete vše, co je pod opakuj příkazy a pak budete postupovat dle zdejšího návodu.

 
Odpovědět 21.10.2014 18:40
Avatar
rybiz
Člen
Avatar
rybiz:

No začal jsem s programováním dnes a už mám pro dítě vlastní bludiště, je mi teda 38 ale chtěl jsem začít programovat už dávno. Na stará kolena :-) občas jsou tam věci u kterých musím pátrat při vysvětlování ale hold když to přečtu 5x tak mi to teda docvakne :-)

 
Odpovědět 26.10.2014 19:04
Avatar
rybiz
Člen
Avatar
rybiz:

Všiml jsem že když držím šipku doleva nebo doprava a k tomu zmáčknu šipku nahoru tak mi to krok nahoru udělá a pak pokračuje šipkou do stran ale když zmáčknu šipku dolů za držení šipek do stran tak se nestane nic.

 
Odpovědět 26.10.2014 19:09
Avatar
jargry
Člen
Avatar
Odpovídá na rybiz
jargry:

Zamysli se nad tím, co to dělá.
Je to napsané v tom tutoriálu skoro na konci :

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á.

V nalezené větvi můžeš mít i více podmínek, což si málokdo ze začátku uvědomí.

 
Odpovědět 26.10.2014 21:35
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 15. Zobrazit vše