Semestrální projekt Small Talk

Desková hra Othello

Adam Sádovský

2004/05






Historie hry

Othello je nový název původní hry Reversi, která se v 19.století objevila v Anglii, kde se však neujala. Nově se vrátila do povědomí až v roce 1971 v Japonsku, již pod názvem Othello. Velmi úspěšná je hra od roku 1979, kdy byla v USA založena asociace hráčů organizující turnaje a žebříčky výsledků.


Informace o hře

Dva hráči, běžně černý a bílý, hrají na čtvercové hrací ploše o velikosti 9x9 polí s kameny jediného druhu. Počet možných tahů je 10^28, a přestože neexistuje jediné absolutně správné řešení (nebo-li není známý postup pokaždé vedoucí k výhře), byl v roce 1980 napsán program The Moor, který porazil úřadujícího mistra světa a od té doby se kybernetičtí protivníci pohybují na úrovni světových šampionů. V roce 1997 porazil program umělé inteligence Logistello, lidského šampiona Takeshi Murakama 6:0.


Pravidla hry

Uprostřed hracího pole jsou do kříže postaveny čtyři kameny dvou různých barev. Začíná bílý hráč, který může položit svůj kámen na kterékoli volné pole a to tak aby alespoň v jednom z osmy směrů od tohoto pole ležel kámen nebo kameny soupeře za kterými je opět kámen bílý. Existuje-li jen jediný takový tah, je bílý hráč nucen tímto způsobem táhnout. Pokud žádný takový tah neexistuje, musí bílý hráč pasovat, nebo-li předá tah protivníkovi. Po položení bílého kamene se veškeré černé kameny nacházející se mezi jedním bílým a jedním položeným kamenem změní na bílé. Pak stejným způsobem hraje hráč černý.

Hraje se do okamžiku, kdy již ani jeden z hráčů nemá možnost tahu. Vyhrává ten, kdo má na ploše nejvíc vlastních kamenů.


Ovládání programu Othello

Aktuální verze v0.1 podporuje hru dvou lidských hráčů na jednom počítači. Spustí se ze systému Visual Works jako nová instance třídy Othello (Othello new). Následně se otevře okno s hrací plochou. V hlavičce okna je zobrazen hráč, který je na právě na tahu.

Kliknutím do hrací plochy se na volné pole umístí hráčův kámen. Veškeré ilegální tahy jsou hlášeny a stejně tak i pasování hráče. Po umístění kamene na legální pozici dojde k automatickému přebarvení kamenů, tak jak je to popsáno v pravidlech hry.

Závěr hry je hlášen oznamovacím oknem s informací, který hráč zvítězil.


Implementace Othella v programovacím jazyku Small Talk

Program využívá principu MVC. Veškeré grafické prvky dětí ze třídy GrafikaHry a ta zase z UI.View. Tím je zaručeno automatické překreslovaní okna a zachytávání událostí. Kliknutí levého tlačítky myši odchytává instance třídy RozhraniController, která je spřažená s třídou GrafickáPlocha.

Model programu pracuje s třídami Othello, PlochaOthello, PolickoOthello a KamenOthello. Zjištěné souřadnice kliknutí se převedou na souřadnice polí hrací plochy a následně je spuštěna metoda addKamen ze třídy HraOthello, která spustí metodu polozKamen ze třídy PlochaOthello. Tato metoda prověří zda požadovaná operace je legální. Zaprvé zjistí zda je pole prázdné a následně spustí metodu prohledejSmery ze stejné třídy.


Metoda prohledejSmery

Jejím úkolem je ověřit jak je to s okolím požadovaného pole. Pracuje tak, že se zeptá konkrétních políček zda v prohledávaném směru leží řada kamenů jiné barvy, než má právě hrající hráč, ukončená kamenem barvy aktuálního hráče. Políčko se zeptá kamene, který na něm leží, zda je jeho barva správná. Kámen odpoví buď ano a nebo vrátí takovou hodnotu jakou mu sdělí kámen ležící vedle. Jenže kámen se neptá svého souseda přímo, ale zeptá se přes plochu, která překontroluje hranice a popřípadě se zeptá políčka, které zase zjistí, zda na něm kámen vůbec leží a to se konečně zeptá kamene.

V případě že jeden z kamenů vrátí true, zbytek zřetězených volání také vrátí true. Kameny však v tuto chvíli nemění svou barvu, protože stejné volání se využívá i pro zjišťování všech možných tahů. Kameny jejichž barva se má změnit se uloží do listu a je změněna následně až po skončení metody prohledejSmery.


Hledání konce hry a pasování

Po každém tahu se provede metoda prohledejSmery na všechna volná pole a přitom se spočte počet možných tahů. Neexistuje-li možný tah pro aktuálního hráče, provede se tato metoda znovu, ale pro druhého hráče. Je-li druhý průchod bez možnosti tahu, pak následuje konec hry, jinak aktuální hráč pasuje.



Poznámky

Grafika není s modelem spojena pomocí value holderu, jelikož na to nezbyl čas. Controller prostě volá model a model řekne grafice aby se aktualizovala. RozhraniController je spřažen s grafickou plochou, ale každý nově umístění kámen do plochy přebere kontrolu nad celou plochou a tak je následně plocha znovu položená nad všechny prvky.

Diagram


Zdroj