Píšeme textovku na Atari v Basicu – parser
Minule jsme si psali o objektech a lokacích, pokud jste nečetli, tak odkazy jsou někde kolem. V dnešní lekci si probereme parser, tak aby rozuměl našim příkazům. Není to zrovna jednoduchá věc a spousta začátečníků v psaní parseru dělá kardinální chybu, s tímhle nešvarem se setkávám skoro dnes a denně a já jsem v začátcích nebyl jiný.
Názorný příklad, třeba u Prudent Dactyla, autor hry používá jednoduché podmínky a ze vstupu testuje celý textový řetězec, což hráče vede k zoufalství a značné obtížnosti hry, neboť musí zadávat příkazy celé.
U Chrámu Zkázy je to jiné, tam se vezme vstup textového řetězce a naporcuje se na podstatné jméno a sloveso, vezmete prostě vstupní řetězec a najdete v něm mezeru, pro jednoduchou textovku v Basicu pro Atari nám bude stačit forma zadání příkazů „seber bobuli“ nebudeme řešit tedy řešit „seber zelenou bobuli“, i když i tohle se dá ošetřit.
Vstupní řetězec si rozdělíme do dvou proměnných, třeba A$ a B$, nebo NOUN$ a VERB$. Jak je vám libo.
Nejdřív si identifikujeme sloveso, které bylo zadáno. Malá poznámka na závěr, jsou tací a já nebyl jiný, kteří řetězce řežou na první tři znaky. Je to zbytečnost, za chvilku si povíme proč. V další ukázce máme seznam příkazů v datových řádcích jsou dokonce dva stejné, skoro identické, v jednom je seznam příkazů bez diakritiky a ve druhém s diakritikou. Ty s tou diakritikou jsou jen pro potěšení hráče, kdy napíše příkaz slovník a hra mu vypíše dostupné příkazy. Nás zajímají ty bez té diakritiky.
Jednoduchá smyčka, bude načítat daná data a kontrolovat, jestli je shoda se zadaným objektem. Máme? Jenže je tu jedna otázka, například máme příkaz „prozkoumej“, co se ale stane, když hráč napíše jen „prozko“, smyčka nevyhodnotí shodu a napíše hráči, že zadal neznámý příkaz. No není nic jednoduššího, když budeme testovat řetězce z dat na stejnou délku jakou má zadané sloveso. Takže hráč může napsat „pro“ a daná smyčka vyhodnotí příkaz jako prozkoumej, super, nemusíme nic řezat, nic upravovat. Po správném vyhodnocení slovesa, si uložíme číselnou proměnnou A nebo chcete VERB, v našem příkladě má příkaz prozkoumej číselnou hodnotu 6, všimněte si, že příkaz „zkoumej“ bude mít hodnotu číslo 7. Nám to ale nevadí, za chvilku si povíme proč. Mimochodem, naše smyčka začíná s počítadlem na hodnotě 0. Ale nejdříve půjdeme vyhodnotit podstatná jména, eh, možná i ta přídavná.
Objekty už máme zadefinované z minulé lekce, pak se tedy obrátíme na testování a hledání čísla objektu v datech objektů, pro lepší názornost přikládám obrázek.
Napíšeme si smyčku, načítáme data v našem případě musíme testovat dvakrát, neboť náš engine používá i přídavná jména a jakmile máme shodu, uložíme si číslo objektu do proměnné OBJEKT, nebo VERB, jak je libo.
Je nad slunce jasné, že pokud pracujeme s jednoslovným příkazem, tak nebudeme hledat objekty, rovnou se vrhneme na vykonání příkazu.
Máme číslo VERB, nebo hodnotu A, rozhodnutí je na vás, pak jednoduchým příkazem provedeme skok na daný řádek v naší ukázce, tj. GOTO A+950, tudíž máme příkaz „prozkoumej“ ten má hodnotu 6 a 950+6 je 956, skok na řádek 956 neprovede nic, neboť je to jen REM a pokračuje ve vykonání příkazů na řádek 957 kde je další odskok na řádek 4000, kde už vesele kontrolujeme a testujeme, jestli daný objekt je možno v dané lokaci prozkoumat a popřípadě rovnou vypsat text a provést změnu herní situace.
Příště si povíme něco bližšího o akcích z daných příkazů. Bude následovat seznam triků a pak si projdeme demo hru.
Předchozí články jsou po na kliknutí k dispozici na následujících odkazech
https://panprase.cz/clanek/piseme-textovku-na-atari-v-basicu-lokace/
https://panprase.cz/clanek/piseme-textovku-na-atari-v-basicu-objekty/
Na zváženie pridávam kontrolu preklepov https://txt.pohroma.de/2020/04/03/porovnavanie-retazcov/