Rudolf Rosa Lóra - Dokumentace zápočtového programu

Lóra - Dokumentace zápočtového programu

Program je textovým herním prostředím pro Kladenskou karetní hru Lóra. Umožňuje společnou hru jednoho lidského a tří počítačových hráčů s jistou dávkou umělé inteligence.

Programátorská část

Program je napsán v jazyce Pascal, ve Freepascalském dialektu. Celý zdrojový text je umístěn v souboru LORA.pas, nedílnou součástí je soubor s pravidly Lóry lora-pravidla.htm, což je kopie souboru http://www.volny.cz/petasites/Pravidla_Lory.htm. Program se striktně drží těchto oficiálních pravidel (jedinou výjimkou je hra harakiri, která pro své minimální využití nebyla implementována).

Program je poskládán z mnoha procedur a funkcí, hlavní program plní roli zavaděče a hlavního cyklu (pro každou dílčí hru). Předávání dat do procedur je typicky přes globální proměnnou. (V tomto případě je to vhodné z důvodu velkého množství informací, které je potřeba předávat.) Globální proměnné tak tvoří jakýsi globální interface. Proměnné s pouze lokálním významem pro danou proceduru jsou typicky deklarovány lokálně. Veškeré výstupy do konzole jsou zajišťovány procedurami vypisZpravu, vypisKarty, writeKarta a doplnMezerami. Modifikací těchto procedur a některých konstant je tedy možné upravit všechny výstupy programu. Vstup od živého hráče je přijímán přes konzoli, pomocí kláves 09 (resp. 08) a je zpracováván procedurou readNumberChar (resp. CekejNaStisk).

Karty jsou reprezentovány čísly od 0 do 31, číslo karty div 4 je "typ" karty (7, 8, 9, 10, spodek, filek, král, eso – odpovídá číslům 07), číslo karty mod 4 je barva (červené, kule, zelené, žaludy – odpovídá číslům 03). Karty jsou ukládány dvojmo - do polí a do množin (název množinové konstanty nebo proměnné vždy končí M), protože se někdy víc hodí to a někdy zase ono. Množiny jsou využívány zejména pro rozhodování, zda karta nebo skupina karet někde je nebo není (např. zda má hráč nějakou kartu dané barvy, zda daná karta již byla vynesena či nikoli...), aby nebylo třeba stále procházet různá pole. Reprezentace v poli se využívá zejména pro manipulaci s jednotlivými kartami a pro operace nad každou kartou (například obodování v umělé inteligenci nebo posouzení vynesitelnosti), neboť pascalská implementace množin není na takové operace vhodná. Každopádně pokud dojde k přesunu karty (typicky při jejím vynesení), jsou upravena jak pole, tak množiny.

Během hry, když má dojít k výnosu karty, počítač vždy podle pravidel hry posoudí vynositelnost jednotlivých karet, které má hráč v ruce (Rozdani[Hrac]) a karty, které smí hráč vynést, umístí do pole KartyVynesitelne. Poté je proveden výběr karty (za počítač hraje procedura UI) a je provedeno přihození karty.

Skóre (trestné body) se sčítá na několika úrovních. Během hry se průběžně oboduje každý štych – mohou být přiděleny body buď za karty ve štychu obsažené (červené, filky, bedrník), nebo může být trestný štych jako takový (první-poslední, všechny). Body se sčítají do proměnné SkoreStych. U her desítky a kvarty je to poněkud jinak (body jsou za karty, které hráči zůstanou v ruce na konci hry, u desítek navíc jeden bod za každou situaci, kdy je hráč na řadě, ale nemůže zahrát žádnou kartu). Pro jednotlivé hráče se v průběhu dílčí hry nasčítává skóre za hráčem sebrané štychy do pole SkoreHra, indexovaného číslem hráče (tedy 03). Po každé dílčí hře se pak toto skóre připočítá k hodnotám v poli SkoreCelkove (kromě případu, kdy hráč nesloží maturitu – pak dostává 8 bodů a ostatní hráči žádný, bez ohledu na průběh hry).

Umělá inteligence je řešena vyhodnocením herní situace a následným obodováním vynesitelných karet podle vhodnosti jejich vynesení. Například: je-li ve štychu trestná karta, snaží se hráč hrát tak, aby jej nemusel vzít. Pokud ale vidí, že je to již nevyhnutelné, pokusí se alespoň zároveň zbavit některé ze svých nepříjemných karet (na trestných, ale třeba příliš vysokých). Každá hra má více či méně odlišná pravidla vyhodnocování situace; hry desítky a kvarty se hrají zcela jinak a mají tedy UI zcela zvlášť (a také dle mého názoru nejkvalitněji provedenou, ať už soudě podle pravidel pro ohodnocení karet nebo podle úspěšnosti při testování). U umělé inteligence jsem vycházel především z vlastní herní zkušenosti, ovšem s tím, že počítač si (na rozdíl od běžného lidského hráče) pamatuje veškeré vynesené karty.

Zdrojový kód i komentáře jsou psané česky v kódování CP852 - tak aby na OS Windows typicky fungovala správně diakritika. Zároveň přikládám soubor LORAbd.pas, což je zdrojový kód bez diakritiky (jinak je zcela totožný s LORA.pas). Názvy identifikátorů jsou voleny tak, aby co nejlépe vystihovaly jejich význam (i za cenu někdy velmi dlouhých názvů), jen někdy jsou voleny názvy obecnější (i, temp, …), zejména v případě, kdy mají pouze lokální význam. Komentáře se snaží popisovat funkci každé procedury, funkce nebo bloku kódu; dále popisují význam některých identifikátorů.

Zejména pro účely ladění program během svého běhu vytváří textový soubor lora.log s kopií některých výpisů na obrazovku. Jeho formátování není zcela ideální, přesto umožňuje bez větších problémů zpětně rekonstruovat průběh celé hry. Dále je k dispozici konstanta LADENI, která, je-li nastavena na true, poskytuje některé zajímavé informace (zejména výpis karet všech hráčů a bodové ohodnocení karet procedurou UI). Další podobnou konstantou je ZIVYHRAC - umožňuje, aby za živého hráče hrál počítač (náhodně nebo pomocí UI). Také je k dispozici procedura ok, která nedělá nic jiného, než že na místě zavolání vypíše do konzole text „ok“. Hodí se pro zjištění cesty běhu programu, případně pro zjištění, kam až se program dostal, než zhavaroval (takže by již pravděpodobně neměla být potřebná).

Program je koncipován jako opensource a jeho finální verze bude zveřejněna na internetu.

K tvorbě a ladění programu byl použit freeware textový editor PSPad a kompilátor Free Pascal Compiler. Pravdila Lóry jsem čerpal z oficiální stránky Klubu Petasites (organizátora Národního mistrovství v Lóře). Dokumentace byla napsána v programu OpenOffice.org Writer.

Internetové zdroje


Uživatelská část

Hra se spustí spuštěním souboru LORA (typicky LORA.exe).

Program se ovládá klávesami s čísly 09 podle pokynů na obrazovce. Pokud takové pokyny nejsou zobrazeny, znamená to, že program čeká na Vaše potvrzení, než bude pokračovat v běhu – pravděpodobně čeká, až si prohlédnete informace o průběhu hry zobrazené na obrazovce. V takovém případě můžete stisknout pro pokračování (téměř) libovolnou klávesu – např. Enter, mezerník, nebo některou z číslicových kláves.

Program Vám vždy nabídne pouze takové možnosti, které jsou v souladu s pravidly.

Vítězem hry se stává hráč s nejnižším počtem získaných bodů. Pokud se některý z hráčů rozhodl nahlásit čistou stovku, stává se vítězem hry, pokud má na konci Lóry přesně 100 bodů; pokud má jiný počet bodů, stává se naopak hráčem posledním.

Význam jednotlivých značek použitých pro zobrazení karet

Další informace

Pro další informace o pravidlech Lóry dopručuji prostudovat přiložený dokument:

lora-pravidla.htm

případně jeho potenciálně aktualizovaný originál na adrese:

http://www.volny.cz/petasites/Pravidla_Lory.htm

© 2008 Rudolf Rosa <rur@seznam.cz>, 1. ročník, zimní semestr, programování (IP), prezenční bakalářské studium
Matematicko-fyzikální fakulta Univerzita Karlova v Praze