Provozně ekonomická fakulta Mendelova zemědělská a lesnická univerzita v Brně
Webový portál deskových her Bakalářská práce
Vedoucí práce: Ing. Ondřej Popelka
Jan Hermann
Brno 2009
Rád bych na tomto místě poděkoval vedoucímu mé práce panu Ing. Ondřeji Popelkovi za odborné vedení, cenné rady a věcné připomínky.
Prohlašuji, že jsem tuto práci vyřešil samostatně s použitím literatury, kterou uvádím v seznamu.
V Brně dne 5. května 2009
Abstrakt Hermann, J. Webový portál deskových her. Bakalářská práce. Brno, 2009. Práce se zabývá implementací webového portálu, který umožňuje hraní deskových her pro dva hráče. Jsou popsány tři vybrané deskové hry a způsob jejich integrace do webového portálu. V práci jsou srovnány různé metody realizace uživatelského rozhraní pro hráče. Hotové řešení je umístěno na veřejný webový server, kde je dostupné hráčské obci.
Klíčová slova webový portál, deskové hry, hrací deska
Abstract Hermann, J. Web portal of board games. Bachelor thesis. Brno, 2009. This thesis is focused on implementation of web portal, which enables playing board games for two players. It describes three chosen board games and the way of their integration to the web portal. In the thesis are compared various methods of user interface realisation. Finished solution is located on public web server, where is available for players. Key words web portal, board games, gameboard
Obsah 1
2
Úvod a cíl práce ............................................................................................... 7 1.1
Úvod .......................................................................................................... 7
1.2
Cíl práce ..................................................................................................... 7
Metody a výchozí stav .................................................................................... 8 2.1
2.1.1
Historie deskových her .................................................................... 9
2.1.2
Pravidla hry Korálky ...................................................................... 11
2.1.3
Pravidla Wongovy hry................................................................... 12
2.1.4
Pravidla hry Connect6 ................................................................... 13
2.2
3
Deskové hry .............................................................................................. 8
Použité technologie................................................................................ 14
2.2.1
Jazyk HTML .................................................................................... 14
2.2.2
Jazyk PHP ........................................................................................ 15
2.2.3
Databáze MySQL ............................................................................ 15
Řešení a implementace ................................................................................. 16 3.1
Databáze .................................................................................................. 16
3.1.1
ER diagram ...................................................................................... 17
3.1.2
Popis schématu databáze .............................................................. 17
3.1.3
Možnosti rozšíření databáze ......................................................... 18
3.2
Řešené hry ............................................................................................... 19
3.2.1
Korálky ............................................................................................. 19
3.2.2
Wongova hra ................................................................................... 21
3.2.3
Connect6 .......................................................................................... 23
3.2.4
Další vhodné hry ............................................................................ 25
3.3
Implementace aplikace .......................................................................... 25
3.3.1
Hrací deska ...................................................................................... 26
3.3.2
Ukončení partie ............................................................................... 28
3.3.3
Výpočet ratingu hráče .................................................................... 29
3.3.4
Čas na tah a extra čas ..................................................................... 30
[5]
3.3.5
Modularita ....................................................................................... 31
3.3.6
Grafická úprava .............................................................................. 31
4
Závěr ............................................................................................................... 33
5
Literatura ........................................................................................................ 34
Přílohy .................................................................................................................... 35
[6]
1 Úvod a cíl práce 1.1 Úvod Deskové hry jsou jedním z nejstarších zdrojů relaxace a tvůrčího růstu člověka. Jsou to jedny z prvních volnočasových aktivit, které byly vůbec objeveny. První nález deskové hry pochází z hrobek z Egypta okolo roku 3500 př. n. l. Není proto překvapivé, že jsou deskové hry v dnešním světě atraktivní záležitostí, a že poptávka po nich stále roste. Každým rokem přijde na trh několik stovek nových titulů a velká část z nich je zároveň vydávána i elektronicky. Jsou dostupné jak pro stolní počítače nebo herní konzoly, tak pro mobilní přístroje. Stále však existuje značné množství deskových her, které existují pouze na podložce či na papíře a tudíž je nutné, aby se hráči, kteří chtějí hrát právě onu deskovou hru, sešli. K tomuto problému se přidává ještě fakt, že cena papírové deskové hry se pohybuje řádově ve stovkách korun.
1.2 Cíl práce Cílem této práce je z dostupné literatury a internetových zdrojů implementovat tři vhodné deskové hry pro webový portál, a umožnit tak uživatelům internetu, hrát tyto hry on-line. Zvolené deskové hry budou patřit mezi tahové a nebude tak potřeba, aby soupeři byli on-line zároveň. Vzhledem k tomu, že v takovém případě může odehrání tahu jednoho hráče trvat i několik hodin, budou vybrány pouze takové hry, ve kterých je zapotřebí právě dvou soupeřů. Pro tyto duely bude nutné vytvořit grafické rozhraní. Jedná se o jednotlivé hrací desky, figury či kameny pro každou hru a prostředí pro hraní her. Aplikace bude umístěna na internetový server a bude obsahovat instrukce pro snadnější orientaci na portálu. K tomuto účelu bude zajištěna doména a www hosting, na kterém bude webový portál umístěn.
[7]
2 Metody a výchozí stav 2.1 Deskové hry Deskové hry jsou společenské hry hrané obvykle na stole. Deskové se nazývají proto, že k jejich hraní potřebujeme hrací desku, na které je určitý plán hry. Nejčastěji využívaný je tzv. čtvercový model nebo také drátěný model či šachovnice, což jsou jiné názvy pro ten samý typ desky. Na desku se kladou nejčastěji kameny nebo figury, které se mohou následně odstraňovat či posouvat. Pravidla jednotlivých her stanoví, na jaké desce se hra hraje, kolik hráčů je pro hru třeba, jakými kameny se bude hrát a jak je možné s kameny manipulovat. Většina deskových her patří mezi deskové hry strategické. Jejich cílem je umisťovat kameny tak, aby byl dosažen určitý tvar, nejčastěji řada kamenů, dále pak obstoupit či blokovat protihráčův kámen anebo zabrat na desce větší území než protihráč. Ze všech možných dělení deskových her jsou vybrány tyto (deskovehry.info, 2009): •
•
•
podle hrací desky o abstraktní (geometrické) o čtvercové o obdélníkové o hexagonální o trojúhelníkové o jiné podle ovlivnění náhodou o bez náhody o s náhodou o se skrytou informací Jsou to hry jako například Inkognito nebo Scrabble. podle cíle o mankalové hry Mankala je jedna z nejstarších her hraná přemisťováním kuliček či semen mezi jamkami. o slovní hry Například slovní fotbal. o šachové hry o vrhcábové hry Přemisťování kamenů po desce pomocí hracích kostek. o spojovací hry
[8]
Například hra TwixT, kde je cílem spojit protilehlé strany desky. řada kamenů Piškvorky vytváří pětice kamenů. zabrat území Ve hře Halma obsazením protějšího dvoru. zajmout kameny Například hra Go. jiný
o o o o
2.1.1 Historie deskových her Historie deskových her uváděna na webu (deskovéhry.info, 2009): •
•
•
•
Starověk – Deskové hry mají velmi dlouhou historii, provázejí člověka více než 5 000 let. Objevovaly se ve starých civilizacích, což dokazují archeologické nálezy a obrázky na zdech. Z pozdější doby se dochovaly jejich obrázky a popisy v knihách. Nejstarší deskové hry, které byly objeveny v Egyptě, pocházejí z období 3500 let před naším letopočtem. Deskové hry objevené v Asii jsou mladší, jsou přibližně ze 4. století př. n. l. Také ve starověkém Řecku a Římě byly deskové hry velmi oblíbené. Středověk – Přestože církev hrám nepřála, byly to právě křížové výpravy do Svaté země, díky nimž se do Evropy dostávají deskové hry. Hrály se zpočátku především ve šlechtických sídlech, později se i přes zákazy, které je možno dodnes najít ve starých městských výnosech i zemských zákonech, rozšířily do měst a na venkov. Z této doby pochází jeden z nejdůležitějších a nejstarších dokumentů o hrách – „Kniha her“ (Libro de Juegos) z roku 1283 napsaná na příkaz kastilského krále Alfonse X. Novověk – Jedním z prvních, kteří pochopili účinek hry, byl Jan Amos Komenský. Zastával se nejen šachů, které měly mezi ostatními hrami výjimečné postavení, ale i vrhcábů. Jejich obrázek dokonce zařadil do Světa v obrazech. Konec 19. století dal vzniknout mnoha hrám, které se stále hrají a v mnoha zemích jsou populární. Patří mezi ně například Othello a Halma. Současnost – V současné době prožívají deskové hry obrovský rozkvět. Ke klasickým deskovým hrám jako jsou šachy, dáma, člověče nezlob se, mlýn apod. přibyla široká rodina moderních deskových her.
[9]
Přibližná časová osa: • • • • • • • • • • • • •
• • • •
3500 př. n. l. – Senet (nález v hrobkách v Egyptě). 3000 př. n. l. – Mehen (nález v Egyptě, hrací kameny měl tvar lvů). 2560 př. n. l. – Královská hra z Uru (na území bývalého Sumeru nalezeny hrací desky). 2500 př. n. l. – Malby her Senet a Han . 2000 př. n. l. – Malba v hrobce v Benihassanu – 2 neznámé hry (o jedné se předpokládá, že byla určena pro hru Tau). 1500 př. n. l. – Hra Liubo vytesána na trámu z modrého kamene. 1400 př. n. l. – Na střeše chrámu Kurna vyřezány desky na hry Alquerque, Mlýnek, Mlýn a pravděpodobně Mankala. 200 př. n. l. – Čínská deska na Go, která pochází z tohoto období, je uložena v muzeu v Pekingu (nicméně hra Go je mnohem starší). 116-27 př. n. l. – Dílo Marcuse Terentius Varra nazvané Lingua Latina X obsahuje nejstarší zmínku o hře Latrunculi. 79-8 př. n. l. – Shuo yuan Liu Xianga zmiňuje ve svém díle hru Xiangqi. 8 př. n. l. až 8 n. l. – V Ovidiově díle Umění milovati je nejstarší zmínka o hře Ludus Duodecim Scriptorum (předchůdce Vrhcábů). 5. století – V severní Evropě se hrají hry rodiny Tafl (Vlci a ovce, Tablut atd.). 7. století – Nejstarší známá zmínka o hře Čaturanga (předchůdce hry Šachy) v sanskrtské básnické sbírce Vasavadatta, kterou napsal Subandhu. 1888 – Vynalezena hra Reversi (původní název hry dnes známé také jako Othello). 80. léta 19. století – Vytvořena hra Korálky Davidem Blamerem Jr. 1999 – Vymyšlena Wongova hra Garryho Wonga. 2005 – Profesor I-Chan Wu představuje hru Connect6.
Poslední tři body seznamu časové osy zachycují hry Korálky, Wongova hra a Connect6. Na první pohled nejsou tyto časové milníky ani tyto hry tak důležité, jako ostatní položky časové osy, ale právě tyto tři hry byly důkladnou analýzou vybrány pro zpracování do herního portálu. Jedná se o strategické, tahové, deskové hry, které se hrají na čtvercové desce s drátěnou strukturou o určitých rozměrech. Všechny hry jsou navrhnuté pro duelové souboje, čili jsou to hry pro dva hráče.
[10]
2.1.2 Pravidla hry Korálky Hra Korálky vznikla v 80. letech 20. století a autorem této deskové hry je David Balmer Jr. Korálky se hrají na čtvercové desce o rozměrech 10×10 políček a potřebujeme na ni kameny a žetony dvou barev. Hra začíná na prázdné desce, kam začínající hráč umístí první kámen své barvy. Hráči se v tazích pravidelně střídají a každý položí vždy jen jeden kámen své barvy. Hráč může táhnout pouze na ta pole, které nevlastní jeho protivník. Hráč se stává majitelem pole, pokud toto pole sousedí ortogonálně nebo diagonálně s více vlastními než se soupeřovými kameny. Vlastnictví jednotlivých polí označují žetony v hráčově barvě. Hru vyhrává ten hráč, kterému se podaří provést poslední tah. Obrázek Obr. 1 zobrazuje hru, kterou hráč s modrými kameny právě vzdal.
Obr. 1: Příklad vzdané partie Korálků
Z obrázku je patrné, že hráč s oranžovými kameny získal nejvíce polí na hranách desky. Tato pole (obzvláště ta v rozích) je pro soupeře velmi obtížné
[11]
získat, protože přístup k nim je omezenější, než k těm, uvnitř hrací desky. Hráč, kterému se povede zaujmout více polí po stranách desky, zpravidla zvítězí.
2.1.3 Pravidla Wongovy hry Autorem Wongovy hry je Gary Wong a světlo světa spatřila v roce 1999. Wongova hra se hraje na čtvercové desce o rozměrech 9×9 políček a je na ni potřeba kamenů dvou barev. Hra se dělí na dvě herní fáze. První fáze hry začíná na prázdné desce. Hráči se po celou dobu hry v tazích pravidelně střídají a vždy položí jeden kámen své barvy. V první fázi smí hráč táhnout na libovolné volné pole. Jakmile oba hráči položí osm svých kamenů, končí osmé kolo partie a začíná druhá fáze hry. V druhé fázi hráči pokračují v kladení kamenů, ale nyní smí položit kámen jen na ta pole, která ortogonálně či diagonálně sousedí alespoň se dvěma kameny hráčovy barvy. Hráč, kterému se podařilo provést poslední tah, se stává vítězem. Na obrázku Obr. 2 je zobrazen stav hry po 14. tahu hráče s fialovými kameny.
Obr. 2: Příklad rozehrané partie Wongovy hry
V této hře je potřeba nepodceňovat první fázi hry a strategicky rozmístit své kameny tak, aby každý z nich byl schopen posloužit jako podpůrný kámen
[12]
pro nově pokládaný ve druhé fázi hry. Velmi výhodné jsou proto tahy ob jedno pole, a to jak v diagonálních, tak i v ortogonálních směrech.
2.1.4 Pravidla hry Connect6 Hru poprvé představil profesor I-Chan Wu na konferenci v Taipei v září roku 2005. Connect6 se hraje na desce o libovolných rozměrech (nejméně však 6×6 políček) a ke hře se používají kameny dvou barev. Začíná se na desce, na které má již druhý hráč položený jeden kámen své barvy. Hráči se v tazích pravidelně střídají a během jednoho tahu položí právě dva své kameny. Hráč může táhnout kamenem pouze na ta pole, která ještě nejsou obsazena jinými kameny. Hráč, kterému se podaří vytvořit ortogonální či diagonální řadu šesti kamenů své barvy, vítězí. Pokud je hrací deska zaplněna kameny, a tudíž není možné provést tah, nastává remíza. Na obrázku Obr. 3 je zobrazena skončená partie, kterou vyhrál hráč s kameny zelené barvy.
Obr. 3: Příklad skončené partie Connect6
[13]
Co se týče strategie pro hru Connect6, nabízí se několik variant pro úspěšné dokončení partie. Jednou z nich je takový postup hráče, kdy se snaží vytvořit odkrytou (na obou koncích řady má alespoň 2 volná pole) řadu 4 svých kamenů a jednu poloodkrytou (jeden z konců řady pokračuje alespoň dvěma volnými poli). Další variantou můžou být například dvě odkryté řady 4 kamenů. V obou variantách následuje vítězství v dalším tahu.
2.2 Použité technologie Webový portál bude naprogramován pomocí skriptovacího jazyka PHP. K zobrazení stránek www prohlížečem bude využit jazyk HTML. Aplikace bude uložena na pronajatém diskovém prostoru a data budou uchovávána databází MySQL. Hotový portál bude dostupný na zakoupené doméně http://jeux.cz/. Tyto technologie byly vybrány s ohledem na cenu a nabízené služby. Většina českých poskytovatelů webhostingu nabízí právě jazyk PHP s databází MySQL, a tak byl vybrán ten, který nejlépe vyhověl potřebám webového portálu deskových her a zároveň byl cenově dostupný.
2.2.1 Jazyk HTML V roce 1989 spolupracovali Tim Berners-Lee a Robert Caillau na propojeném informačním systému pro CERN, výzkumné centrum fyziky poblíž Ženevy ve Švýcarsku. V té době se pro tvorbu dokumentů obvykle používaly jazyky TeX, PostScript a také SGML. Berners-Lee si uvědomoval, že potřebují něco jednoduššího a v roce 1990 byl tedy navržen jazyk HTML (HyperText Markup Language) a protokol pro jeho přenos v počítačové síti – HTTP (HyperText Transfer Protocol – přenosový protokol hypertextu). Zároveň také Tim BernersLee napsal první webový prohlížeč, který nazval WorldWideWeb. (Wikipedia.org, 2009) Jazyk HTML je značkovací jazyk, na který existuje specifikace a má tedy přesný popis své struktury. Tato struktura se skládá z prvků, atributů, entit a komentářů. Prvky jsou tvořeny počáteční a koncovou značkou (výjimku tvoří nepárové značky) mezi nimiž se nachází tělo prvku. Součástí počáteční značky je jméno prvku a může dále obsahovat atributy, na jejichž pořadí nezáleží. Koncová značka se skládá pouze ze jména prvku uvozeného lomítkem. Tělo prvku musí obsahovat buď další prvek nebo text či entity, popřípadě komentář. Atributy zahrnují jméno atributu a jeho hodnotu. Entity jsou číselné či symbolické výrazy reprezentující znaky, jež se buď obtížně zadávají pomocí klávesnice,
[14]
nebo jsou sami řídícím znakem HTML jazyka. Entita vždy začíná znakem & a končí středníkem. Komentář je kód, který má pouze informativní charakter a interpret HTML jazyka ho přeskakuje. (W3.org, 2009)
2.2.2 Jazyk PHP PHP je rekurzivní zkratka pro PHP: Hypertextový preprocesor. Je to skriptovací programovací jazyk, určený především pro programování dynamických internetových stránek. Nejčastěji se začleňuje přímo do struktury jazyka HTML, XHTML1, což přispívá k rychlé tvorbě dynamických webových aplikací. PHP lze použít i k tvorbě konzolových a desktopových aplikací. (PHP.net, 2009) PHP skripty jsou prováděny na straně serveru. Syntaxe jazyka je inspirována více programovacími jazyky a to především jazyka C, Perl a Java. Díky tomu, že PHP kombinuje vlastnosti více programovacích jazyků, nechává vývojáři částečnou svobodu v syntaxi.
2.2.3 Databáze MySQL MySQL je relační databázový systém a je vytvořený firmou MySQL AB. Je považován za úspěšného průkopníka dvojího licencování – je k dispozici jak pod bezplatnou licencí GPL2, tak pod komerční placenou licencí. (MySQL.com, 2009) Komunikace s databází MySQL probíhá pomocí jazyka SQL. Podobně jako u ostatních SQL databází se jedná o dialekt tohoto jazyka s některými rozšířeními. Pro svoji přenositelnost (díky níž jej lze instalovat na Linux, MS Windows, ale i další operační systémy), výkon, snadné konfiguraci, propracovanému rozhraní a především díky tomu, že se jedná o volně šiřitelný software, má vysoký podíl na v současné době používaných databázích. V kombinaci s operačním systémem Linux, databázovým systémem (obvykle MySQL) a webovým serverem Apache je často využíván k tvorbě webových aplikací. Pro tuto kombinaci se vžila zkratka LAMP3. (Wikipedia.org, 2009)
Extensible hypertext markup language – rozšiřitelný HTML. General Public License je licence pro svobodný software. 3 Spojení Linux, Apache, MySQL a PHP. 1 2
[15]
3 Řešení a implementace Deskové hry, které se budou na popisovaném webovém portálu hrát, jsou tahové. To znamená, že hráč po svém tahu čeká, dokud neodehraje druhý hráč, aby mohl pokračovat ve hře. Hráči si tak mohou svůj tah dobře rozmyslet, protože nejsou vázáni na to, aby byli oba zároveň on-line, pokud chtějí hrát. V opačném případě by dlouhé rozmýšlení druhého hráče zdržovalo. Pokud některý z hráčů bude chtít hrát novou partii, bude muset čekat, než se jiný hráč rozhodne hrát tu samou hru. Žádný hráč předem neví, se kterým hráčem bude partie rozehrána. Není možné si soupeře vybrat. Tento přístup je zvolen proto, aby komunita hráčů zůstala otevřená i pro nové hráče. Jinak by se mohlo stávat, že se hráč, jenž se rozhodne hrát novou hru, vůbec k partii nedostane, ačkoli od jeho žádosti již proběhne několik partií hráčů, kteří se navzájem vybrali.
3.1 Databáze Pro implementaci webového portálu byla zvolena MySQL databáze. Před samotnou implementací však bylo nutné navrhnout schéma této databáze. Těžiště databázové struktury je v samotném hraní, čili návrh databáze obsahuje tabulku s hráči, vazbu na to, že hráči se účastní nějakých partií, tyto partie se skládají z jednotlivých tahů a tahy obsahují seznam souřadnic, na které hráč táhl. Pro potřeby portálu je potřeba zavést také tabulky uchovávající rating hráče a dále hry, které je možné hrát, v jakých stavech se tyto hry mohou nalézat a zda je pro hráče v danou chvíli možno přiřadit soupeře.
[16]
3.1.1 ER diagram
Obr. 4: ER diagram
Symbolem žlutého klíče se značí sloupce s primárními klíči. Prázdné kosočtverce s fialovým obvodem udávají, že jde o sloupec s referencí na jiný a jejich vztah je zaznačen přerušovanou čarou. Plné čáry značí vztah, kde referenční sloupec je zároveň primárním klíčem.
3.1.2 Popis schématu databáze Podle názvu atributů entitně relačního schématu nemusí být vždy na první pohled patrné, co je v něm uloženo za informaci, proto následující seznam tabulek popisuje blíže jejich obsah. •
Hraci – ukládá základní herní informace o uživateli systému, jako je uživatelské jméno, heslo k jeho hernímu účtu, cesta v souborovém systému k jeho fotce, skutečné jméno a příjmení uživatele, kontaktní email, čas a datum registrace, čas a datum posledního přihlášení a
[17]
•
• • • • • • •
hodnotu času, který může hráč vyčerpat na prodloužení limitu pro odehrání. Partie – tato tabulka obsahuje informace o tom, kdo s kým soupeří v dané partii, uchovává název souboru aktuální herní desky, stav, v jakém se partie nachází (rozehrána, ukončena vítězstvím, prohrou či remízou), typ hry, kterou hráči hrají, hráče, který je právě na tahu a čas jako číslo v sekundách, kdy byl proveden poslední tah. Tahy – zaznamenává pořadí jednotlivých tahů, zprávu jednoho hráče druhému a váže se na konkrétní partii. Souradnice – uchovává informaci o jednotlivých souřadnicích příslušného tahu a je navázána k jednotlivým tahům. Stavy – jsou číselníkem s popisem stavů jejich hodnoty. Seznam_cekajicich – tato tabulka slouží k zaznamenání hráčova požadavku na vytvoření nové partie. Typy_her – obsahují název hry a název souboru určující modul pro práci na herním portálu. Ratingy – je hlavní tabulka pro záznam úrovně hráčových schopností v dané hře. Ip_adresy – pouze zaznamenávají IP adresy, ze kterých se hráči do systému přihlašují pro pozdější manipulaci.
Co se týče kódování obsahu těchto tabulek, je nastaveno na utf8_czech_ci.
3.1.3 Možnosti rozšíření databáze Návrh databáze vycházel z předpokladu, že všechny hry provozované na herním portálu, budou omezeny pro dva hráče. Z tohoto důvodu jsou oba hráči zaneseni do tabulky Partie jako hrac_1 (zpravidla začínající hráč) a hrac_2. Hráči se však nemusí ve svých tazích pravidelně střídat. Z návrhu databáze je patrné, že jednotlivé tahy mohou obsahovat libovolný počet souřadnic, kterými lze tah popsat. Díky této schopnosti databáze můžeme popsat dvojnásobný tah druhou dvojicí souřadnic oproti jedné při jednoduchém tahu. Zapisováním souřadnic tak můžeme popsat prakticky jakýkoliv tvar hrací desky, na kterou se dají aplikovat souřadnice (například deska s políčky tvaru šestiúhelníka tzv. hexagon). Schéma také umožňuje komentovat vlastní tahy nebo psát zprávu soupeři. Toho se využívá především na začátku hry, kdy si oba soupeři popřejí úspěch či ke konci, kdy jeden druhému pogratuluje k vyhrané partii.
[18]
3.2 Řešené hry Pro implementaci byly vybrány hry Korálky, Wongova hra a Connect6. Každá z těchto her reprezentuje jednu třídu deskových her a většina z nich není dostupná on-line. Tyto hry byly zvoleny, protože reprezentují určité skupiny her (viz kapitola 2.1). Ve hře Korálky je cílem hry získat větší území než soupeř tak, že v jeho okolí bude umístěno víc kamenů hráče než jeho soupeře. Wongova hra má specifikum v různých strategiích pro odlišné fáze hry, kdy se hráč snaží, zamezit protihráči táhnout. Ve hře Connect6 je dosaženo vítězství, pokud jeden z hráčů vytvoří souvislou řadu šesti kamenů. Programové řešení jednotlivých her bylo stěžejní náplní a vyskytlo se při něm množství netriviálních úkolů.
3.2.1 Korálky Hra Korálky má své specifikum ve vlastnění jednotlivých polí (viz kapitola 2.1.2). Hráč vlastní pole, jestliže ortogonálně nebo diagonálně sousedí s více jeho kameny než se soupeřovými kameny. Avšak hráč může táhnout na jakékoliv pole, které nepatří soupeři. To znamená, že mimo své vlastní pole, může táhnout i na neutrální pole a to je takové, které nesousedí s žádným kamenem, respektive sousedí se stejným počtem kamenů jak jednoho, tak i druhého hráče. Jako řešení byla zvolena (s ohledem na možnost snadného uložení do databáze) reprezentace hrací desky dvourozměrným polem obsahujícím celá čísla. Jelikož se nová hra začíná na prázdné desce, je celé pole vyplněno nulami. Nula v tomhle případě značí neutrální území, čili začínající hráč má možnost táhnout na jakékoliv políčko hrací desky. Začínající hráč si zvolí nějaké hrací pole a položí tam svůj kámen. V poli se na místě tohoto tahu přepíše nula konstantou 20, což vyjadřuje, že herní pole patří prvnímu hráči. Všechna okolní pole (v ortogonálním i diagonálním směru) zvýší svoji hodnotu o jedničku. První hráč tedy používá jen kladné hodnoty, proto mu připadnou pole s kladnou hodnotou. Následuje tah druhého hráče. Tento používá záporné hodnoty, tudíž nesmí hrát na pole s kladnou hodnotou. Pokud zahraje na nejbližší možné pole tahu prvního hráče, přepíše se tohle pole na konstantu −20, což opět vyjadřuje, že pole patří druhému hráči a všechna okolní pole sníží svoji hodnotu o jedničku. Toto způsobí, že některá pole, která po prvním tahu patřila prvnímu hráči, nabývají znovu hodnot nula, tudíž jsou společná, respektive neutrální a mohou na ně hrát oba hráči. Z tohoto principu vyplývá, že hratelná místa na desce jsou pouze ta, jejichž hodnota patří do intervalu <−8, 8>, protože s více kameny jedno pole sousedit nemůže. Mimo tento interval není možno odehrát nový kámen, protože jde o území, na kterých jsou již kameny položeny. Pro zobecnění algo-
[19]
ritmů pro práci s vlastnickými právy na jednotlivá pole, je interně hrací deska zvětšena o jeden řádek či sloupec na každé hraně. To umožňuje práci se všemi okolními poli i při tazích v rozích a po stranách hrací desky. Tyto přebytečné buňky se následně vypustí. Pro názornou ukázku práce tohoto algoritmu, se provede tah na výseku desky a bude se sledovat, jak se mění hodnoty v různých polích. A
B
C
D
I
0
0
-1
-20
II
1
1
0
-1
III
1
20
1
0
IV
1
1
1
0
Deska se nachází ve stavu, kdy první hráč táhl na pole [B, III] a druhý hráč na pole [D, I]. Již z tohoto stavu je patrné, že po prvním tahu bylo na poli se souřadnicemi [C, II] číslo 1, avšak po tahu druhého hráče, kdy všechny okolní pole snížily svou hodnotu o jedničku, se stalo opět neutrálním. Nechť teď první hráč zahraje na souřadnice [B, I]. A
B
C
D
I
1
20
0
-20
II
2
2
1
-1
III
1
20
1
0
IV
1
1
1
0
Jak je vidět, provedl se znovu přepočet polí a po tomto tahu zbývá druhému hráči jen málo vlastních či neutrálních polí pro tah, a to konkrétně na souřadnicích [C, I], [D, II], [D, III] a [D, IV]. Zjištění, zda hráčův tah byl poslední – jinak řečeno, že protihráč již nemá kam hrát – je docíleno tak, že po každém hráčově tahu spočítáme všechna neut-
[20]
rální a soupeřova pole. Pokud toto číslo nenabývá kladných hodnot, hráč, který táhl, vyhrál. Toto řešení je popsáno v následujícím pseudokódu:
if početHratelnýchPolíProtihráče == 0 { if početTvýchHratelnýchPolí == 0 ‚Remízoval jsi!‘ else ‚Jsi vítěz‘ }
Ve hře Korálky často nastává v určitém jejím herním vývoji moment, kdy již jeden z hráčů nemůže partii vyhrát, ačkoli má ještě relativně hodně možností kam táhnout. Následující pseudokód tento stav popisuje: if ( početNeutrálníchPolí + početPřeměnitelnýchPolí < početTrvalýchPolíHráče1 – početTrvalýchPolíHráče2 ) ‚Hráč2 již nemůže vyhrát‘ else if (početNeutrálníchPolí + početPřeměnitelnýchPolí < početTrvalýchPolíHráče2 – početTrvalýchPolíHráče1) ‚Hráč1 již nemůže vyhrát‘ else ‚Partie ještě není rozhodnuta‘
3.2.2 Wongova hra Wongova hra se na první pohled zdá funkčně podobná hře Korálky (viz kapitola 2.1.3), ale princip, který určuje, kam bude moci hráč zahrát, se nedá ze hry Korálky použít, protože nezáleží na celkovém součtu okolních kamenů prvního a druhého hráče, ale na tom, zda má hráč v okolí alespoň dva své kameny. V první fázi hry není hráč omezen tím, kam může položit svůj kámen (mimo již zabrané pole). Po položení osmi kamenů oběma hráči nastává druhá fáze hry, kde tah může hráč provést pouze na ta pole, která sousedí alespoň se dvěma kameny jeho barvy. Hrací deska je znovu reprezentována dvourozměrným celočíselným polem, které před začátkem hry naplníme nulovými hodnotami. Nulové hodnoty jsou brány jako neutrální a hráč na ně smí táhnout. Prvnímu hráči je přidělena herní konstanta −1. Po tahu prvního hráče se tak na místo položení kamene uloží do pole o daných souřadnicích konstanta −1 a všechna okolní pole (ortogonálně i diagonálně) zvýší svou hodnotu o jedničku. Následuje tah druhého hráče. Tento hráč má přidělenou herní konstantu −10. Jelikož je stále první fáze hry, smí hráči hrát na libovolná nezáporná pole. To znamená, že druhý hráč smí položit kámen na libovolné místo na desce, kromě toho, kde již leží nějaký kámen. Po
[21]
tahu druhého hráče se na odehrané místo vepíše konstanta −10 a všechna okolní pole se zvětší o 10. Po osmém kole nastává druhá fáze hry, kdy první hráč táhne pouze tam, kde hodnota zbytku po dělení pole desíti je alespoň 2, což znamená, že pole sousedí alespoň se dvěma kameny prvního hráče. ݀݉ ݔ10 ≥ 2 Po tahu se znova všechna okolní pole navýší o jedničku. Podobně následující tah druhého hráče smí být proveden pouze tam, kde hodnota zbytku po dělení pole stem je alespoň dvacet. Tímto je docíleno, že pole sousedí alespoň se dvěma kameny druhého hráče. ݀݉ ݔ100 ≥ 20 Metoda zjištění zbytku po dělení desíti a stem byla vybrána proto, že každé pole sousedí s nejvíce osmi dalšími. Maximální hodnota pole tudíž činí pro prvního hráče 8 a pro druhého 80. Nemůže se tedy stát, aby hodnoty překročily desítku respektive stovku a algoritmus tak počítal nekorektně. Znovu si pro objasnění práce celého algoritmu uvedeme ukázku tahu na výseku z hrací desky. A
B
C
D
I
-1
1
0
0
II
1
1
10
10
III
0
0
10
-10
IV
0
0
10
10
Na desce je vidět průběh hry po prvním tahu obou soupeřů. První hráč zahrál na souřadnice [A, I], okolní pole zvýšil o jedničku a druhý hráč táhl na pole o souřadnicích [D, III], čímž navýšil sousední pole o desítku. Pokud by se jednalo o první fázi hry, měl by možnost první hráč táhnout kamkoliv, kde nejsou záporné hodnoty. Pokud by se však jednalo o druhou fázi hry, neměl by hráč možnost odehrát, protože žádné z polí nedává po dělení desíti zbytek alespoň dva. K objasnění druhé fáze hry je proto nutné, posunout se v tazích o další dva kupředu a vysvětlit si situaci na výsledné desce. Provedou se tedy tahy na [B, III] prvního hráče a [A, IV] druhého hráče.
[22]
A
B
C
D
I
-1
1
0
0
II
2
2
11
10
III
11
-1
11
-10
IV
-10
11
11
10
Teď je na tahu opět první hráč. V první fázi hry by měl možnost táhnout opět na jakékoliv nezáporné pole. Důležitější je fáze druhá. Hráč má možnost zahrát na jednu ze souřadnic [A, II] nebo [B, II], protože obě po dělení desíti vrací zbytek alespoň 2. Navíc je patrné, že po tomto tahu by byla partie ukončena a první hráč by se stal vítězem, protože na hrací ploše není žádné pole, které by mělo zbytek větší nebo roven 20 po dělení stem. Druhý hráč tak nemá žádné pole, kam by mohl položit svůj kámen. Stejně jako u hry Korálky, je shodný způsob práce s polem ten, že zvětšíme pole o jeden řádek či sloupec na všech hranách a také je podobný algoritmus pro zjištění konce hry. Proto se může analogicky použít řešení s výpočtem polí, kam může protihráč táhnout s tím rozdílem, že se zde nezapočítají neutrální území, ale pouze ta, která mají ve svém okolí dva a více soupeřových kamenů. if početHratelnýchPolíProtihráče == 0 { if početTvýchHratelnýchPolí == 0 ‚Remízoval jsi!‘ else ‚Jsi vítěz‘ }
3.2.3 Connect6 Hra Connect6 je specifická tím, nezačíná na prázdné hrací desce a hráči se nestřídají po jednom kameni, jako tomu bylo v předchozích hrách (viz kapitola 2.1.4),. V každém tahu musí hráč položit dva kameny na hrací desku, a snažit se utvořit řadu minimálně šesti svých kamenů, a to v jakémkoli směru. Hráč pouze nesmí hrát tam, kam byl již nějaký tah proveden. Jelikož hráč má na tah dva kameny, byl by tak ten, kdo nezačíná, velice znevýhodněn. Proto když první hráč pokládá svoji dvojici kamenů, má již soupeř na hrací ploše jeden svůj kámen. Tímto způsobem je odstraněna výhoda začínajícího hráče. Hrací deska, tvořena opět dvourozměrným polem, je před
[23]
začátkem hry naplněna znakovými konstantami N a doprostřed hrací desky je vložen znak R, který přivlastňuje pole druhému hráči, zatímco začínající hráč táhne znakem Z. Oba hráči smí táhnout pouze na pole odpovídající znaku N. U této hry nedochází k žádnému vnitřnímu přepočítávání hracích polí, ale jen se kontroluje jejich obsazenost, aby bylo znemožněno provést tah tam, kde již byl dříve proveden, či aby bylo možné zvolit vítěze nebo ukončit hru remízou. Není nutno proto ukazovat postup partií, jako tomu bylo v předchozích hrách, ale stačí jen zobrazit strukturu hrací desky, pro lepší představu. A
B
C
D
E
I
N
N
N
N
N
II
N
N
N
N
N
III
R
N
R
N
N
IV
N
R
Z
N
N
V
N
N
Z
N
N
Na tomto výseku desky je vidět, že první hráč zahrál na pole o souřadnicích [C, IV] a [C, V], zatímco druhý hráč na souřadnice [A, III] a [B, IV]. Na desce se taky nachází ještě jeden tah druhého hráče, a to na souřadnicích [C, III], který se tam nacházel již před prvním tahem, jenž se vkládá doprostřed desky automaticky. Výpočet, zdali hráč položil kameny tak, že utvořil řadu alespoň šesti svých kamenů, a tudíž se stává vítězem, je prováděn po každém tahu. Algoritmus projde hrací pole a při výskytu hráčova kamene rozdělí výpočet do čtyř větví. Každá větev projde sousedních pět polí a to ve vertikálním směru a obou diagonálních směrech orientovaných dolů a v horizontálním směru orientovaném doprava. Jakmile součet kamenů v jakékoliv větvi je roven šesti, hráč vyhrává. Avšak pokud se nepodaří ani jednomu hráči vytvořit řadu šesti kamenů a na hrací desku již není možné umístit další kámen, přichází na řadu algoritmus, který počítá pole se znakovou konstantou N. Ten ukončí hru jako remízu, jak zobrazuje pseudokód:
[24]
if tvýchKamenůVŘadě >= 6 ‚Jsi vítěz!‘ else if početHratelnýchPolí == 0 ‚Ramízoval jsi!‘
3.2.4 Další vhodné hry Mezi další deskové hry vhodné pro implementaci na portál, patří například hra Troll nebo Tonga. Troll se hraje na čtvercové desce, kam hráči střídavě pokládají po jednom svém kamenu (kameny jsou dvoubarevné a zespodu je vždy barva soupeře). Cílem hry je propojit souvislým řetězem kamenů dvě strany desky. Prvnímu hráči patří levá a pravá krajní hrana a druhému horní a spodní. Pokud mezi nově položeným kamenem a kamenem stejné barvy (a to jak v ortogonálním, tak i diagonálním směru) leží soupeřovy kameny, jsou otočeny na druhou stranu, která má protihráčovu barvu. Hráč nesmí položit kámen na soupeřovu hranu (čili ani do rohových polí). Ve hře Tonga pokládá hráč v každém tahu jeden svůj a jeden soupeřův kámen. Cílem hry je vytvářet skupiny kamenů. Skupinou kamenů jsou považovány kameny, které jsou ortogonálně spojené. Kameny, které hráč pokládá, musí ortogonálně či diagonálně sousedit. Hra končí, když není možné provést tah. Hráči si spočítají kameny ve třech největších skupinách své barvy. Hráč s vyšším součtem kamenů z těchto skupin se stává vítězem. Her pro implementaci na webový portál je však celá řada. Obecně platí, že každou tahovou hru pro dva hráče lze nasadit do popsaného systému webového portálu.
3.3 Implementace aplikace Nejprve bylo potřeba vytvořit základní uživatelské rozhraní, které by návštěvníkům umožnilo hraní dekových her. Zvolen byl standardní postup registrace a přihlašování do systému. Není tedy možné, aby mohl hrát návštěvník portálu bez řádné registrace a následného přihlášení. Tímto byla zajištěna jistá míra kontroly nad tím, kdo se účastní her. O těchto hráčích je známo jejich jméno, emailová adresa a následně i jejich IP adresa, která se zaznamená při každém přihlášení do systému. Díky těmto informacím můžeme hráče kontaktovat nebo jim případně omezit či zakázat přístup na herní server. Při přihlášení jsou
[25]
využita tzv. sessions4, které v sobě nesou informace o přihlášeném hráči, a když je potřeba, načtou se z nich data. Portál je pro přehlednost členěn na navigační a obsahovou část. Navigační část obsahuje formulář pro přihlášení, informace o hrách a instrukce k orientaci na portálu. Obsahová část se dále dělí na uživatelské menu a akční prostor. V uživatelském menu si hráč volí nové hry, zjišťuje svůj rating a mění nastavení a chování aplikace. Akční část zobrazuje výsledky, žebříčky a hlavně se v ní odehrávají jednotlivé partie. Rozložení všech částí je patrné na obrázku Obr. 5.
Obr. 5: Náhled členění webového portálu
3.3.1 Hrací deska Jedním ze stěžejních problémů implementace bylo zpracování způsobu vykreslování hrací desky. V praxi se nabízí několik postupů. Jelikož pro interní práci s deskou se využívá dvourozměrného pole, nabízí se řešení vykreslení desky HTML tabulkou, kde by každá buňka tabulky znázorňovala jedno hrací pole. V takovém případě je potřeba předem navrhnout všechny kombinace kamenů na desce a to především v rozích a na krajích desky. Dále je zapotřebí nastylovat tabulku tak, aby nevznikaly mezi jednotlivými buňkami mezery a aby na venek nebylo patrné, že jde o tabulku, což není zase tak triviální řešení, pokud bude požadováno, aby tato tabulka vypadala stejně ve všech www prohlížečích. Tento koncept hrací desky má zdánlivě malou náročnost, co se týče datového objemu přenesených obrázků, protože se obrázky v jednotlivých buňkách často opakují. Dalším řešením je zachovat desku jako jeden celistvý obrázek. Na tento postup není potřeba předem navrhnout všechna možná umístění kamenů, ale sta-
SESSIONS [on-line]. PHP : Sessions. 3. 4. 2009 [cit. 2009-04-05]. Dostupné na Internetu:
. 4
[26]
čí mít jen rastrový obrázek podkladové desky a obrázky kamenů. K vykreslení hrací desky je pak potřeba knihovny GD5 jazyka PHP. Tato metoda přenáší řádově větší datové objemy kvůli rozměrnějším obrázkům. Celou hru je také možné naprogramovat v prostředí spouštěném na straně klienta (např. Adobe Flash6), ale tato technologie by měla nevýhodu v prvotním načtení celé aplikace a ve vysokých hardwarových požadavcích oproti předchozím dvěma. Na první pohled se může zdát, že tabulkový návrh přijatelnější z hlediska přenosu obrázků. Pokud se však na tuto problematiku podíváme z blízka, zjistíme, že tato možnost není tak výhodná, jak se může zdát. Pro srovnání, když vygenerujeme desku jako celistvý obrázek, máme ve zdrojovém kódu jen několik znaků zobrazující cestu k obrázku a kód obrázkové klikací mapy, která má maximálně 16 kB ve hře Connect6 (15×15 políček), jak zobrazuje následující výpočet: 1 znak = 1 B <map name="jmeno"> ~ 24 B <area href="stranka.php?x1=xx&y1=yy" shape="rect" coords="x1,x2,y1,y2" /> ~ 15∙15∙72 B = 16 200 B Celkem 16 224 B ≈ 16 kB
Následně si načteme obrázek, jehož velikost se pohybuje mezi 1 kB až 30 kB. U tabulkové verze si načteme v krajním případě až 63 různých obrázků7 o velikosti kolem 1 kB. Vygenerováním zdrojového html kódu pro tabulku hry Connect6 (15×15 políček) se zvýší počet kilobytů o dalších 28, jak ukazuje výpočet. 1 znak = 1 B ~ 27 B
~ 15∙21 B = 315 B | ~ 15∙15∙21 B = 6615 B ~ 15∙15∙96 B = 21 600 B Celkem 28 557 B ≈ 28 kB
GD FUNCTIONS [on-line]. PHP : GD Functions. 3. 4. 2009 [cit. 2009-04-05]. Dostupné na Internetu: . 6 ADOBE FLASH [on-line]. Adobe Flash : Animation software. 8. 7. 2008 [cit. 2009-05-02]. Dostupné na Internetu: . 7 Ve hře Korálky je 9 různých rozdílných pozic na desce (4 rohy desky, 4 hrany desky a pole uvitř desky). Na každé z těchto pozic můžou být 3 stavy žetonů (2 barvy žetonů a bez žetonu) a 4 stavy kamenů (2 barvy plných kamenů a 2 barvy průhledných kamenů). 9∙(3+4) = 63. 5
[27]
Je tedy patrné, že hrací deska jako tabulka, může v krajních případech představovat až 82 kB, zatímco obrázková deska může mít maximálně 46 kB. Hrací deska reprezentovaná obrázkem má tedy zhruba poloviční datovou náročnost. Vzhledem k výše uvedenému byla zvolena reprezentace hrací desky s využitím jednoho rastrového obrázku. Hrací deska je tímto způsobem zobrazena tak, že se po hráčově tahu použije podkladová deska a na ni se kladou kameny analogicky se skutečným hraním v životě. Se ztvárněním hrací desky jako obrázku však přichází jeden problém, a to ten, že většina webových prohlížečů se snaží uchovat obrázek do cache, a tak zrychlit příští načítání stránky. Nejspolehlivějším řešením tohoto problému je vhodný systém změn názvů souborů. Původně bylo zavedeno tedy pojmenovávání obrázkových souborů podle identifikačního čísla partie, ke kterému se přidávalo číslo tahu, pro vymezení desek po každém položení kamene. Po testování chování prohlížečů však ani toto řešení nebylo uspokojivé, protože v praxi se stává, že si hráč svůj tah v průběhu hraní rozmyslí a chce jej provést znova. Jelikož ale byla již jednou vygenerována hrací deska se stejným číslem partie a s totožným pořadím tahu, není možné zaručit, aby prohlížeč nezobrazil hráči původní rozmyšlený tah. Bylo tedy nutné unikátně pojmenovat každou vygenerovanou desku, abychom měli jistotu, že to, co hráč uvidí na svém monitoru, je opravdu ten tah, který si přál odehrát. Je tedy použito generování náhodných řetězců, před které se ještě přidá číslo partie pro snadnější orientaci. Hrací deska 45. partie má po těchto úpravách název například 45_49c7dfd49ac91.png.
3.3.2 Ukončení partie Konec probíhající partie může nastat dvěma způsoby, a to standardně jako vítězství, prohra či remíza při odehraném tahu nebo automaticky při neaktivitě jednoho z hráčů, při které vyprší časový limit na odehrání tahu. V prvním případě je to funkce uvnitř těla hry, která po každém tahu zjišťuje, zda onen tah nebyl vítězný nebo zda jsou vůbec volná pole pro další tahy. U her Korálky a Wongova hra je z pravidel jasné, že vyhrává ten hráč, kterému se povedlo provést poslední tah. Funkce pro ukončení partie jednoduše počítá políčka, na které je schopen hrát protihráč. Pokud tedy po tahu prvního hráče funkce zjistí, že je počet potencionálních hratelných míst pro druhého hráče
[28]
nulový, oznámí prvnímu hráči úspěšnou hru, zvolí jej vítězem a partii ukončí. Hra Connect6 má podmínky pro stanovení vítěze odlišné, avšak počítání polí se uplatní v tom případě, že je hrací deska úplně zaplněna a partie je tak ukončena remízou. Ve druhé možnosti ukončení hry – tedy při vypršení času – se při každém zobrazení stránky jednoho z obou soupeřů kontroluje, jestli přidělený čas na tah nebyl vyčerpán a v opačném případě hru ukončí. Časové limity navíc kontroluje CRON skript, který v pravidelných intervalech zjišťuje stav jednotlivých partií. Tento interval byl nastaven na 10 minut a je možné ho změnit podle potřeby. Při ukončení partie překročením časového limitu se však neaplikuje vzorec pro výpočet nového ratingu, jak je tomu v případě výhry podle pravidel, ale hráči, který nebyl schopný odehrát za stanovený časový interval, automaticky je strženo 30 bodů z ratingu, které jsou přiděleny protihráči. Tato hodnota se téměř rovná maximální možné hranici bodového přepočtu, pokud by se jednalo o dva hráče z opačných krajů herních schopností hráčského spektra. Toto opatření má hráče motivovat k odehrávání. Poslední typ ukončení tvoří situace, kdy jeden z hráčů usoudí, že nemá cenu partii dohrávat, protože je mu jasné, že je partie dopředu prohraná a hru vzdá tlačítkem vzdát se. Toto chování se od předešlého považuje za čestné, a tak, i přestože hra nebyla ukončena podle pravidel, provede systém výpočet nového ratingu, jakoby hráč, který se vzdal, prohrál.
3.3.3 Výpočet ratingu hráče Rating je hodnocení schopností každého hráče v jednotlivých hrách. Udává sílu soupeře. Proto je nutno po každé vyhrané, respektive prohrané partii, tento stav korigovat. Není možné měnit rating tak, že se budou hráčům přidávat a ubírat body konstantně, protože výhra nad slabším soupeřem logicky nemá takovou váhu, jako výhra nad stejně silným, natož silnějším soupeřem. Je tudíž nutno zavést vzoreček pro výpočet přidělení bodů podle aktuálního ratingu obou soupeřů. Počet bodů, které hráč dostane po ukončení partie, se vypočítá podle vzorce: = ܤሶ 32 ∙ ቈ1 +
ோೡ ିோ ିଵ ൬ ൰ 10 ସ
Rv = rating výherce, Rp = rating poraženého, B = počet přerozdělených bodů
[29]
Vzorec vznikl modifikací vzorce pro Elo rating system8, který se používá pro výpočet ohodnocení hráče v šachu. Body vypočítané pomocí vzorce přičteme výherci k jeho ratingu a poraženému je naopak odečteme. Tabulka Tab. 1 zobrazuje příklady hodnot přidělovaných bodů mezi různě silnými hráči. Rozdíl ratingů hráčů
Vyhraje hráč s vyšším ratingem
Vyhraje hráč s nižším ratingem
0
16
16
50
13,71
18,29
100
11,52
20,48
150
9,49
22,51
200
7,69
24,31
250
6,13
25,87
300
4,83
27,17
350
3,77
28,23
400
2,91
29,09
450
2,23
29,77
500
1,70
30,30
Tab. 1: Hodnoty přidělovaných bodů
Bodové hodnoty jsou následně po výpočtu zaokrouhleny na celé číslo. Z tabulky lze tedy vyčíst, že pokud budou mít soupeři rating 900 a 1300 (tudíž rozdíl 400 bodů) a partii vyhraje hráč s vyšším ratingem, počet přerozdělených bodů bude činit 3. Nové ratingy obou hráčů tak budou 897 a 1303. Pokud však partii vyhraje hráč s nižším ratingem, hodnota přerozdělených bodů bude 29. Výsledné ratingy tak budou činit 929 a 1271 bodů.
3.3.4 Čas na tah a extra čas Při hraní partie je také důležité, aby byly stanoveny časové limity pro odehrání tahu. V opačném případě by se mohlo stávat, že hráč, který pozná, že má již partii prohranou, úmyslně neodehraje nebo prostě jen zapomene, že má nějakou partii rozehranou a taková hra by nikdy neměla svého vítěze. Standardně je hodnota času, za který je nutné provést tah, nastavena na 36 hodin, čili jeden
ELO [on-line]. Elo rating system : Wikipedia, the free encyclopedia. 2001, 8. 4. 2009 [cit. 200904-11]. Dostupné na Internetu: . 8
[30]
a půl dne. Tato hodnota byla zvolena s ohledem na různé spánkové režimy hráčů s tím, že se od hráče očekává odehrání alespoň jednou denně. Pokud by tedy první hráč odehrál jeden den ráno, odhlásil se a následně by odehrál druhý hráč, stihl by první hráč svůj tah i v tom případě, že by se následující den přihlásil na portál až večer. Samozřejmě v tomto případě by mu nejspíš již nezbývalo mnoho času na promyšlení tahu. Řešením této situace je extra čas, který slouží k prodloužení limitu na odehrání. Ročně je možné takto vyčerpat až 240 hodin. K 1. lednu se všem hráčům extra čas nastaví znovu na počáteční čerpatelnou hodnotu.
3.3.5 Modularita Aby byl portál jednoduchý pro rozšiřování, je potřebné navrhnout hrám co nejvyšší modularitu. Jako řešení bylo zvoleno implementování her do zvláštních souborů jako jednotlivé moduly, které se budou vkládat do herního portálu (ukázka struktury herního modulu v příloze A). Tímto způsobem je velice efektivně zařízena manipulace s jednotlivými hrami. Pokud se tedy rozhodneme naimplementovat novou hru, stačí jen vytvořit její modul a nahrát ho na server. Poté vyplníme jeden řádek do tabulky s hrami, který bude obsahovat název nové hry a označení modulu a portál se automaticky o tuto hru rozroste a je ji možné okamžitě hrát. Analogicky pokud se rozhodneme stáhnout z portálu některou z her, smažeme její záznam z tabulky a modul příslušné hry ze serveru stáhneme. Jelikož se připojujeme do databáze vně těchto herních modulů, není problém vytvořit novou hru prakticky kýmkoliv, kdo ovládá programování v PHP a měl by základní dokumentaci, specifikující chování určitých komunikačních částí portálu.
3.3.6 Grafická úprava Grafický design je první věc, kterou potencionální hráč spatří, když zavítá na herní portál. Jeho úroveň tak může ovlivnit to, zda se hráč rozhodne zaregistrovat a hrát nebo zda odejde na jinou stránku. I co se týče samotných hracích desek, je dobré, pokud jejich ztvárnění kladně působí na hráče, proto jednoduché vybarvení polí jednobarevně, není zrovna optimálním řešením. V programu Adobe PhotoShop byla vytvořena veškerá grafika, se kterou se na portálu pracuje, a to od základního grafického designu stránky, přes hráčské rozhraní, až po jednotlivé desky a kameny sloužící pro hraní deskových her.
[31]
Součástí implementace grafického prostředí stránek bylo zapůsobit na nán vštěvníka portálu atypickým logem, který by se lišil od ostatních log jiných serse verů. Pro webový portál byla zakoupena doména jeux.cz, a tak bylo rozhodnuto, rozhod že právě tento název, bude sloužit jako logo herního serveru. serveru. Slovo jeux pochází z francouzštiny a je to množné číslo slova jeu – v překladu hra. S tím souvisí jeho výslovnost, která v češtině zní jako písmeno ž.. Touto hrou se slovem jeux vzniklo také logo na obrázku Obr. 6, které navíc podporuje různá barevnost jednotlivých znaků, což symbolizuje hravost,, rozmanitost her a otevřenost porpo tálu pro kohokoliv.
Obr. 6: Logo webového portálu
[32]
4 Závěr Práce měla za cíl vytvořit herní portál, který sdružuje hráče deskových her a dává jím možnost, si tyto hry zahrát z pohodlí domova. Tento webový server poskytuje i doplňkové služby, které dělají hry hratelnější a hraní zábavnější. Jednotlivým hráčům byl přiřazen rating, který určuje míru dovednosti v každé z her a díky němuž spolu mohou hráči soupeřit. Hráči se tak vrací na portál, aby měli nejlepší rating, nebo aby měli alespoň větší rating než jejich známí. K zvýšení hratelnosti byl nasazen časovač odpočítávající čas nutný k odehrání tahu. Tímto bylo zaručeno ukončení partií v případě neaktivity jednoho z hráčů. K řešení webového portálu byla navrhnuta struktura databáze, která obsahuje tabulky pro hráče, partie, jednotlivé tahy a souřadnice těchto tahů. Jako způsob zobrazení hrací desky byl zvolen rastrový obrázek. Vnitřní reprezentace her byla navržena dvourozměrným polem. Pro portál byla vytvořena grafická reprezentace jednotlivých herních prvků a design stránky. Pro zvýšení prestiže webového portálu byla zakoupena doména jeux.cz a pronajat webhosting. Aplikace byla následně nahrána na server, na kterém nyní běží v tříměsíční testovací verzi, ve které bylo odehráno již přes sto partií. Testování má za úkol odhalit případné chyby, jenž by mohly vzniknout za ostrého provozu. Tuto verzi portálu je možno nalézt na adrese http://jeux.cz/beta/, kde po registraci může hráč okamžitě začít hrát jednu z připravených her, kterými jsou Korálky, Wongova hra nebo Connect6. Díky propracovanému návrhu tohoto portálu je velice snadné do systému přidat nové hry, a tak se pravděpodobně portál v budoucnu rozroste o několik dalších deskových her.
[33]
5 Literatura ADOBE FLASH [on-line]. Adobe Flash : Animation software. 8. 7. 2008 [cit. 200905-02]. Dostupné na Internetu: . ELO [on-line]. Elo rating system : Wikipedia, the free encyclopedia. 2001, 8. 4. 2009 [cit. 2009-04-11]. Dostupné na Internetu: . GD FUNCTIONS [on-line]. PHP : GD Functions. 3. 4. 2009 [cit. 2009-04-05]. Dostupné na Internetu: . GILMORE, W. J. Velká kniha PHP a MySQL 5 : kompendium znalostí pro začátečníky i profesionály. 1. vyd. Brno: Zoner Press, 2007. 864 s. Encyklopedie webdesignera. ISBN 80-86815-53-6. HTML [on-line]. About the HTML 4 Specification : W3.org. [cit. 2009-04-09]. Dostupné na Internetu: . HTML [on-line]. HyperText Markup Language : Wikipedia, otevřená encyklopedie. 2001, 22. 3. 2009 [cit. 2009-03-22]. Dostupné na Internetu: . Klub přátel deskových her : co jsou deskové hry [on-line]. 1999-2007, 26. 11. 2007 [cit. 2009-03-22]. Dostupné na Internetu: . Klub přátel deskových her : historie deskových her [on-line]. 1999-2007, 26. 11. 2007 [cit. 2009-03-21]. Dostupné na Internetu: . KOFLER, M. – ÖGGL, B. PHP 5 a MySQL 5 : průvodce webového programátora. 1. vyd. Brno: Computer Press, 2007. 607 s. ISBN 978-80-251-1813-9. MySQL [on-line]. MySQL : General information. 1995-2009, [cit. 2009-04-09]. Dostupné na Internetu: . MySQL [on-line]. MySQL : Wikipedia, otevřená encyklopedie. 2001, 22. 3. 2009 [cit. 2009-03-22]. Dostupné na Internetu: . PHP [on-line]. PHP : General information. 2001-2009, 10. 4. 2009 [cit. 2009-0410]. Dostupné na Internetu: . SESSIONS [on-line]. PHP : Sessions. 3. 4. 2009 [cit. 2009-04-05]. Dostupné na Internetu: .
[34]
Přílohy A. Ukázka struktury herního modulu: // Načtení konfiguračního souboru s globálními proměnnými jako je // vzorec pro výpočet nového ratingu include 'config.php'; ?> // Pojmenovaní "title" stránky $_SESSION['title'] = 'Wongova hra'; ?> // Vkládá se hlavičkový HTML soubor s informacemi například o // jazykovém kódování stránky include 'hlavicka.php'; ?> // nadpis záhlaví akční části Wongova hra
// kontrola zda je hráč přihlášen do systému if (!empty($_SESSION['prihlasen'])) { ?> // pokud ano, o jakou partii se jedná… if (isset($_GET['hra']) || isset($_POST['hra'])) { // získání informaci pro záhlaví partie $sql = 'SELECT hrac_1, hrac_2, deska, hra, na_tahu FROM Partie WHERE id = ona_partie'; // vypsání tabulky soupeřů do záhlaví akční části // jestliže je přihlášený hráč na tahu, // spustí se proces sestavení hrací desky if ($na_tahu == $_SESSION['id-prihlaseneho']) { // začátek herní desky hráče na tahu // projdou se tahy hrace_1 z databáze a naplní se jimi pole // projdou se tahy hrace_2 z databáze a naplní se jimi pole // zjistí se po kterém tahu obou hráčů se partie nachází // projde herní desku a zjistí, která území komu patří // zjistí se počet polí, na které mohou hrát konkrétní hráči // zjistí se, zda jeden z hráčů nevyhrál a // aktualizuje se databáze podle vypočítaného nového ratingu: $o_kolik = vypoctiRating($tabulka_rating_h2, $tabulka_rating_h1); // a uloží se poslední tah $sql = 'INSERT INTO Tahy(partie, poradi_tahu, zprava) VALUES ("'.$partie.'", "'.$pocet_tahu.'", "'.str_replace($zakazane_znaky, '',$_POST['zprava']).'")';
[35]
$sql = 'UPDATE Partie SET posledni_tah = '.$_SERVER['REQUEST_TIME'].',deska = "'.$_POST['deska'].'", na_tahu = '.$dalsi_tah.', stav = '.$konec_hry.' WHERE id = '.$partie; // pokud se hráč spletl, tah se nezapočítá // jestliže je taženo na určitou souřadnici: if (isset($_GET['tahni'])) { // vykreslení hrací desky po tahu $hraci_deska_wong = imagecreatefrompng('img/hraci-deska-2.png'); $kamen_f = imagecreatefrompng('img/kamen-fn.png'); $kamen_z = imagecreatefrompng('img/kamen-zn.png'); // nakopírování kamenů na podkladovou desku s průhledností 60% // a poslední tah je zvýrazněn kamenem s průhledností 100% // zobrazení formuláře pro potvrzení odmítnutí provedeného tahu } else { // vytvoření klikací mapy přes obrázek hrací desky, // pokud je hráč na tahu // zobrazení hrací desky s klikací mapou pro hráče na tahu echo ''; } } // zobrazení hrací desky pro ostatní hráče else { echo ''; } } ?> } ?> // vložení patičky stránky include 'paticka.php'; ?>
[36]
B. Přiložené DVD obsahuje: • • • • • •
zdrojové kódy PHP a HTML všech souborů portálu obrázky použité na portálu zdrojové soubory obrázků v Adobe PhotoShop ikonu portálu pro www prohlížeč soubor kaskádových stylů CSS schéma databáze (SQL, GIF)
[37]