PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY ROČNÍKOVÝ PROJEKT KLOKAN Květen 2010 Libor Valouch Informatika, II. ročník 1
Abstrakt Dokumentace ročníkového projektu Klokan. Jedná se o strategickou deskovou hru. Vytvořenou ve vývojovém prostředí Microsoft Visual Studio 2008 v jazyce C# na platformě.net Framework 3.5. 2
Obsah 1. Popis a analýza Požadavky na projekt Hra Klokan Cíl hry Výchozí situace Pravidla Hry Ukončení hry 2. Uživatelská část Sestavení aplikace Odstranění Spuštění Herní tipy 3. Programátorská část Úvod Vysvětlení pojmů Myšlenka Přehled knihovny Klokan.cs Přehled souboru FormMain.cs 4. Reference 3
1. Popis a analýza Požadavky na projekt korektní implementace pravidel hry (nemožnost provést tah odporující pravidlům, správné ukončení hry, a podobně) algoritmy pro herní strategii, nastavitelná obtížnost hry v adekvátním rozsahu možnost hry dvou lidí, člověka proti počítači, a počítače proti počítači možnost nastavit a kdykoliv změnit obtížnost i v průběhu hry možnost kdykoliv zaměnit počítačového a lidského hráče, nebo černého a bílého hráče (bez ohledu na to, je-li hráčem člověk nebo počítač, změna i v průběhu hry) nápověda nejlepšího tahu ukládání a načítání (ukončených, rozehraných) partií undo/redo tahů do libovolné úrovně prohlížení historie tahů (přehledné zobrazení provedených tahů) zpětné přehrání partie po jejím dokončení (replay) s možností zastavení přehrávání, pohybu v historii stavů hry a opětovného rozběhnutí hry ze zvoleného stavu. Při zastavení přehrávání možnost začít novou hru nebo otevřít uloženou hru. robustnost (program musí reagovat správně na nesprávné uživatelské vstupy, zejména ovládání, vadný formát souboru apod., aplikace nesmí havarovat) vestavěná nápověda grafické uživatelské rozhraní (GUI) zpracované podle standardů program ve spustitelné formě, je-li to pro zprovoznění aplikace nutné pak také instalátor (v odůvodněných případech je přípustná spustitelnost z vývojového prostředí) kompletní zdrojové kódy programu včetně dalších částí nutných pro sestavení aplikace programátorská dokumentace k projektu vytvořená pomocí závazného stylu (PDF verze a zdrojová verze). Obsahuje zejména popis struktury kódu, algoritmy hry včetně herní strategie, postup pro sestavení aplikace. Dokumentace nemusí obsahovat uživatelskou příručku. Hra Klokan Klokan strategická desková hra, jejíž autorem je John Flagg. Hra je určena pro dva hráče, hraje se na čtvercové hrací desce 8 8 polí s 16 bílými a 16 černými kameny (klokany). Ve světě je tato hra známá v několika variantách pod různými názvy (Kangaroo: The Jumping Game, Jump, Kangaroo, Känguruh). Cíl hry Zajmout co nejvíce soupeřových kamenů. Výchozí situace Na začátku hry stojí bílé kameny v prvních dvou řadách, černé kameny pak v posledních dvou řadách. 4
Pravidla Hry Hru začíná bílý hráč, poté se hráči v tazích střídají. Skákat je povoleno v libovolném ortogonálním či diagonálním směru, pokud přeskakovaný kámen leží na sousedním poli a další pole ve směru skoku je volné. Vícenásobné přeskoky jsou dovoleny, hráč jich nemusí využít v plném rozsahu. Mezi jednotlivými přeskoky v rámci vícenásobného skoku může být libovolně změněn směr skákání. Přeskočí-li hráč soupeřův kámen, je tento kámen zajat a odstraněn z desky. Vlastní kámen přeskokem zajat není. Pokud se kámen dostane do poslední řady, je zdvojen (vyměněn za kámen s korunou). Pro zdvojený kámen však platí stejná pravidla jako pro obyčejný kámen. Ukončení hry Pokud hráč ztratil všechny své kameny, prohrál. Pokud hráč nemůže táhnout nebo pokud v posledních 20 tazích nebyl žádný kámen zajat či zdvojen, hra končí. Sečtou se zbývající kameny, zdvojený kámen se počítá jako dva obyčejné. Vítězí hráč, kterému zbyly kameny s větší hodnotou. 2. Uživatelská část Sestavení aplikace Hru je nutné nainstalovat spuštěním instalátoru setup.exe ve složce bin. Instalátor zkontroluje přítomnost platformy.net Framework, pokud ji uživatel již nemá, nabídne její instalaci, dále pokračuje v instalaci samotné hry. Budou vytvořeni zástupci v nabídce Start-Programy a na Ploše. V adresáři C:\Program Files (nebo jiném zvoleném při instalaci) bude vytvořena složka Klokan s vlastní hrou. Odstranění Aplikaci lze odinstalovat přes Start-Ovládací Panely-Přidat odebrat programy nebo spuštěním instalátoru setup.exe. Spuštění Provedeme pomocí jednoho ze zástupců, nebo z adresáře \Klokan\Setup Klokan souborem Klokan.exe 5
Herní tipy: Ve výchozím stavu se hra nachází v režimu hry s počítačem. Jiný způsob lze zvolit v nastavení. Tah lze provést kliknutím na kámen označený kurzorem ruky, zvýrazní se modrým rámečkem a následně provádíte tah (místo položení je také označeno rukou), pro jeho ukončení klikněte na zvýrazněný kámen. Chcete-li zrušit započatý tah, klikněte opět na zvýrazněný kámen. Pro nápovědu nejlepšího tahu zvolte tlačítko "Nejlepší tah". Vaši hru můžete prohlížet výběrem tahu z historie, zobrazí se odpovídající rozestavění kamenů. Pomocí tlačítka "Replay" lze přehrávat historii od zvoleného tahu. Pokud se rozhodnete změnit svůj odehraný tah, je možné od zvoleného tahu v historii pokračovat ve hře. Hru dvou počítačů lze zastavit a opět spustit pomocí tlačítka "Hra počítačů". Ve spodní části jsou uvedeny informace o stavu hry. 3. Programátorská část Úvod Aplikace je rozdělena do dvou hlavních souborů, knihovna Klokan.cs spravuje logiku hry a soubor FormMain.cs který řídí grafické uživatelské rozhraní. Vysvětlení pojmů Skok: jediné přeskočení kamenů. Půltah: tah jednoho hráče, všechny skoky od započetí až po jeho dokončení. Tah: jeden půltah obou hráčů. Figurka = Kámen Myšlenka Ve hře jsou zavedeny tři základní módy, hra dvou lidí, kombinace hry člověka s počítačem a hra dvou počítačů. Hlavní běh hry je rozdělen do dvou automatů, první umožňuje půltahy lidského hráče a druhý počítače. Zvolené herní módy jich vhodně využívají k vybranému způsobu hry. Přehled knihovny Klokan.cs Struktura Pozice: obsahuje řádek a sloupec Třída Půltah: obsahuje seznam typu pozice a metody pro práci s ním Enum Barva: bílá, černá pro rozlišení hráčů Třída Figurka: obsahuje barvu a údaj o zdvojení 6
Třída deska: Hrací desku zastupuje dvourozměrné pole typu Figurka. Pro výpočet tahů počítače je využit algoritmus Minimax. Kontrola opakujících se tahů probíhá ukládáním do zásobníku historiebuffer a kontrolováním opakování nad limit. Přehled důležitých metod: TestOpakovani kontrola opakovaných půltahů. NovaHra nastavení figurek v hrací desce na výchozí hodnoty, vynuluje. historii opakování. Kontrola přetížená metoda určující korektnost zvolené pozice a skoku dle pravidel. Skakej provádí skok, změní pozici figurek v desce a vyhazuje je. HodnotaDesky vrací rozdíl figurek hráčů, tuto hodnotu využívá Minimax. HledejPultah přetížená metoda pro vyhledávání půltahů počítače, algoritmus Minimax. VyberPultah spustí hledání půltahu a náhodně vybírá ze seznamu nejvýhodnějších půltahů Hrej zahajuje výpočet počítače Přehled souboru FormMain.cs Tento soubor obsahuje: Enum Mode: typ hry člověka s člověkem, člověka s počítačem nebo dvou počítačů. Zvolený mód má vliv na chování ovládacích prvků aplikace. Enum FigurkaGraf: pro volbu obrázku figurky deskagraf: dvourozměrné pole typu FigurkaGraf, deska grafických figurek Třídu ZaznamHistorie: vytváří jednotlivé záznamy historie odehraných půltahů Automat půltahu člověka s metodami: FigurkaClick smyčka půltahu, označování figurky ZacatekPultahu zahájení půltahu člověka PokracovaniPultahu skládání půltahu, zobrazování skoků KonecPultahu přidání půltahu do historie, při hře s počítačem se odehraje jeho půltah Automat půltahu počítače s metodami: HrejPocitac smyčka půltahu počítače, volá paralelní vlákno výpočtu Vypocet metoda pro paralelní výpočet půltahu počítače ZobrazKrok animace skoků počítače (voláno pomocí Invoke v primárním vlákně) ZobrazPultah zobrazení celého půltahu počítače (také voláno pomocí Invoke) 7
další důležité metody: Zobraz nastaví aktuální rozestaveni logické desky do grafické, volá metodu Vytvoř obrázek a aktualizuje status strip. VytvorObrazek vykresluje grafickou desku (rozdělení políček, figurky a jejich označení) NovaHra zahájí novou hru (reset historie pultahů, a logické desky) ZmenBarvu hlídá opakování stejných půltahů, přidává půltahy do historie PovolNastaveni aktualizuje ovládací prvky aplikace které je možno v daný okamžik použít KonecHry zobrazí výsledky hry ve status stripu a vyvolá dialog s vítězným hráčem KorekceHistorie mazaní zbytku historie půltahů za označením při pokračující hře Události: FormMain_Load výchozí nastavení hry paneldeska_mousemove nastavuje pozice myši na desce, zobrazuje tool tip názvu políčka, zobrazuje ruku nápovědy skoku dle pravidel listbox_selectedindexchanged zahraje vybraný půltah z historie ZobrazHistorii zobrazí vybraný stav hry z historie listbox_mousehover zobrazení tool tipu historie toolstripbuttonnejpultah_click buton s nápovědou nejlepšího půltahu toolstripbuttonhrejfurt_click buton hry dvou počítačů toolstripbuttonreplay_click přehrání historie toolstripbuttonzpet_click posuv v historii zpět toolstripbuttonvpred_click posuv v historii vpřed novahratoolstripmenuitem_click menu nová hra nacisthrutoolstripmenuitem_click menu otevřít hru ulozithrutoolstripmenuitem_click menu uložit hru konectoolstripmenuitem_click menu konec hry nastavenítoolstripmenuitem_click menu dialog nastavení navodtoolstripmenuitem_click menu dialog návod oprogramutoolstripmenuitem_click menu dialog o programu FormMain_FormClosing dialog uložení hry 8
4. Reference Martin dostál http://dostal.inf.upol.cz/ps1-2.html Wikipedie http://cs.wikipedia.org/wiki/hlavn%c3%ad_strana Poznáváme C# a Microsoft NET http://poznavame-c-msnet.wz.cz/ 9