Mariáš pro čtyři hráče

Podobné dokumenty
Martin Heni Eugene Trounev Kontrolor: Mike McBride

BRIDGE. 7 zdvihů 1 trik 8 zdvihů 2 triky 9 zdvihů 3 triky 10 zdvihů 4 triky 11 zdvihů 5 triků 12 zdvihů 6 triků 13 zdvihů 7 triků

Obecná pravidla hry mariáš

Dobble HRA PLNÁ DIVOKÉ ATMOSFÉRY A RYCHLÝCH REFLEXŮ 2 AŽ 8 HRÁČŮ DOPORUČENÝ VĚK 6 A VÍCE LET. Pravidla

Základy umělé inteligence

Karty Prší. Anotace: Abstract: Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek

Od Uwe Rosenberga Pro 2 až 5 hráčů od 10 let, 40 minut

Teorie her a ekonomické rozhodování. 7. Hry s neúplnou informací

Piškvorky. Gymnázium, Praha 6, Arabská 16. Kristofer Filip, 1.E. Květen Stránka 1. předmět programování, vyučující Tomáš Obdržálek

skoro Bridž aneb, na půl cesty k bridži Příručka základů hry pro školní workshopy

40 označovacích kamenů vždy 10 v červené, oranžové, černé, modré barvě. 7 slonů 3 lvi 6 normálních 1 super

NÁVOD. SPOJUJ SLŮVKA téma: DŮM. vzdělávací hra ve 2 variantách od 7 let

Materiál pro kurz pro mírně pokročilé PRABRA. V bridži existuje celá řada číselných pravidel jedním z nich je tzv. Pravidlo jedenácti.

Hra pro 2 10 hráčů od deseti let. OBSAH HRY CÍL HRY

====== ZAČÁTEK UKÁZKY ======

Algoritmy pro práci s neúplnou informací

Legendary Inventors. Komponenty. 20 karet vynálezců a 33 startovních žetonů znalostí:

Metoda Monte Carlo a její aplikace v problematice oceňování technologií. Manuál k programu

Gymnázium, Praha 6, Arabská 14. předmět Programování, vyučující Tomáš Obdržálek. Počítačová hra Fotbalový Manažer. ročníkový projekt.

Habermaaß-hra Chutná nebo nechutná?

Teorie her a ekonomické rozhodování. 4. Hry v rozvinutém tvaru

PRAVIDLA HRY. Loris Games, s.r.o. Všechna práva vyhrazena.

Herní plán QUICK PAY JACKPOTS

ODDVILLE hra pro 2 4 hráče od 10 let

Habermaaß-hra 8679A /4716N. Hrad Strašidlákov karetní hra

Úvodem... 9 Kapitola 1 Karetních

Úvod do počítačových sítí

Herní plán. Hot as Hell

Princes of Florence - Pro Ludo

KACÍŘI a bitva o Evropu

Algoritmy pro hraní tahových her

Habermaaß-hra Terra Kids Země světa

Rozšířený obchod. Náhrada za slabý list (karty v ruce)

CÍLOVÝ KONCEPT. Ghoul Wars. pro. Jihočeskou univerzitu Pedagogickou fakultu Předmět: TDSA

Dokumentace programu piskvorek

Obslužný software. PAP ISO 9001

Algoritmus Minimax. Tomáš Kühr. Projektový seminář 1

Před první hrou setřiďte karty podle přiloženého pořadníku do drážek v krabici. 500 karet 130 karet peněz Název

Základy umělé inteligence

HERNÍ PLÁN IVT SYNOT

Pravidla hry Joker. jméno jméno jméno jméno Součet zbylých karet v prvním kole

Herní plán BREAK THE BANK

2. Řešení úloh hraní her Hraní her (Teorie a algoritmy hraní her)

Materiál. 4 hodnotící karty 1 karta hracích kol 4 tužky. 100 křížů pokladů Počet hráčů: 2-4 Věk: od 8 let Herní doba: okolo 20 min.

Hrací karty. Jedna hra, tisíc zážitků

Uwe Rosenberg 2006 NOMINACE

TÉMATICKÝ OKRUH Softwarové inženýrství

Hraní her. (Teorie a algoritmy hraní her) Řešení úloh hraní her. Václav Matoušek /

LEGOeducation.com. LEGO Education Předškolní věk. Hry s postavičkami ze souprav: Lidé různých povolání Pohádkové postavy

Varianty Monte Carlo Tree Search

Habermaaß-hra Nešikovná čarodějnice

PRAVIDLA: ÚROVEŇ 4 BALÍČEK VS BALÍČEK

Nile deluxor PŘEDSTAVENÍ HRY OBSAH KRABICE

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY ROČNÍKOVÝ PROJEKT KLOKAN. Informatika, II. ročník

Napínavé letecké závody pro dva chytré havrany od 10 let

ZPRACOVÁNÍ NEURČITÝCH ÚDAJŮ V DATABÁZÍCH

The Mind. Wolfgang Warsch Pro profesionální telepaty! hvězdice vrhací hvězdice. Bílé (1-50) Červené (1-50)

Úvod Game designer Struktura hry Formální a dramatické elementy Dynamika her Konec. Úvod do game designu 1 / 37

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

Habermaaß-hra 3615A /4714N. Kartová hra Najdi správný pár

Věc: Rozšířené stanovisko Ministerstva financí k tzv. Kvízomatům

VYUŽITÍ PRAVDĚPODOBNOSTNÍ METODY MONTE CARLO V SOUDNÍM INŽENÝRSTVÍ

RED GAMES MOD elektronik, s.r.o., Bělisko 1386, Nové Město na Moravě

Hrací karty Čte-Sy-Rád

Habermaaß-hra 5432A /4795N. Koláček nebo král

Emotion Technická charakteristika

Měření průtoku kapaliny s využitím digitální kamery

BLUE GAMES MOD elektronik, s.r.o., Bělisko 1386, Nové Město na Moravě

Možné umístění karty. V tomto příkladu je pět možných míst, kam je možné umístit kartu Člověk.

TESTOVÁNÍ UŽIVATELSKÉHO ROZHRANÍ VIDEO PŘEHRÁVAČE VLC

Autor hry: Gary Kim. Ilustrace: Stephane Gantiz. Grafika: Ian Parovel. Překlad do angličtiny: Alexandre Figuiere

JAK HRÁT Petr Vojtěch Jindřich Pavlásek

Osadníci z Katanu. a Monte Carlo Tree Search. David Pěgřímek. MFF UK (2013) 1 / 24

PROJEKT MINY - DOKUMENTACE

BRIDŽ pravidla hry. Jedinečnost každé hry (existuje možných rozdání)

Od Uwe Rosenberga pro 2 až 5 hráčů od 10 let, 30 minut

Operační výzkum. Teorie her. Hra v normálním tvaru. Optimální strategie. Maticové hry.

Vlákno (anglicky: thread) v informatice označuje vlákno výpočtu neboli samostatný výpočetní tok, tedy posloupnost po sobě jdoucích operací.

Herní plán DIRTY MONEY

RA PLNÁ DIVOKÉ ATMOSFÉRY A RYCHLÝCH REAKCÍ 2 AŽ 8 HRÁČŮ DOPORUČENÝ VĚK 6 A VÍCE L

1. Dědičnost a polymorfismus

Martin Milata, Pokud je alespoň jeden rozměr čokolády sudý (s výjimkou tabulky velikosti 1x2, která už je od

návod ke hře GWINT Gwint je karetní hra pro 2 hráče, ve které se spolu na bojišti utkají dvě armády.

Neuronové časové řady (ANN-TS)

Anotace. Středník II!! programování her.

2. úkol MI-PAA. Jan Jůna (junajan)

B) EX = 0,5, C) EX = 1, F) nemáme dostatek informací.

BLUE GAMES 300 MOD elektronik, s.r.o., Bělisko 1386, Nové Město na Moravě

27-SEP-10. Black Cyan Magenta Yellow. CÍL HRY Jako první vytlačit šest. v tazích - své kuličky lze posunout. pole.

Cíl hry. Herní komponenty. Spielablauf. Hra od Donalda X. Vaccariniho pro 2 4 hráče od 8 let

Habermaaß-hra 4789A /4092N. Super nosorožec Rhino

INTERACTIVE GAMES 750 CZK

Herní plán AGE OF VIKINGS

[BAL-MLP] Multiplayer

strategická desková hra pro dva hráče

BALISTICKÝ MĚŘICÍ SYSTÉM

e erz vaná v aco rozpr

2 HRA V EXPLICITNÍM TVARU

Počet hráčů: 2 4 Věk hráčů: 10+ Doba hraní: min

Herní plán. Twin Win

Transkript:

České vysoké učení technické v Praze Fakulta elektrotechnická Bakalářská práce Mariáš pro čtyři hráče Marek Lipták Vedoucí práce: Ing. Miroslav Balík, Ph.D. Studijní program: Elektrotechnika a informatika strukturovaný bakalářský Obor: Výpočetní technika září 2007

ii

Poděkování Na tomto místě bych rád poděkoval Ing. Miroslavu Balíkovi, Ph.D., vedoucímu bakalářské práce, za cenné připomínky a rady, které mi velmi pomohly při vytváření této práce. Dále bych rád poděkoval všem svým blízkým za trpělivost a neutuchající podporu. iii

iv

Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č. 1/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon). V Praze dne 10.8. 2007.... v

vi

Abstract This work deals with analysis, design and implementation of computer game fourplayer marriage for one player, where the rest three players are under computer control. Major goal then was to create suitable algorithm describing just these artificial players. Abstrakt Tato práce se zabývá analýzou, návrhem a implementací počítačové hry mariáščtyřka pro jednoho hráče, kde ostatní tři hráči jsou ovládáni počítačem. Hlavním cílem pak bylo vytvoření vhodného algoritmu popisujícího právě tyto umělé hráče. vii

viii

Obsah Seznam obrázků... xi Seznam tabulek... xiii 1 Úvod... 1 2 Popis problému, specifikace cíle... 2 2.1 Pravidla mariáše pro čtyři hráče... 2 2.1.1 Obecná pravidla... 2 2.1.2 Zahájení hry... 3 2.1.3 Volba... 4 2.1.4 Schválení volby... 4 2.1.5 Typy her... 5 2.1.6 Flekování... 6 2.1.7 Placení... 7 2.2 Cíl bakalářské práce... 7 2.3 Rešerše existujících implementacích... 7 3 Analýza a návrh řešení... 8 3.1 Neúplná informace... 8 3.2 Metoda Monte Carlo... 8 3.2.1 Statistické vzorkování... 9 3.2.2 Selektivní vzorkování... 10 3.2.3 Výhody a nevýhody vzorkování... 10 3.2.4 Použití v mariáši... 10 3.3 Metoda minimaxu... 11 3.4 Alfa-beta prořezávání... 12 3.5 Iterativní prohlubování... 13 3.6 Herní model... 13 3.7 Volba implementačního jazyka... 17 4 Realizace... 19 4.1 Řízení aplikace... 19 4.2 Grafické uživatelské rohraní... 20 4.3 Herní model... 20 5 Testování... 22 6 Uživatelská příručka... 23 6.1 Instalace... 23 6.2 Herní obrazovka... 23 6.3 Menu... 24 6.4 Validace... 25 6.5 Minimální požadavky... 25 7 Závěr... 26 A Obsah přiloženého CD... 28 B Seznam literatury... 29 ix

x

Seznam obrázků Obrázek 3.1: Tradiční prohledávání... 8 Obrázek 3.2: Monte Carlo vzorkování... 9 Obrázek 3.3: Mariáš-čtyřka... 14 Obrázek 3.4: Volba... 15 Obrázek 3.5: Schválení volby... 16 Obrázek 3.6: Flekování... 17 Obrázek 4.1: MVC... 19 Obrázek 6.1 Herní obrazovka... 23 Obrázek 6.2 Volby v nabídce Nastavení... 24 Obrázek 6.3 Volba Hráči... 24 Obrázek 6.4 Volba AI... 25 Obrázek 6.5 Renonc... 25 xi

xii

Seznam tabulek Tabulka 2.1 Ohodnocení flekování... 7 xiii

xiv

KAPITOLA 1. ÚVOD 1 1 Úvod Název karetní hry mariáš je odvozen od francouzského mariage neboli svatby či manželství, symbolizovaných v kartách partnerstvím smutných králů a krásných královen (nepoeticky nazývaných filek), jejichž svazek má cenu dvaceti bodů, a někdy dokonce čtyřiceti, jedná-li se o barvu trumfovou. To je dobrý vklad do hry, a je doprovázen nejvyššími kartami ve hře, esy a desítkami, vytváří dobré předpoklady pro vítězství. A přece ten pravý půvab mariášové hry spočívá v tom, že obyčejná sedma nebo bezvýznamné osmičky, devítky i spodek jakkoli jinak bezcenné karty, mohou jako maličký opuštěný trumf zabít eso či desítku, nebo dokonce oboje, a rozhodnout tak vyrovnaný souboj ve prospěch zdánlivého outsidera. V tom je mariáš demokratický jako málokterá jiná hra. Mariáš je půvabná a nesmírně zajímavá a zábavná hra, která vyžaduje dobrou paměť, taktické i operativní schopnosti, smysl pro kombinaci a únosnou míru rizika. Mariáš je natolik obtížná hra, že je jí možno bezesporu přirovnat ke karetní hře bridž nebo dokonce i k šachu. Mariáše je několik druhů - ve dvou, lízaný či tahaný, volený, mariáš licitovaný a křížový. A právě křížový mariáš též čtyřka je předmětem této práce. Jsou sice tací mariášníci, kteří tvrdí, že jedině licitovaný mariáš je ten pravý, přitom ale mariáš ve čtyřech má své kouzlo, kterým se licitovanému mariáši plně vyrovná, nehledě k tomu, že licitovaný mariáš je hra hazardní. Ano, jediný z mariášů - čtyřka je hra, ve které jsou všechny karty ve hře, tudíž není hazardní hrou. Úkolem této práce bylo popsat pravidla mariáše pro čtyři hráče a poté provést analýzu, návrh a naprogramovat tuto hru pro jednoho hráče, který bude moci hrát proti třem počítačovým protivníkům. K úspěšnému zvládnutí bylo proto zapotřebí nejprve pochopit do podrobností pravidla hry, které jsem vyhledal jak v knihách, tak v příručkách uveřejněných na internetu a následně navrhnout celý systém včetně umělé inteligence hráčů.

2 KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE 2 Popis problému, specifikace cíle 2.1 Pravidla mariáše pro čtyři hráče Pravidla mariáše se mohou případ od případu v některých aspektech mírně lišit, proto zde uvadím pravidla, kterými jsem se řídil při návrhu aplikace. Při popisu pravidel jsem vycházel především z podkladů [4] a [5]. 2.1.1 Obecná pravidla Mariáš se hraje se 32 jednohlavými nebo dvouhlavými (a to hlavně na Moravě) mariášovými kartami. Tyto karty jsou rozděleny do čtyř barev: červené, zelené, žaludy, kule. Každá barva má osm karet: sedma (7), osma (8), devítka (9), desítka (10), spodek (Sp), svršek (F), král (Kr), eso (E). Určité skupiny karet mají také souhrnné názvy: plinery, honery (7), (8), (9), obrázky (Sp), (F), (Kr), valéry, ostrý (10), (E). Trumfy jsou zvolená barva, která je nadřazená ostatním a přebíjí karty ostatních barev. Eso je nejvyšší karta dané barvy, z toho plyne, že trumfové eso je absolutně nejvyšší karta, kterou nelze žádnou jinou kartou zabít. Štych či zdvih jsou čtyři karty vynesené postupně hráči, tzn. každý dal jednu kartu a jsou majetkem toho hráče, který dal kartu nejvyšší nebo nejvyššího trumfa. Tyto karty už nejsou dále ve hře. Při každé hře je zdivhů osm. Za uhrání posledního zdvihu se počítá deset bodů (nikoliv v betlu a durchu). Každý hráč si shromažďuje své zdvihy na hromádce před sebou. Král a svršek jsou-li v jedné ruce a v jedné barvě, nazývají se hláška, mariáš ( čtyřka, jedná-li se o trumfovou barvu). Renonc je porušení pravidel. Fleky jsou hlasitá oznámení, že hráči (hráč) v útoku, či hráči v obraně vyhrají hru (stovku, durcha či betla). Flekovat začíná strana v obraně, opět v pořadí, v jakém hráči sedí u stolu. Každá ze zúčastněných stran může dát jenom jeden flek a potom musí vyčkat, nedá-li soupeř větší flek, tedy re. Teprve potom si může opět dát flek větší tutti. Fleků může být maximálně šest. Stupnice fleků (od nejnižšího): flek re tutti boty kalhoty kaiser

KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE 3 Body se počítají za: Eso 10 bodů Desítka 10 bodů (jenom za ta esa a desítky ve svých uhraných zdvizích) Poslední štych 10 bodů Hláška (Kr + F) 20 bodů Hláška v trumfech 40 bodů Maximální možný počet bodů je 190. Z toho 90 bodů (8 desítek a poslední štych) musí být uhráno v každé hře. Pochopitelně mimo betla a durcha, kdy se desítky a esa nepočítají a cílem hry je uhrát všechny (durch), či žádný štych (betl). Plyne z toho, že žádná hra nemůže skončit remízou. Skončí-li hra přece jenom nerozhodně, stává se to nejčastěji opomenutím posledního štychu, tedy jeho hodnoty deseti bodů. Body spoluhráčů, které mají ve svých uhraných zdvizích, se sčítají. Kdo získá větší počet bodů, stává se vítězem. Další pokyny jak pro hru, tak pro betla a durcha, jsou uvedeny v příslušných kapitolách. 2.1.2 Zahájení hry Před započetím hry si hráči sejmou z předem promíchaného balíčku karet. Platí zásada, že první a poslední karta se nesnímá. Kdo sejme kartu nejnižší je určen k tomu, aby rozdával při první hře. V rozdávání při dalších hrách se hráči střídají podle pořadí, v jakém jsou posazení u stolu. Střídání se děje po směru hodinových ručiček. Pokud sejmou dva (tři či čtyři) kartu stejné výše, pokračují ve snímání až do konečného rozhodnutí. Snímání Hráč, který se chystá rozdávat, by měl před první hrou, potom už nikdy, zamíchat karty. Pak dá hráči po své pravici sejmout. Hráč, jenž snímá, přeloží balíček karet na dvě hromádky. Tento postup je potom shodný pro všechny hry. Rozdávající hráč složí obě hromádky na sebe v obráceném pořadí. Rozdávání Sejmutý balíček karet začne hráč rozdávat s tím, že každému hráči dá čtyři karty, hráčem po své levici počínaje (ve směru hodinových ručiček). Když si rozdá i sobě 4 karty, stejným způsobem (po čtyřech kartách) rozdá i zbylé karty.

4 KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE 2.1.3 Volba Hráč, který obdržel první čtyři karty, volí. To znamená, že určuje barvu trumfů pro příští hru, a dále určuje, s kým bude hrát, nikoli jmenovitě, ale ohlásí kartu, s jejímž majitelem se chystá sehrát příští hru jako se svým spoluhráčem. Volba se provádí z prvních čtyř karet. Někdy je možnost (což záleží na dohodě hráčů před započetím první hry) zavolit tzv. z lidu. K volbě z lidu se uchylujeme v situaci, když z prvních čtyř karet není ani jedna barva silnější, či volící hráč je nerozhodný (např. při sestavě 2 x 8 a 2 x 9 apod.). Potom si vybere z dalších čtyř karet jednu, a aniž by se na ni podíval, dá ji stranou a řekne: S esem. To znamená, že hraje s majitelem esa zvolené barvy. Často se ale stává, že právě otočená karta je eso. Pak je jeho protihráčům od prvního štychu jasné, že hraje sám. Po obdržení čtyř karet zhodnotíme jejich sílu a zjistíme, kterou kartou by šla vylepšit síla nejsilnější barvy. A to je ta karta, kterou volíme. To znamená, že majitel této karty je náš spoluhráč. Při volbě je zásada, aby čtyřka (mariáš v trumfech) či její část trhák (král nebo filek v trumfech) - byla na straně toho, kdo volí, ale je i opačná teorie. 2.1.4 Schválení volby Pokud se volící hráč rozhodne hrát zvolenou hru a nechce hrát ani betla ani durcha, zeptá se Jaké je barva?. To znamená, že možnost hrát betla či durcha přepouští hráči po své levici. Když ani ten nechce hrát žádnou z výše uvedených her, řekne: Dobrý.. A možnost má další hráč, posléze i poslední. Řekne-li jeden z hráčů špatný, znamená to, že zvolená hra se nebude hrát a trumfy nebudou platit. Volící hráč musí stáhnout volbu, tzn. dát si kartu na volbu zpět do svého listu, aniž by ji někomu ukázal. Může se stát, že sám volící hráč řekne špatný, musí však ještě počkat na schválení dalších hráčů, neboť i oni mohou říci o barvě, že je špatná. Když jsou všichni dobří, může se začít hrát hra, nejsou-li, hlásí hráč, který první řekl špatný, hru, kterou hodlá hrát atd. až k poslednímu. Hráč, který nechtěl hrát betla či durcha, v této situaci mlčí. Když jsou dva (či tři, čtyři) hráči špatní, hru získává ten, kdo chce hrát hru nejvyšší. Proto opět v pořadí, ve kterém říkali špatná, konkretizují, co chtějí hrát. Stupnice je: 1. durch s chytrým 2. betl 3. durch V této stupnici je nejnižší durch s chytrým, protože v ní si vedoucí hráč bere na pomoc ještě jednoho spoluhráče. Betl, ve kterém je snahou neuhrát ani jeden štych, je na místě druhém, protože do takové hry se pouští hráč sám a nemůže spoléhat na ničí pomoc. A hrou nejvyšší je durch, ve kterém je hráč na uhrání všech karet osamocen proti třem soupeřům. Pokud se i potom najdou dva (mohou být teoreticky i čtyři) hráči, kteří chtějí hrát stejnou hru, má právo ji hrát ten hráč, který hlásil dříve špatnou barvu (je v pořadí první). Potom se teprve může začít flekování.

KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE 5 2.1.5 Typy her Betl Betl je s durchem jediná hra, kde platí desítka mezi spodkem a devítkou. Betl pak je hra, kterou musí hrát hráč vždy sám. Je to závazek, že se mu v průběhu hry nepodaří uhrát ani jeden štych. V betlu neplatí trumfy, ale platí povinnost přebíjet nejvyšší kartu ve štychu. Do betla se pouští hráč s nízkou kartou, tzn. bez es a pokud možno i bez obrázků, tedy s převahou nízkých karet, jakož i s dlouhým řetězem jedné barvy vycházejícím od sedmy. Hráč hrající betla vynese jednu kartu (obrázkem dolů) na stůl a protihráčům oznámí betl, což je signál k flekování. Až flekování skončí (není ani povinností, aby začalo), otočí hráč svoji kartu a hra začíná. Hra končí posledním štychem či tím, že hráč hrající betla v útoku je donucen zabít štych, nebo tím, že soupeři složí karty. Durch V této hře se hráč zavazuje, že sám (či se spoluhráčem durch s chytrým) uhraje všech osm štychů. Předpokládá to vysoké karty, přičemž desítka platí mezi spodkem a devítkou. Neplatí zde trumfy. Hra končí vítězstvím vedoucího hráče (hráčů) nebo zabitím štychu jedním z jeho (jejich) soupeřů. Hra Pokud nikdo nechce (spíše na to nemá kartu) hrát betla či durcha, dochází ke hře nebo stovce. Hra je snahou hráčů (hráče) získat větší počet desítek a es než soupeř. Důležitým pravidlem pro hru je ctít barvu a přebíjet. Přebít nejvyšší kartu ve štychu je povinností vždy. Nemůže-li hráč přebít, musí alespoň ctít barvu. Nemůže-li ani ctít barvu, musí dát trumfa. Ve štychu, který někdo před hráčem zabil trumfem, nemusí přebíjet vynesenou kartu. Nemá-li trumfa, pak může přihodit jakoukoliv kartu. Neméně významnou roli jako desítky a esa hrají v konečném zúčtování mariáše či čtyřka a velmi významný je i poslední štych, který často rozhoduje o osudu celé hry. Poslední štych může mít hodnotu maximálně 50 bodů (4 desítky + 10 bodů), což při absenci "dvacek" vyhrává celou hru. Stovka Zvláštním druhem hry je stovka. Stejně,a to je jediná paralela, jako betl a durch se musí hrát, i když na ni nebyl flek. Ve stovce se zavazuje volící strana, že uhraje 100 či více bodů. Do tohoto závazku pro posouzení uhrání se započítává pouze jeden hláška, a to většinou v trumfech - čtyřka. Další hlášky mají význam pouze finanční, v případě uhrání stovky. A tak může nastat i extrémní případ, kdy hráči v útoku uhrají 150 bodů, ale musí zaplatit za prohranou stovku. Z toho vyplývá, že hráčům v obraně stačí uhrát čtyři číselné desítky (esa, desítky či poslední štych), aby byla stovka prohrána. Další jimi uhrané desítky či dvacky mají opět význam pouze finanční. Někdy k vítězství stačí pouze dvě číselné desítky, a to v případě, že volící hráči nemají čtyřku a stovku hrají s použitím některé z dvacek.

6 KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE Stovky jsou: a. povinné tzn., že je celá čtyřka na straně volících hráčů - má ji jeden z nich. Např. je volané eso a hráč má ještě k esu krále a filka. Pak je povinností hráče, majícího celou čtyřku ve svém listě, ohlásit sto. b. dobrovolné které hlásí hráč dobrovolně, po zvážení síly svého i spoluhráčova listu. Dobrovolná stovka má dvě varianty: 1. na dvacku Je-li čtyřka roztržená,jinak by byla stovka povinná, mohou hráči pokusit uhrát stovku, mají-li dvacku. Předpokládá to ovšem velmi silnou kartu a nepouštět, podle své karty s přihlédnutím k spoluhráčově kartě, víc jak jednu desítku. Jinak je stovka nekorektní. 2. proti hlásí ji hráč, který hraje proti volícímu hráči, má velmi silnou kartu, minimálně 4 trumfy + jedna hláška - nejlépe čtyřka a nepouští podle své karty soupeřům více jak tři desítky. Stovka proti se hlásí jenom výjimečně při obzvlášť nevydařené volbě soupeře. 2.1.6 Flekování Flekování je dohadování hráčů před hrou, kdo ji vyhraje, a tím se zároveň stanovuje finanční hodnota hry, stovky, durcha či betla, podle toho, co se flekuje. Jak již bylo uvedeno betl a durch a stovka se hrají i v případě, že nikdo z protihráčů nedal flek. Na hru je nutné, aby si volící strana (kdokoli z hráčů) dal re. Pokud je jenom flek, hra se nehraje a volící hráči zaplatí. Flekování se děje střídavě, to znamená, že každá strana má právo zvýšit hodnotu hry jenom jednou do té doby, než si protihráči také dají re atd. Flekovat začíná strana, která je v obraně. Tedy hráč, který je po levici volícího hráče, nebo hráče hrajícího betla či durcha, má první právo vyjádřit se ke hře. Dá flek nebo řekne: Dobrý. A opět další hráč po jeho levici se musí ke hře vyjádřit. Takto musí všichni hráči popořadě schválit nebo oflekovat hru. Pokud si dají tvoji soupeři flek, s čímž volící hráči nesouhlasíš, mohou si dát re. Zvyšovat hodnotu hry (flekovat) může za oba jenom jeden hráč, neexistuje tedy, aby si jeden hráč dal flek a jeho spoluhráč re. Ovšem v případě, že si soupeř dá flek větší, může se do flekování zapojit i druhý třetí ze spoluhráčů. Flekování končí, když tři hráči za sebou řeknou pouze: Dobrý. Někdy nastane situace, kdy s velmi dobrou kartou nelze vůbec promluvit do flekování. To v případě, kdy stále flekoval spoluhráč, a byl to on, kdo dal poslední flek. Ale většinou, pokud je hra vícekrát flekována, participují se na tom oba či tři spoluhráči. Protože s nějakou kartou je flek a tutti korektní, ale další flekování už není podloženo sílou listu a v tom okamžiku si může dát jeho spoluhráč "kalhoty", neboť vlastní-li např. dvě hlášky ve svém listě, oprávněně se může domnívat, že právě jeho mariáše rozhodnou o vítězi této hry. Platí pravidlo, že maximum je šest fleků (flek, re, tutti, boty, kalhoty a kaiser). Další flekování je zbytečné a nepočítá se.

KAPITOLA 2. POPIS PROBLÉMU, SPECIFIKACE CÍLE 7 2.1.7 Placení Nejčastěji se hraje mariáš desetníkový. To znamená, že základní sazba za hru je deset halířů. Při stovce se ignoruje hra a na nehlášenou stovku se vztahují fleky na hru. Za každých deset bodů uhrané stovky navíc se přičte základní sazba. flek 2 základní sazba re 4 základní sazba tutti 8 základní sazba boty 16 základní sazba kalhoty 32 základní sazba kaiser 64 základní sazba Tabulka 2.1 Ohodnocení flekování 2.2 Cíl bakalářské práce Cílem bakalářské práce bylo navrhnout a naimplementovat hru mariáš pro čtyři hráče, kde zbylí tři hráči jsou nahrazeni počítačem. Snahou bylo taktéž navrhnout aplikaci takovým zbůsobem, aby výsledný produkt byl co nejvíce flexibilní a nebyli jsme nuceni hrát pouze jednu hru a to hru pro jednoho hráče, ale aby bylo také možné program lehce modifikovat a rošiřovat o případné další módy, jako by mohla být např. hra bez počítačových protivníku, či pouze hra, kde proti sobě stojí pouze počítačové algoritmy. Také by neměl být velký problém předělat tuto aplikaci na síťovou. 2.3 Rešerše existujících implementacích Objevil jsem pouze dvě implementace hry mariáš - čtyřka a to: www.talon.cz server pro online hraní hry mariáš Zde lze hrát nejen čtyřku, ale i mariáš volený a licitovaný. Hraje se na povinný flek na trháka a povinné kilo s. Lze hlásit sedmu proti, sedmu s, a kilo s. Nehraje se durch s chytrým. Při hře betla se po prvním zdvihu hraje s vyloženými kartami. Běžná hra se hraje od Re. Čtyřka od Jakuba Vrány Tento program je shareware, prvních 30 dní je zdarma. Je naprogramován v Delphi. Má příjemnějsí vzhled a mnoho funkcí. Program se také snaží některé funkce zautomatizovat. Nedovolí vám nedat flek na trháka, automaticky musíte hlásit kilo na čtyřku s. Umožňuje automatické dokončování hry: To jde za mnou. Je možnost hrát i po síti, ale to pouze v registrované verzi hry. Lze nastavit za hráče jak člověka tak umělou inteligenci.

8 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 3 Analýza a návrh řešení 3.1 Neúplná informace Mariáš - Čtyřka je hra s neúplnou informací z toho důvodu, že nemáme přístup k spoluhráčovým ani protivníkovým kartám v průběhu hry. Tím se dostáváme k problému, jelikož nemůžeme jednoduše použít například minimax s alfa-beta prořezáváním k prohledávání stavového prostoru, neboť by tyto standardní vyhledávání vedli k obrovskému množství možností a mimo to pracují pouze s úplnou informací. Nebylo by ani pořádně možné správně cokoli prořezávat, protože nemůžeme minimálně na počátku hry přesně vědět jaké karty, který hráč vlastní. V dalších hrách již, ale umělá inteligence dokáže zjistit rozložení karet ostatních hráčů a to díky znalosti karet, které hráči v dřívějším kole odehráli a které se po konci hry stejným způsobem skládají do balíčku. Proto v této fázi hry lze již využít alfa-beta prořezávání bez použití metody Monte Carlo. Obrázek 3.1: Tradiční prohledávání 3.2 Metoda Monte Carlo Jedním z možných řešení jak se vypořádat s neúplnou informací je metoda Monte Carlo viz [2]. Tento přístup je založen na tomto principu:

KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 9 Vytvoří se vzorky ze stavového prostoru možností Jestliže získáme dostatek vzorků, potom můžeme získat dobrou aproximaci reálné hodnoty Obrázek 3.2: Monte Carlo vzorkování Jak je vidět na obr. 3.1 tradiční prohledávání prohledá většinou všechny uzly na nějaké fixní mělké hloubce, zatímco Monte Carlo vzorkování (sampling) prohledá pouze některé uzly, ale zato ve velké hloubce. Vytvoření vzorku: Vytvoření možného scénaře akcí od momentálního stavu hry do žádoucího (cílového) stavu Vypočítání ohodnocení tohoto vzorku 3.2.1 Statistické vzorkování Statistické vzorkování vychází z toho, že pro každý uzel naschromáždíme vzorky a vypočítáme průměrné dosažené skóre. Toto se opakuje tak dlouho, dokud máme k dispozici prostředky (obvykle je to čas). Nyní jak vybereme akci: Vybereme tu akci, která získala nejlepší statistický výsledek V mariáši to bude např. vybrání karty, která povede k výhře

10 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Kolik vzorků provedeme záleží pak čistě na požadavcích systému, můžeme: opakovat dokud neuběhne požadovaný čas opakovat dokud si nebudeme statistikou přesvědčeni o správném rozhodnutí opakovat do té doby dokud ohodnocení jedné akce nebude významně větší než-li ohodnocení ostatních alternativ použít také chytré vzorkování, které nám pomůže k redukci vzorků potřebných k zjištění prospěšného výsledku 3.2.2 Selektivní vzorkování Selektivní vzorkování vychází z předpokladu, že všechny scénáře akcí nejsou rovnocenné a tudíž neptřebujeme a ani nechceme procházet uplně všechny náhodné kombinace. Abychom mohli rozlišit od sebe nějakým způsobem vzorky, budeme potřebovat nějaké dodatečné informace. Ty získáme tak, že budeme používat všechny možné expertní informace vztahující se k určitému problému a které máme momentálně k dispozici. Např. u mariáše by scénáře akcí měly být konzistentní s pravidly mariáše jako je licitace apod. a nemusely by se prohledávat jakékoli náhodné sekvence možných akcí. 3.2.3 Výhody a nevýhody vzorkování Mezi hlavní výhody patří: Realizace komplexního chování hry bez explicitních znalostí Celkem jednoduchý vyhledávací algoritmus Zmenšení stavového prostoru závisí na expertních znalostech Mezi hlavní nevýhody patří: Nemusí konvergovat k jasnému vítězi K dosažení prospěšných výsledků může být potřeba provádět také protivníkovo modelování 3.2.4 Použití v mariáši S neúplnou informací v mariáši-čtyřce se dokážeme tedy vyrovnat, pomocí výše uvedených poznatků. Jelikož nevidíme ostatním hráčům do karet, tak protihráčům i svému spoluhráči jakoby rozdáme náhodně karty takovým způsobem, že toto rozdání bude konzistentní s momentálním stavem hry. Tím máme nad tímto rozdáním úplnou informaci a můžeme zjistit pomocí prohledání stavového prostoru a za pomoci expertních pravidel jaká naše budoucí akce by byla ta nejsilnější a vedla tak k výhře.

KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 11 Zprůměrováním přes velký počet takto získaných Monte Carlo vzorků se pak vypořádáme s neúplnou informací. Inspiroval jsem se Matthew L. Ginsbergem, který, použil tyto metody ve svém programu hrajícího bridž a který je momentálně jedním z nejlepších programů svého druhu na světě co se týče umělé inteligence počítačových hráčů. Následující algoritmus viz [1] lze dobře využít v této aplikaci mariáše. Vybrání karty m z množiny karet M se provede následujícím algoritmem. Algoritmus Monte Carlo - výběr karty: 1. Vytvoř množinu rozdání D konzistentních s aktuálním stavem hry. 2. Pro každou kartu m M a každé rozdání d D ohodnoť výsledek hry, který by vznikl při volbě karty m v rozdání d. Označ výsledné skóre získané touto volbou s(m,d). 3. Vynes tu kartu m pro kterou d s ( m, d) je maximální. 3.3 Metoda minimaxu Metoda minimaxu je v podstatě metodou prohledávání do hloubky s omezením hloubky prohledávání viz [. Specifický je pro ni predevším způsob volby statické ohodnocovaní funkce f, která se vypočítává pro daný uzel na i-té úrovni grafu využitím následujícího iterativního algoritmu: a) Daný uzel se expanduje a pro všechny následovníky se určí hodnota f, b) Z takto určených hodnot se vybere ta nejlepší a použije se zpětně jako nové ohodnocení rodičovského uzlu na i-té úrovni. Uvedený algoritmus samozřejmě předpokládá omezení povolené hloubky prohledávání, čili omezení povolených iterativních aplikací tohoto algoritmu pro výpočet ohodnocení jednoho uzlu. Pro účinnost algoritmu je zřejme rozhodujícím faktorem definice nejlepší hodnoty ohodnocující funkce na dané úrovni grafu (stromu) popisujícího prohledávání. Je zřejmé, že pokud se bude jednat obecně o lichou úroveň, je nutné brát do úvahy maximální hodnotu ohodnocující funkce na nejbližší nižší (tedy sudé) úrovni, jde o maximalizaci zisku hráče A. Naopak, bude-li se jednat o úroveň sudou, musí se určovat minimální hodnota ohodnocující funkce na nejbližší nižší (tedy liché) úrovni, neboť výběr operátoru převádejícího stav ze sudé úrovně na lichou je plně v rukou protihráče B. Ten se bude samozřejmě snažit minimalizovat zisk hráče A. Lichá úroveň se obvykle nazývá maximalizující (maximizing level), sudá pak minimalizující (minimizing level).

12 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 3.4 Alfa-beta prořezávání Metoda minimaxu je, jak již bylo uvedeno, ve své podstatě metodou prohledávání do hloubky. Účinnost klasického prohledávání do hloubky bývá umocňována technikami branch-and-bound, při nichž jsou ve velmi ranných stadiích prohledávání zavrhována rešení evidentně horší než již dosud nalezená. K zavrhování řešení je k dispozici jistá mezní, ješte akceptovatelná mez ohodnocení uzlu. Tyto analogické techniky v případě her dvou hráčů musí být schopny pracovat s dvěma mezními hodnotami ohodnocení, tzv. mezí (bounds) každý z hráčů disponuje v daném okamžiku jistou svojí mezní hodnotou, která mu pomáhá rozhodnout. Strategie větví a mezí (branch-and-bound) modifikovaná pro hru dvou hráčů se nazývá metodou prořezávání alfa-beta (alpha-beta pruning). Tato metoda využívá dvě mezní hodnoty: a) Hodnotu alfa reprezentující dolní mez ohodnocení uzlu, v nemž je na tahu hráč A (tj. uzlu, v nemž je maximalizováno ohodnocení) b) Hodnotu beta predstavující horní mez ohodnocení uzlu, odpovídajícího tahu hráče B (tj. uzlu, v nemž je ohodnocení minimalizováno) Na maximalizující úrovni můžeme v ranných stadiích prohledávání vyloučit tahy, u nichž je jasné, že jejich prostřednictvím lze dosáhnout ohodnocení menšího než horní mez alfa. Naopak na minimalizující úrovni můžeme v ranných fázích prohledávání vyloučit tahy, vedoucí k ohodnocení většímu než dolní mez beta. Všimněme si, že vyloučení některého tahu hráčem, kterýmaximalizuje výhru, vlastně představuje redukci prohledávání na minimalizující úrovni. Z toho vyplývá zdánlivě paradoxní závěr, že na minimalizující úrovni muže být prohledávání ukončeno, pokud je nalezeno ohodnocení menší než alfa, zatímco na maximalizující úrovni lze prohledávání ukončit tehdy, je-li nalezeno ohodnocení větší než beta. Paradoxní situace, kdy ukončujeme prohledávání na maximalizující úrovni vlivem příliš vysokého ohodnocení se stává pochopitelnou, uvážíme-li, že se dostáváme k danému uzlu na maximalizující úrovni jen tehdy, když si příslušný tah vybere hráč na předcházející minimalizující úrovni. Na maximalizující úrovni se tedy k prořezávání prohledávaného stromu používá parametr beta, zatímco parametr alfa se na této úrovni nastavuje tak, aby byl připraven k využití na následující minimalizující úrovni. Nastavování parametru alfa probíhá tak, že se za hodnotu alfa buď dosadí hodnota alfa z bezprostředně předcházející maximalizující úrovně, nebo nejlepší ohodnocení získané na dané úrovni, záleží na tom, které z těchto dvou čísel je vyšší. Parametr alfa tedy vždy nabývá vyšší ze dvou hodnot: z hodnoty alfa, kterou zdědil, a z nejlepší hodnoty nalezené na dané úrovni.v případě, že dojde ke změně alfa, nová hodnota se okamžitě šírí jak dopředu k nižším úrovním, tak i zpětně k úrovním vyšším. Tím je zaručeno, že momentální hodnota parametru alfa odpovídá dosud nejlepší sekvenci tahu nalezené ve stromu. Zcela analogicky se postupuje na minimalizující úrovni. Parametr alfa se užívá k prořezávání, parametr beta se zde nastavuje jako minimum z hodnoty zděděné a z minimální hodnoty získané na dané úrovni. Nové hodnoty beta se šíří v prohledávaném stromu oběmasměry.

KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 13 Účinnost prořezávání alfa-beta do značné míry závisí na pořadí, v němž jsou větve stromu expandovány. Pokud jsou náhodou přednostně vyšetrovány nejhorší cesty, k prořezávání téměř nedochází. Pokud by v daném systému prohledávání do hloubky byla nejlepší cesta shodou okolností generována jako první, nemuselo by vůbec dojít k expanzi uzlu ležících mimo tuto cestu. 3.5 Iterativní prohlubování V oblasti her byl také vynalezen a poprvé použit algoritmus iterativního prohlubování. Užívá se především u her s časovým omezením doby tahu. V takovém případě nelze obvykle dost dobře dopředu odhadnout rozumnou povolenou hloubku prohledávání. Algoritmus iterativního prohlubování muže být kdykoliv přerušen (např. těsně před vypršením časového limitu), přičemž po přerušení jsou k dispozici odhady ohodnocovaní funkce dosažené systematickým prohledáváním do maximální hloubky. 3.6 Herní model Herní model vychází z pravidel mariáše pro čtyři hráče, která jsou uvedena v kapitole 2.1. Celkový průběh mariáše je možné vidět na obrázku 3.3. Z obrázku je patrné, že ke hře ani nemusí dojít díky flekování. Pokud nikdo například nedá re na hru, tak se složí karty a ve hře se vůbec nezačíná. Dále také z obrázku vyplývá, že se pokud se po placení rozhodneme hrát další hru, tak se balíček znovu nemíchá, pouze se snímá. Toho se s úspěchem využívá při zmenšování neúplnosti informací o hře, neboť skládání se většinou provádí stejným způsobem a můžeme proto pak odhadovat jaké karty protivníci a spoluhráč mají. Sejmutí se ovšem nesmí přesně odpočítávat, takže lze jen přibližně spočítat pozici v balíčku karet, kde by bylo vhodné balíček sejmout. Ve Čtyřce obvykle hrají dva proti dvěma. Kdo bude hrát s kým se určuje právě při volení. Forhond položí jednu kartu na stůl a řekne, že bude hrát s určitou kartou té barvy, ale neříká barvu, kterou zvolil. Například: Hraju s esem. Tím určí trumfy a zároveň řekne, s kým bude hrát (ale nikdo ještě neví konkrétní osobu).

14 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Obrázek 3.3: Mariáš-čtyřka

KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 15 Volba v sobě zahrnuje jak volbu trumfů, tak volbu spoluhráče, volbu vždy provádí forhond (první kdo dostane karty). Volba je znázorněna na obr. 3.4 Obrázek 3.4: Volba Po volení se na zbytek svých karet podívá i forhond a buď se zeptá na barvu ( Jaká je barva? ) nebo nahlásí betla či durcha. (Betl a durch jsou zvláštní hry, které se hrají podle jiných pravidel než hra obyčejná.) Jestliže se zeptá na barvu, znamená to, že má vyrovnané karty a že by nejraději hrál normální hru. Poté se ke hře vyjadřují ostatní hráči. Buď řeknou dobrá, nebo mohou také nahlásit betla či durcha. Jestliže barva projde (3x dobrá), forhond ukáže zvolenou kartu a ještě jednou zopakuje s kým hraje. Například: S kulovým esem. V tuto chvíli už jeden hráč (ten, který má řečenou kartu) přesně ví s kým a proti komu hraje, ostatní ještě neví nic.

16 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ Schválení volby ilustruje další diagram na obrázku 3.5. Obrázek 3.5: Schválení volby Při flekování se ke hře můžou vyjádřit postupně všichni hráči. Když nechtějí flekovat, nahlásí: dobrá. Hrát se začíná, až když tři hráči za sebou mlčí (dobrá), do té doby se pokračuje v dalších a dalších flekovacích kolečkách. Když hru nikdo neflekne a není nahlášená stovka ani sedmička, skládají se karty a vůbec se nehraje.

KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ 17 Flekování ilustruje další diagram na obrázku 3.6. Obrázek 3.6: Flekování 3.7 Volba implementačního jazyka Rozhodoval jsem se mezi dvěma programovacíma jazyky a to Javou a C++, jelikož jsem oba jazyky již poznal. Nejprve jsem začal programovat tuto aplikaci pomocí C++., protože jsem měl v tomto jazyce více zkušeností než v Javě, ale asi po čase jsem se rozhodl, že celou aplikaci budu implementovat pomocí Javy. K tomuto kroku jsem dospěl z několika důvodů. Za prvé jsem chtěl lépe porozumět Javě jako takové a za další jsem chtěl, aby výsledná aplikace byla přenositelná (platformově

18 KAPITOLA 3. ANALÝZA A NÁVRH ŘEŠENÍ nezávislá). V Javě je také mimo jiné na lepší úrovni typová bezpečnost. Z těchto důvodů jsem se proto rozhodl pro Javu.

KAPITOLA 4. REALIZACE 19 4 Realizace 4.1 Řízení aplikace Celá aplikace je založena na architektuře modelu, pohledu a řízení (MVC) viz obrázek 4.1. MVC není nic nového a nemá původ v Javě. Myšlenka této architektury se objevila před časem v kontextu programovacího jazyka Smalltalk. MVC je způsob modelování komponent ze tří pomylných samostatných částí: modelu, který obsahuje data definující komponentu pohledu, který tvoří vizuální podobu komponenty z dat v modelu řízení, které zpracovává uživatelské pokyny pro komponenty a příslušně mění model a/nebo pohled tak, jak je to nezbytné Hlavní funkce main je umístěna v nejvyšší třídě aplikace Marriage. Tato třída je zodpovědná za vytvoření objektu modelu typu Game, za objekt pohledu typu GameScreen, dále za objekt typu GlassPane a nakonec za vytvoření objektu aplikačního okna (rámu) třídy FrameMarriage. Aplikační objekt typu Marriage má tak celkovou odpovědnost za správu spojení mezi ostatními objekty. Jakýkoli objekt, který má přístup k aplikačnímu objektu je schopný komunikovat s jakýmkoli objektem, protože aplikační třída má metody, které všechny objekty zpřístupní. Takže aplikační objekt vystupuje jako komunikační kanál mezi objekty. Obrázek 4.1: MVC

20 KAPITOLA 4. REALIZACE Třída Game rozšiřuje třídu Observable z toho důvodu aby mohla u sebe registrovat pohledovou třídu GameScreen jako pozorovatele a automaticky uvědomovat pohled o jakýchkoli změnách. Třída GameScreen implementuje rozhraní Observer a obsahuje odkaz na hlavní aplikaci, přes nějž se lze dostat k odkazu na model dat. Tím, že je v pohledu uložen odkaz na aplikaci a ne přímo na model a také proto, že v objektu aplikace je metoda vracející odkaz na model, tím je zajištěna nezávislost pohledového objektu na modelovém objektu. 4.2 Grafické uživatelské rohraní Třída GameScreen rozšiřuje JPanel a je vlastně hlavní obrazovkou, ne které se odehrává celý mariáš - čtyřka. Tato plocha je rozdělena pomyslně na čtyři stoly třídy Table, ve kterých jsou vykreslovány karty hráče. Dále se na této obrazovce zobrazují čtyři informační panely pro každého hráče, kde se objevují různé informace jako je jméno hráče, stav hry, trumfy apod. Velkou výhodou celé aplikace je to, že je nezávislá na grafickém rozlišení počítačové obrazovky. Je to z toho důvodu, že jsem celou zobrazenou plochu naprogramoval nad správcem rozmístění SpringLayout viz [6]. Tento správce je velmi flexibilní a lze s ním proto naimplementovat pomocí omezení posouvání jednotlivých karet v závislosti na aplikačním okně a jejich překrývání. Celé grafické uživatelské rozhraní také samozřejmě pracuje na principu modelu delegování událostí. Hlavní okno také obsahuje lištu (menu), kde se mimo jiné nachází i nastavení, v němž lze měnit jak jména hráčů, tak jejich vykonovatele, jímž může být buď člověk, umělá inteligence nebo náhodný algoritmus. V podmenu AI je možnost změny doby přemýšlení umělé inteligence. 4.3 Herní model Hráčem může být jak počítač, tak člověk. Proto byla vytvořena abstraktní třída Player zapouzdřující základní informace obecného hráče jako je jméno, tým, objekt PlayData obsahující informace o získaných bodech, penězích, zdvizích a objekt Hand s aktuálními kartami hráče. Obsahuje také abstraktní metody, jako je cutdeck() k sejmutí balíčku karet, choice() vybírá trumfy a spoluhráče, bid() licituje, choosegame() vybírá hru v dobré barvě, doublepayment() k flekování a metodu play() k samotnému hraní konkrétní hry. Třída Computer a Human rozšiřují abstraktní třídu Player. Třída Computer dodržuje pravidla hry mariáš a obsahuje odkazy na data momentální hry a také využívá instance typu AI umělé inteligence k zjištění další akce v aktuálním stavu hry. Byly navrženy dvě třídy Rookie a Expert, které implementují rozhraní AI. Třída Rookie používá k navrhnutí dalšího postupu ve hře náhodný generátor typu Random.

KAPITOLA 4. REALIZACE 21 Třída Expert na druhé straně využívá expertních pravidel, metody Monte Carlo a alfa-beta prořezávání v podobě proměnných typu MonteCarlo a Searcher. Například při snímání se třída Expert pokouší sejmout balíček, tam kde předpokládá nejlepší ohodnocení pro svou následující hru. Vybírá náhodně z 5ti nejlépe ohodnocených karet, jenž se nacházejí v těsné blízkosti. Ostatní implementované abstraktní metody taktéž využívají mnoho expertních pravidel získaných z [5]. Všechny metody k ohodnocení karet spoluhráčů i protihráčů využívají metody z třídy Evaluator. Třída Expert také umožňuje uživateli nastavení doby prohledávání stavového prostoru, tím že implementuje algoritmus iterativního prohlubování. Třída MonteCarlo podle již známého algoritmu vytvoří data pro procházení objektem třídy Search. Objekt MonteCarla je využit pouze v první fázi turnaje, jelikož v té době ješte není možné znát karty ostatních hráčů. Třída Search prohledává stavový prostor hry. Využívá k tomu minimax algoritmus s alfa-beta prořezáváním. Modelem celé hry mariáše je třída Game zapouzdřující potřebná data ke hře. Tato třída vytváří všechny nutné objekty pro hru jako je třeba balíček karet, hráče, ať už lidské či umělé a ostatní data důležitá pro chod aplikace. Třída Validator zajištuje validaci karty, jenž má být vynesena do zdvihu a pokud se jedná o renonc, je vyvoláno příslušné upozornění k nápravě. Třída GameState zaznamenává stav hry, který se mění v závislosti na akcích provedených hráči. Třída Card obsahuje odkazy na objekty dvou výčtových typů suit a rank (barva, hodnota). Dále obsahuje relativní cestu k reálné kartě. Obsahuje také metodu flip() pro obrácení karty lícem dolů či nahoru. Třída Deck reprezentuje balíček karet, do kterého je při inicializaci načteno 32 karet pro hru mariáš - čtyřka. Balíček karet je implementován jako List. Obsahuje samozřejmě metody pro míchání karet v balíčku, přidávání či odebírání karet.

22 KAPITOLA 5. TESTOVÁNÍ 5 Testování Aplikace byla testována již v průběhu tvorby softwaru. K nacházení chyb velmi napomohl debugger vývojového prostředí NetBeans. Bylo testováno jak grafické prostředí, tak logika toku řízení systému včetně průchodů umělou inteligencí. Bylo odzkoušeno velké množství kombinací stavů hry a jejich součinnosti s grafickým uživatelským prostředí. Testováním se také postupně vylepšovalo nastavení nejoptimálnější ohodnocení heuristik, nicméně pořád je co vylepšovat. Otestováno bylo dodržování pravidel, ať už pro hráče, tak také pro umělou inteligenci včetně nastaveného časového limitu odezvy.

KAPITOLA 6. UŽIVATELSKÁ PŘÍRUČKA 23 6 Uživatelská příručka 6.1 Instalace Vložte CD s Mariášem-Čtyřka do mechaniky, otevřete složku spustitelný soubor se spustitelným jar archivem a spusťte ho. 6.2 Herní obrazovka V horní části herní obrazovky na obrázku 6.1 se nachází roletové menu, kde lze najít různá nastavení. Pod ním se rozprostírá herní plocha, kde jsou rozloženy karty všech čtyř hráčů. Každý hráč má u svých karet panel s informacemi týkající se dané hry. Karty se posouvají přes sebe v závislosti na velikosti obrazovky. Obrázek 6.1 Herní obrazovka

24 KAPITOLA 6. UŽIVATELSKÁ PŘÍRUČKA 6.3 Menu Menu se skládá ze třech položek označených Hra, Nastavení a Nápověda obsahující další volby. Nabídka Hra slouží k spuštení nové hry (volba Nová hra) a k ukončení aplikace (volba Konec). Nabídka Nastavení obsahuje volbu Hráči a volbu AI, jak ukazuje obr. 6.2. Nabídka Nápověda slouží uživateli k získání informací o aplikaci. Obrázek 6.2 Volby v nabídce Nastavení Volba Hráči zobrazí panel ve kterém lze změnit jména a typy hráčů viz obr. 6.3. Hráč může být člověk (volba Člověk) a pak je ovládán myší a nebo lze nastavit umělou inteligenci ovládanou počítačem a to buď volbou AI Rookie, jenž dodržuje pravidla mariáše a nebo volbou AI Expert, která prohledává stavový prostor a používá expertní pravidla. Toto nastavení se projeví v nové hře. Obrázek 6.3 Volba Hráči

KAPITOLA 6. UŽIVATELSKÁ PŘÍRUČKA 25 Volba AI umožňuje nastavení maximální doby prohledávání stavového prostoru a určuje tím maximální dobu odezvy hráče AI Expert, jak lze vidět na obrázku 6.4. Tento čas se určuje ve vteřinách. Obrázek 6.4 Volba AI 6.4 Validace V průběhu hry se validuje každá karta, jenž má být vynesena, podle pravidel mariáše. Pokud tato karta nekoresponduje s pravidly, zobrazí se dialog Renonc, jenž obsahuje nápovědu pro hráče o pravidle, které by měl dodržovat. Příkladem je obrázek 6.5. Obrázek 6.5 Renonc 6.5 Minimální požadavky JRE 1.6

26 KAPITOLA 7. ZÁVĚR 7 Závěr Cílem této bakalářské práce bylo naprogramovat mariáš - čtyřku jako počítačovou hru pro jednoho hráče. Tento cíl byl úspěšně splněn. Navíc nemusí hrát aplikaci pouze jeden lidský hráč, ale i více, zrovna tak i umělá inteligence může hrát pouze proti sobě. Další velkou výhodou je rozlišení obrazovky nutné pro běh aplikace, neboť aplikace je nezávislá na rozlišení a dokáže se přizpůsobovat různým velikostem. Možností jímž by se dalo vylepšovat aplikaci je celá řada, proto budu jmenovat jen některé zajímavé: Rozšíření aplikace o hru po síti Vylepšení umělé inteligence hráčů, např. implementovat transpoziční tabulky a partion search

KAPITOLA 7. ZÁVĚR 27

28 PŘÍLOHA A. OBSAH PŘILOŽENÉHO CD A Obsah přiloženého CD Na přiloženém CD naleznete tyto soubory: redme.txt seznam souboru CD složka dokumentace obsahuje vlastní text BP složka spustitelný program obsahuje spustitelný program mariáše-čtyřky ve formátu.jar složka zdrojové soubory obsahuje zdrojové texty programu

PŘÍLOHA B. SEZNAM LITERATURY 29 B Seznam literatury [1] Matthew L. Ginsberg: GIB: Steps toward an expert-level bridge-playing program. CIRL, 1999. [2] Schaeffer Jonathan. http://www.cs.ualberta.ca/~jonathan/courses/657/notes/. [3] Mařík V., Štěpánková O., Lažanský a kolektiv: Umělá inteligence (1). Academia, Praha, 1993. [4] Slavomír Ravik: Mariáš. Astrosat s.r.o, 1996. [5] Horáček Jan: Příručka křížového pětníkového mariáše. Praha, 1985. [6] Ivor Horton. Java 5. Neocortex spol s.r.o, Praha, 2005.