České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Online karetní hry Lukáš Janský
Vedoucí práce: Ing. Tomáš Richta
Studijní program: Elektronika a informatika strukturovaný bakalářský Obor: Informatika a výpočetní technika Červen 2006
Poděkování Především bych chtěl poděkovat za pomoc, cenné připomínky a podněty vedoucímu práce Ing. Tomášovi Richtovi. Dále bych chtěl poděkovat Martinu Szolárovi za poskytnutí obrázků a databáze karet Doomtrooper, všem testerům za kvalitní otestování a rodině za trpělivost.
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 č. 121/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 Kostelci nad Orlicí dne 27. 6. 2006
….................................................................
v
vi
Abstrakt Úlohou této práce bylo naprogramování klienta a serveru pro hraní libovolných sběratelských karetních her po Internetu. Práce měla být předvedena na hře Magic: The Gathering.
vii
viii
Obsah Seznam obrázků
xi
Seznam tabulek
xiii
1 Úvod
1
1.1 Stručný popis sběratelských karetních her ….................................................. 1 1.2 Popis karetní hry Magic: The Gathering …..................................................... 1
2 Cíl bakalářské práce
3
2.1 Co je potřeba naimplementovat …................................................................... 4
3 Analýza možností implementace
4
3.1 Úvod …............................................................................................................ 4 3.2 Volba programovacího jazyka …..................................................................... 5 3.3 Volba vhodné knihovny pro GUI …................................................................ 5 3.3.1 Qt …........................................................................................................ 5 3.3.2 GTK+ …................................................................................................. 6 3.3.3 MFC …................................................................................................... 6 3.4 Volba databáze …............................................................................................ 6 3.5 Volba typu souborů na ukládání dat …............................................................ 6 3.5.1 DOM ….................................................................................................. 7 3.5.2 SAX …...................................................................................................
7
3.6 Volba protokolu transportní vrstvy …............................................................. 7
4 Návrh implementace
7
4.1 K síťovému programování v Qt .................................................................... 7 4.1.1 Blokovací funkce …..............................................................................
7
4.1.2 Neblokovací funkce …..........................................................................
8
4.2 Server …........................................................................................................
8
4.2.1 Diagram tříd …......................................................................................
8
4.2.2 Popis ….................................................................................................
9
4.3 Klient …........................................................................................................ 10 4.3.1 Diagram tříd …..................................................................................... 10 4.3.2 Přihlašování k serveru …...................................................................... 11 4.3.3 Globální chat ….................................................................................... 11 4.3.4 Výběr hry …......................................................................................... 12 4.3.5 Stavěč balíčků ….................................................................................. 12 4.3.6 Nová hra ….......................................................................................... ix
14
4.3.7 Hra ....................................................................................................... 14 4.3.7.1 hra.xml ….............................................................................….... 15 4.3.7.2 Podrobnější popis jednotlivých elementů …............................... 16 4.3.7.3 Ruka …........................................................................................ 16 4.3.7.4 Balíček ….................................................................................... 17 4.3.7.5 Počítadlo …................................................................................. 18 4.3.7.6 Zobrazovač ….............................................................................
18
4.3.7.7 Tokeny …....................................................................................
18
4.3.7.8 Karta ….......................................................................................
18
4.4 Komunikace mezi klientem a serverem během hry ….................................
23
5 Testování aplikace
24
6 Porovnání s jinými programy pro online karetní hry
24
6.1 Gengine …..................................................................................................... 24 6.2 Magic: The Gathering …............................................................................... 25 6.3 Magic Workstation ….................................................................................... 25 6.4 DT Arena …................................................................................................... 25
7 Závěr
25
8 Seznam použité literatury
26
A Uživatelská příručka
27
A.1 Přihlášení ….................................................................................................. 27 A.2 Select Game …............................................................................................. 28 A.3 New Deck …................................................................................................
28
A.3.1 Popis ovládacích prvků stavěče balíčků …........................................ 29 A.4 New Game …............................................................................................... 30 A.5 Hra …........................................................................................................... 30 A.5.1 Položky kontextového menu karty …................................................. 31 A.5.2 Žetony …............................................................................................. 32 A.5.3 Ruka …................................................................................................ 32 A.5.4 Knihovna …......................................................................................... 33 A.5.4.1 Položky kontextového menu knihovny …................................... 33 A.5.5 Balíček odhozených karet …............................................................... 33 A.5.6 Počítadla bodů …................................................................................. 34 A.5.7 Ukončení hry …................................................................................... 34 A.5.8 Ukončení programu …......................................................................... 34
B Seznam použitých zkratek x
Seznam obrázků Ukázka karty …................................................................................................................
2
Diagram tříd pro server ….................................................................................................
8
Diagram tříd pro klienta …................................................................................................ 10 Přihlašovací okno ….......................................................................................................... 27 Globální chat …................................................................................................................. 27 Okno výběru hry …........................................................................................................... 28 Okno pro tvorbu balíčků …............................................................................................... 28 Okno výběru nové hry ….................................................................................................. 30 Aplikace při spuštěné hře …............................................................................................. 30 Okno výběru karty z balíčku …........................................................................................ 33
xi
xii
Seznam tabulek Typy zpráv …....................................................................................................................
9
Příchozí zprávy pro globální chat …................................................................................. 11 Odesílané zprávy globálním chatem …............................................................................ 11 Atributy elementu game …............................................................................................... 12 Atributy elementu filtr ….................................................................................................. 13 Atributy elementu option ….............................................................................................. 13 Atributy elementu karta …................................................................................................ 13 Odesílané zprávy při nové hře …...................................................................................... 14 Příchozí zprávy pro novou hru …..................................................................................... 14 Atributy elementu hra …................................................................................................... 15 Atributy elementu plocha ….............................................................................................. 15 Vnořené elementy plochy …............................................................................................. 16 Společné atributy vnořených elementů plochy …............................................................. 16 Akce pro ruku …............................................................................................................... 17 Akce pro balíček ............................................................................................................... 18 Atributy elementu karta .................................................................................................... 19 Atributy elementu podmínka ............................................................................................ 19 Atributy elementu back .................................................................................................... 20 Atributy elementu obrazek ............................................................................................... 20 Atributy elementu text ...................................................................................................... 21 Atributy elementu akce ..................................................................................................... 21 Seznam akcí pro kartu ....................................................................................................... 21 Tabulka stavů ..................................................................................................................... 22 Příchozí zprávy pro třídu Hra ............................................................................................ 23 Příchozí zprávy pro třídu Plocha ....................................................................................... 23
xiii
xiv
1
Úvod
1.1 Stručný popis sběratelských karetních her Sběratelské karetní hry (Collectible card games nebo také Trading card games) se začaly poprvé objevovat na začátku 90. let 20. století. První takovou hrou byl Magic: The Gathering, který si v době svého vzniku získal obrovskou popularitu. Poté vzniklo mnoho dalších sběratelských karetních her (např. Doomtrooper, Vampire: The Ethernal Struggle, Lord of the Rings atd...), některé vcelku úspěšné, jiné trochu méně, ale žádná již nedosáhla tak velké popularity a obliby mezi lidmi jako Magic. Hlavním rysem těchto her, a možná i největší odlišností od klasických karetních her je fakt, že každý z hráčů při hře používá svůj vlastní balíček karet a tyto balíčky neobsahují stejné karty. Sběratelské karetní hry totiž obsahují stovky, některé i tisíce (Magic: The Gathering dokonce přes 10 000) různých karet, ze kterých si hráči sestavují své balíčky a tím i volí různé strategie jak budou hrát. Standardně bývá balíček minimálně 60 karet velký s neomezenou velikostí. Ale není dobré do něj dávat příliš mnoho karet, protože se na začátku hry míchá a ve velkém množství karet je nižší pravděpodobnost dobrání klíčové karty. Hráči samozřejmě nemají automaticky přístup ke všem existujícím kartám hry, ale pouze k těm, které vlastní. Karty se dají obvykle získat buď výměnou s jinými hráči nebo nakupováním různých balíčků. Tyto balíčky obsahují náhodně namíchané karty o různých počtech (např. 8, 15, 60). K těmto hrát také, pokud se dobře prodávají, vycházejí stále nové karty v nových edicích, které bývají kompatibilní s předchozími edicemi, takže takto mohou vznikat nové strategie tvorby hracích balíčků. Dalším specifikem těchto her jsou pravidla. Jelikož existuje ohromné množství karet, bylo by obtížné si pamatovat, jak se která karta přesně hraje. Proto jsou pravidla pro konkrétní karty napsány právě na těchto kartách. Samozřejmě existují také globální pravidla, pro všechny karty společná, sepsaná např. v příručce pravidel, ale text na kartách má vždy přednost.
1.2 Popis karetní hry Magic: The Gathering Karetní hra Magic: The Gathering je jednou z výše popsaných sběratelských karetních her. Je také z těchto her nejstarší a nejrozšířenější po celém světě. Původní verze vyšla v angličtině, ale dnes je přeložena do mnoha jazyků (např. Japonština, Ruština …).
1
Obrázek 1 – Ukázka karty Magic: The Gathering splňuje základní rysy sběratelských karetních her popsané výše, zde následuje specifičtější popis: Karty mohou být umístěné v některé z herních zón. Těmito zónami jsou knihovna, hřbitov, karty na ruce a karty ve hře. Knihovna a hřbitov jsou balíčky karet, v knihovně jsou ještě nepoužité karty, na hřbitově jsou karty již použité nebo vyřazené. Karty na ruce jsou karty, které si hráč dolízal z knihovny a může je vykládat do hry (položí je na stůl) podle pravidel psaných na kartách. Karty se rozdělují podle někalika kritérií do různých skupin. Podle barvy – barvy mohou být černá, červená, bílá, modrá, zelená a zlatá Podle typu karty – typy mohou být artefakt, bytost, očarování, instant, země a zaklínadlo Magic: The Gathering je primárně určen pro hru dvou hráčů. Cílem hry je ubrat hráči všechny životy. Každý má na počátku hry 20 životů. K ubírání životů slouží bytosti a některá kouzla, jejich vykládání však není zadarmo. K vyložení karty je většinou potřeba zaplatit její hodnotu poznamenanou v pravém horním rohu karty v manách. Many se získávají z vyložených zemí (tapnutím). Kolo se skládá z několika fází: 1. Otvírací fáze: zde hráč odtapne všechny své tapnuté karty (tapnutí znamená otočení karty o 90 stupňů vpravo. Vyžadují to některé vlastnosti napsané na kartě) a lízne si kartu ze své knihovny.
2
2. Hlavní fáze: V této fázi může hráč vykládat různé bytosti, artefakty, očarování a další karty. Také může vyložit jednu zemi. 3. Útok: V této fázi může hráč zaútočit za pomoci svých odtapnutých bytostí na svého protihráče, ten se může pokusit bytosti zblokovat svými odtapnutými bytostmi, jinak ztratí životy rovné součtu sil útočících bytostí. Útočící a blokující bytosti se tapnou. 4. Pokračování hlavní fáze: Zde platí to samé jako pro původní hlavní fázi. 5. Závěrečná fáze: Pokud má hráč na ruce více než 7 karet, musí přebytečné karty odhodit. Také se zde uzdraví zraněné bytosti a spálí se nevyužitá mana (hráč přijde o tolik životů, kolik mu zůstalo many).
2 Cíl bakalářské práce Tato bakalářská práce je implementačního charakteru a její zadání je následující: Popište karetní hru Magic: The Gathering a způsoby jejího hraní. Zaměřte se na variantu, kdy několik hráčů hraje tuto hru proti sobě on-line přes Internet. Navrhněte a implementujte webovou aplikaci, která umožní hraní více on-line partií hry Magic najednou. Při implementaci klienta použjte výsledky vaší semestrální práce - Klient pro hraní on-line karetních her. Po hlubším zamyšlení se nad tímto zadáním jsem usoudil, že vytvořit on-line karetní hry jako webovou aplikaci není zrovna nejlepší řešení a po domluvě se zadavatelem jsem vytvořil aplikaci typu klient-server. Hlavním problémem webové aplikace je určitá nepohodlnost pro hráče, protože se musí střídat a chybí zde realtimovost, takže by hra mohla trvat velice dlouho. Také moje bakalářská práce nebude zaměřena pouze na implementaci karetní hry Magic: The Gathering, ale bude v ní možnost pomocí externího souboru s popisem hry naimplementovat skoro jakoukoliv karetní hru. Z tohoto důvodu se nebude zabývat až tak automatizací hraní různých karet (to by bylo při celkovém počtu karet např. Magicu velmi obtížné, protože skoro každá karta se hraje jinak), ale bude zaměřena na vytvoření hracího stolu, ruky, různých balíčků atd. Takže hráči si budou muset hlídat pravidla hraní karet sami, jako by hráli s klasickými papírovými kartami.
3
2.1 Co je potřeba naimplementoat
Hrací plocha, na kterou se dají vykládat karty. Karty se po této ploše také dají přesouvat. Tato plocha nemusí být ve hře jediná, mohou být např. dvě (pro každého protihráče jeho vlastní), nebo i více. Karta, kterou je možno vykládat na hrací plochu a poté s ní různě manipulovat, jako např. různé otáčení, přesouvání po ploše, přesouvání do jiné plochy a vkládání do hracích balíčků. Hrací balíček, ze kterého je možno dobírat karty do ruky, vykládat je přímo na plochu, přesouvat karty do jiného balíčku, míchat či odhazovat do něj karty z ruky. Je také možnost mít ve hře libovolné množství balíčků, podle potřeb implementované hry. Ruka, do které je možno dobírat karty z různých balíčků, vykládat karty na plochu, nebo je odhazovat do nějakého balíčku. Toto byly ty nejhlavnější věci, které jsou potřeba ve většině karetních her, dále je potřeba ještě vytvořit následující doplňky: Možnost vykládání žetonů různých barev a jejich rušení. Házení kostkou o zvoleném počtu stěn a také házení více těmito kostkami najednou. Házení mincí (zde se jedná o hod kostkou se 2 stěnami). Různá počítadla bodů, fází kola a podobně. Také je důležitá komunikace mezi hráči během hry. Z tohoto důvodu je potřeba vytvořit ve hře nějaký chat, a to jak pouze pro hráče kteří se účastní hry, tak i globální chat pro všechny připojené hráče, aby měli možnost se domluvit, pokud si spolu chtějí zahrát nějakou hru. Další důležitou věcí je stavění balíčků, proto zde bude existovat jakýsi stavěč balíčků, což bude okno, ve kterém bude k dispozici seznam všech karet, jejich náhledy a možnost vkládání těchto karet do balíčku a následné uložení balíčku do souboru. Také by bylo dobré pro větší přehlednost mít k dispozici filtry, pomocí kterých by se karty vybíraly podle nějakých kritérií. (např. podle barvy nebo sady u Magicu)
3 Analýza možností implementace 3.1 Úvod V této kapitole budou popsány různé možnosti výběru knihoven pro tvorbu GUI, databází a podobně, a důvody, proč jsem se rozhodl vybrat právě tyto možnosti.
4
3.2 Volba programovacího jazyka Zvolil jsem programovací jazyk C++. Důvodem bylo, že tento jazyk znám lépe než ostatní programovací jazyky.
3.3 Volba vhodné knihovny pro GUI 3.3.1 Qt Jedná se o knihovnu společnosti Trolltech. Výhodou tohoto řešení je jeho přenositelnost mezi různými platformami beze změn ve zdrojovém kódu. Podporovanými platformami jsou: Qt/Windows – pro Microsoft Windows XP, 2000, NT 4, Me/98 Qt/Mac – pro Mac OS X Qt/X11 – pro Linux, Solaris, HP-UX, IRIX, AIX, a mnoho dalších variant Unixu Další výhodou Qt je jeho rozsáhlost, protože kromě GUI poskytuje i následující možnosti: Přístup k databázím SQL Čtení a zapisování do souborů XML Síťové programování Open GL Vícevláknové programování a další. Qt je také objektové, což se hodí, protože svoji bakalářskou práci budu psát objektově. Také má velice dobře a přehledně napsanou dokumentaci. Qt má tzv. Duální licenci, což znamená, že existuje více verzí Qt z hlediska licence: Komerční licence – dovoluje výsledný software distribuovat podle vlastně zvolené licence, nevýhodou však je, že tato verze Qt není zdarma. Open Source Licence – tato verze Qt je k používání zdarma a software pomocí ní vytvořený musí být distribuován pod nějakou Open Source Licencí (např. GPL)
5
3.3.2 GTK+ Jedná se o Open Source toolkit zaměřený na tvorbu GUI. Je primárně napsaný pro jazyk C, ale existují i verze pro jiné jazyky (např. C++, C#, Python, PHP). Výhodou je jeho přenositelnost mezi různými platformami (Windows, Linux). Další výhodou může být licence – jedná se o LGPL, takže může být tato knihovna použita jak v Open Source software, tak v softwaru s uzavřeným kódem. GTK+ je k dispozici zdarma.
3.3.3 MFC Tato knihovna je od společnosti Microsoft. Je velice používaná pro programování aplikací s GUI pod Windows. Její nevýhodou je však to, že není multiplatformní. Z toho vyplývá, že programy napsané touto knihovnou jsou pouze pod operační systém Windows. Nakonec jsem se rozhodl pro knihovnu Qt. A to z důvodu její přenositelnosti a také její rozsáhlosti, protože ve své bakalářské práci budu kromě GUI používat i síťové programování, přístup k SQL databázím a čtení XML souborů.
3.4 Volba databáze Jelikož je potřeba mít někde uloženo velké množství karet (až tisíce), rozhodl jsem se pro jejich uložení v databázi. Zde byly na výběr dvě možnosti typu databáze: Buď bude na straně serveru klasická relační databáze typu MySQL nebo MS SQL. Zde by se však muselo přenášet mnoho dat mezi serverem a klienty (např. celé texty karet atd.) Proto jsem se rozhodl pro umístění databáze na straně klienta. Zde by bylo velmi nepraktické, pokud by klient musel mít nainstalován např. databázový server MySQL. Proto je zvoleno řešení pomocí souborové databáze. Klient má k dispozici soubor s databází a přistupuje k němu bez potřeby použití serveru. V této bakalářské práci je jako souborová databáze použita SQLite. Je to hlavně s důvodu, že se k datům přistupuje pomocí jazyka SQL a také proto, že zvolená knihovna pro (nejen) GUI přístup k této databázi podporuje.
3.5 Volba typu souborů na ukládání dat Je také třeba data ukládat do souborů (např. popis hry, balíček, atd). K tomuto ukládání jsou použity soubory XML. Použitá knihovna Qt nabízí dva způsoby přístupu ke XML
6
souborům. Buď DOM nebo SAX.
3.5.1 DOM XML soubor je načten do stromové datové struktury, která je procházena po jednotlivých uzlech.
3.5.2 SAX Soubor je procházen bez uložení do paměti. Nakonec jsem usoudil, že DOM bude pro mou bakalářskou práci vhodnější. Vyžaduje sice o něco více paměti, protože si musí pamatovat celou strukturu souboru, ale práce s ním je pohodlnější.
3.6 Volba protokolu transportní vrstvy Zde z hlediska podpory Qt připadaly v úvahu 2 protokoly, a to TCP nebo UDP. Rozhodl jsem se pro protokol TCP z následujících důvodů: Protokol TCP na rozdíl od protokolu UDP zaručuje doručení paketu. To je pro tuto aplikaci výhodné, protože ztráta paketu by mohla vést k porušení synchronizace hry.
4 Návrh implementace 4.1 K síťovému programování v Qt V knihovně Qt máme dva způsoby programování socketů. Jedná se o využití blokovacích a neblokovacích funkcí těchto socketů.
4.1.1 Blokovací funkce U blokovacích funkcí se jedná o to, že socket je zablokován, dokud např. nemá žádná příchozí data. Pokud se nějaká taková data objeví, socket se odblokuje a zpracovává tyto data. Problémem zde je, že pokud je socket v zablokovaném stavu, je zablokována i celá aplikace. Proto se zde musí použít více vláken (aby každý socket běžel ve svém vlastním vláknu).
7
4.1.2 Neblokovací funkce U využití neblokovacích socketů se jedná o využití signálů s slotů. Socket není zablokován a pokud jsou k dispozici příchozí data, vyšle signál readyRead(), poté můžeme v odpovídajícím slotu, který je tímto signálem spuštěn tyto data přečíst. Původně jsem se rozhodl napsat bakalářskou práci za pomocí blokovacích funkcí. Problémem zde bylo, že v jedné velmi důležité metodě socketu byla až donedávna chyba (jednalo se o metodu třídy QAbstractSocket waitForReadyRead()). Tato chyba způsobovala po přerušení spojení pád aplikace. Tato metoda je již v nové verzi Qt 4.1.3 opravena, ale tato oprava přišla pozdě, proto jsem se rozhodl pro použití neblokovacích socketů.
4.2 Server 4.2.1 Diagram tříd
Obrázek 2 – Diagram tříd pro server
8
4.2.2 Popis Server je jednoduchý program, zajišťující komunikaci mezi klienty. Komunikace probíhá pomocí protokolu TCP/IP. Server naslouchá na portu 7000. Každý klient, který se přihlásí ihned po přihlášení pošle serveru své uživatelské jméno, které při přihlašování uživatel vyplnil. Server zjistí, zda zadané uživatelské jméno již neexistuje. Pokud existuje, pošle klientovi zpět hlášku „Uživatel s tímto jménem již existuje“ a zruší socket. Pokud neexistuje, tak socket zároveň s přečteným uživatelským jménem uloží do mapy (QMap) sockety, ve které je klíčem jméno a hodnotou ukazatel na socket. Poté je již uživatel na serveru přihlášený pod svým jménem. Socket čeká na příchozí zprávy od klienta, pokud nějaká přijde, podle typu zprávy se rozhodne, co s ní dále dělat. Zpráva je textový řetězec, kde jsou jednotlivé části od sebe odděleny středníkem. První část určuje typ zprávy a jedná se o celé číslo.
Typ zprávy
Popis
0
Tato zpráva je určena pro jiného klienta. Za znakem 0 následuje středník a uživatelské jméno klienta, kterému má server tuto zprávu přeposlat. První dvě části se tedy odříznou a server pošle zbytek zprávy klientovi, pro kterého je určena.
1
Pomocí tohoto typu zprávy klient žádá server, aby provedl nějakou činnost s jeho socketem. Například aby mu zpět poslal seznam všech přihlášených klientů k nějaké hře, změnil přihlášenou hru tohoto klienta apod.
2
Tato zpráva je přeposlána všem ostatním klientům. Slouží zejména u globálního chatu Tabulka 1 – Typy zpráv
Pokud se klient odpojí, nebo jinak ztratí spojení, server na tuto událost zareaguje tak, že pošle ostatním klientům informaci o odpojení tohoto klienta a zruší socket.
9
4.3 Klient Klient je program sloužící pro vlastní hraní hry.
4.3.1 Diagram tříd
Obrázek 3 – Diagram tříd pro klienta
10
4.3.2 Přihlašování k serveru Po spuštění klienta se objeví okno, kam uživatel vyplní adresu serveru, ke kterému se chce připojit a své uživatelské jméno. Po stisku tlačítka Connect se klient pokusí připojit k zadanému serveru. Po přihlášení očekává ze serveru potvrzující zprávu „Pripojuji“, pokud přijde, je klient připojen. Pokud ne, nastala někde chyba, a podle chyby, která nastala se vypíše chybová hláška. Po úspěšném připojení se spustí hlavní okno programu.
4.3.3 Globální chat Je nemodální dialog, který slouží primárně k tomu, aby hráči měli přehled, kdo je zrovna přihlášený a aby si zde mohli domlouvat hry s jinými hráči. Při zavření se pouze skryje, ale dál přijímá zprávy. Odkrýt lze přes hlavní menu. Může přijímat následující zprávy: Zpráva
Popis
gmess;zbytek_zpravy
Příchozí zpráva od jiného uživatele. zbytek_zpravy se objeví v chatovacím okně pro příchozí zprávy.
chatUziv;jmena_uzivatelu jmena_uzivatelu jsou jména uživatelů připojených na server oddělená středníky. Přichází do chatu hned po přihlášení. Jména naplní seznam připojených uživatelů. pripojil;jmeno_uzivatele
Jméno nově připojeného uživatele, které se přidá do seznamu připojených uživatelů.
odpojil;jmeno_uzivatele
Jméno uživatele, který se odpojil a má být odstraněn ze seznamu připojených uživatelů.
Tabulka 2 – Příchozí zprávy pro globální chat Může odesílat následující zprávy: Zpráva
Popis
2;gmess;zbytek_zpravy
Odešle všem uživatelům zprávu, kterou tento uživatel napsal.
Tabulka 3 – Odesílané zprávy globálním chatem
11
4.3.4 Výběr hry Je modální dialog, který slouží k výběru hry, kterou chce uživatel hrát. Seznam dostupných her je zapsán v souboru „files/games.xml“. Jedná se o soubor ve formátu XML. Kořenovým elementem je zde element „games“, který má jako vnořené elementy jednotlivé hry „game“.
Název atributu
Popis
name
Celé jméno hry zobrazené v dialogu výběru hry.
id
Zkratka jména hry, použitá na mnoho věcí. Např. jméno adresáře s hrou atd. Tabulka 4 - Atributy elementu game
Po výběru hry se na server pošle zpráva 1;zmenaHry;idHry, kde idHry je id právě vybrané hry. Server podle toho poté přidělí tomuto klientu vybranou hru. Klient se po výběru hry připojí k databázi karet nové hry.
4.3.5 Stavěč balíčků Je modální dialog, který slouží ke stavbě nových balíčků z dostupných karet. Obsahuje filtry, seznam dostupných karet, náhled karty, seznam karet v balíčku a tlačítka na přidávání a odebírání karet z balíčku a také tlačítka na ukládání a načítání již vytvořených balíčků. Dostupné karty pro vybranou hru jsou uloženy v databázovém souboru „idHry/idHry.sli“. Databáze je ve formě jedné tabulky karet (tabulka se jmenuje stejně jako idHry), kde každá karta obsahuje položky id a name. Ostatní položky jsou volitelné a záleží na typu hry. Id je identifikátor karty a name je její jméno. Mezi ostatními položkami mohou být například cesty k obrázkům, text karty, typ karty, barva karty atd. Dostupné karty do seznamu dostupných karet se vybírají podle nastavení filtrů. Filtry se načítají z XML souboru „idHry/deckbuilder.xml“. Kořenovým elementem tohoto souboru je „deck_builder“ který obsahuje jako první vnořený element „dotaz“, ve kterém je specifikován SQL dotaz do databáze. Dále následuje výčet filtrů pomocí elementu „filtr“.
12
Atribut
Popis
name
Jméno filtru a zároveň popisek před filtrem.
sloupec
Sloupec z výsledku SQL dotazu, podle kterého se budou vybírat karty Tabulka 5 - Atributy elementu filtr
Element „filtr“ dále obsahuje vnořené elementy „option“, které udávají možnosti výběru tohoto filtru.
Atribut
Popis
nadpis
Jméno položky uvnitř filtru.
hodnota
Udává hodnotu, podle které se vybírají karty z databáze. Vyberou se pouze ty karty, které mají ve sloupci specifikovaném atributem „sloupec“ u nadřazeného filtru tuto hodnotu. Také lze vyplnit *, což znamená ignorování tohoto filtru při výběru karet. Tabulka 6 - Atributy elementu option
Postupně, jak jsou přidávány karty do balíčku, jsou vlastně ukládány do stromu DOM tohoto balíčku a po kliknutí na tlačítko uložit je obsah tohoto stromu uložen do souboru XML, jehož jméno je zadáno buď po kliknutí na tlačítko „New Deck“ nebo „Open“. Soubor balíčku má následující strukturu: Kořenovým elementem tohoto souboru je element „balik“. Následuje vnořený element „hra“, který obsahuje idHry. Dále je zde element „nazev“ obsahující název balíčku. Potom element obsah, který má vnořené elementy karta. Karta obsahuje id karty v databázi karet.
Atribut
Popis
pocet
Počet karet s tímto id v balíčku. Tabulka 7 - Atributy elementu karta
13
4.3.6 Nová hra Nová hra je modální okno, které slouží k výběru protivníka a balíčků na novou hru. Může odesílat následující zprávy: Zpráva
Popis
1;clients;idHry
Žádá server o zaslání uživatelských jmen všech klientů, kteří mají vybranou hru „idHry“
0;protivnik;start;jmeno
Pošle protivníkovi s uživatelským jménem „protivnik“ výzvu, také posílá své uživatelské jméno, aby protivník věděl, kdo ho vyzval.
Tabulka 8 – Odesílané zprávy při nové hře
Může příjímat následující zprávy: Zpráva
Popis
n;seznam_protivniku
Přijde od serveru seznam protivníků oddělených středníky. Používá se k výběru protivníka.
potvrzeniHry
Pokud protivník potvrdil výzvu o hru, začíná nová hra
zamitnutiHry
Pokud protivník zamítnul výzvu, nová hra nezačíná Tabulka 9 – Příchozí zprávy pro novou hru
Po výběru nabídky nová hra klient pošle serveru zprávu se žádostí o protivníky. Až přijde odpověď, doplní je do ComboBoxu „protivnik“. Také projde soubor hra.xml, zjistí, kolik balíčků má být naplněno na začátku hry a zobrazí dostatečný počet tlačítek k načtení souborů s balíčky.
4.3.7 Hra Nová hra se vytváří po potvrzené výzvě o hru protivníkem. Vzhled a funkčnost hry je uložena ve dvou souborech: „idHry/hra.xml“ a idHry/karta.xml“.
14
4.3.7.1 hra.xml Kořenovým elementem tohoto souboru je „hra“.
Atribut
Popis
name
Zde je uloženo jméno hry
info
Zde je uloženo id chatu, do kterého se mají posílat informační zprávy o průběhu hry. Tabulka 10 – Atributy elementu hra
Kořenový element má vnořené elementy „plocha“. Plocha je základním stavebním kamenem hry. Jedná se vlastně o část stolu, která je vyhrazena k určitému účelu. Plocha obsahuje všechny důležité elementy pro hru jako např. jednotlivé karty, balíčky, žetony apod.
Atribut
Popis
idp
Id plochy
idp2
Id spojené plochy u protivníka. Je to id, pod kterou vidí tuto plochu protivník.
x
Souřadnice x této plochy
y
Souřadnice y této plochy
w
Šířka plochy
h
Výška plochy
color
Zde je barva plochy. Může být zadána jak názvy standardních barev, např. „blue“, tak RGB hodnotou „#ffffff“ Tabulka 11 – Atributy elementu plocha
15
Plocha může obsahovat následující elementy: Název elementu
Krátký popis
ruka
Zobrazuje karty v ruce a tlačítka pro manipulaci s těmito kartami.
balicek
Obsahuje karty, po kliknutí pravým tlačítkem myši se rozvine nabídka s akcemi.
pocitadlo
Zobrazuje počet bodů a tlačítka na jejich přidávání a odebírání
tokeny
Dají se pomocí něho vykládat žetony
zobrazovac
Zobrazuje počet bodů protivníka
chat
Chatovací okno, pomocí kterého mohou hráči komunikovat Tabulka 12 – Vnořené elementy plochy
4.3.7.2 Podrobnější popis jednotlivých elementů
Atribut
Popis
id
Jednoznačně identifikuje element ve hře
x
Souřadnice x vzhledem k levému okraji plochy
y
Souřadnice y vzhledem k hornímu okraji plochy
w
Šířka elementu
h
Délka elementu Tabulka 13 – Společné atributy vnořených elementů plochy
4.3.7.3 Ruka Obsahuje karty, které se dají dobírat z různých balíčků, nebo přímo z nějaké plochy. Obsahuje atribut kapacita, který udává kapacitu ruky. (tato kapacita může být překonána, používá se pouze k naplnění celé ruky kartami) Ruka obsahuje vnořené elementy akce, představující tlačítka pro manipulaci s kartami.
16
Název elementu akce
Popis
nahled
Otevře náhled vybrané karty
vyloz
Vyloží kartu na plochu zadanou atributem plocha na souřadnice x a y, které jsou také dané atributy.
posli
Pošle vybranou kartu z ruky (nebo všechny) do jiného elementu (kontejneru)
vyberAkci
Zobrazí okno s výběrem dalších méně používaných akcí Tabulka 14 – Akce pro ruku
Podrobnější popis akce posli: Posílá nějaký počet karet do elementu daného atributem „element“. Pokud je atribut „pocet“ nastaven na 1, posílá pouze jednu vybranou kartu. Pokud je „pocet“ nastaven na 0, posílá všechny karty, které obsahuje. Karty se dají poslat i protivníkovi, pokud je nastaven atribut „protivnik“ na nenulové číslo. Podrobnější popis akce vyberAkci: Tato akce se používá pro zobrazení okna s výběrem méně používaných akcí. Nemá žádné atributy, pouze vnořené elementy. Jako vnořené elementy mohou být použity libovolné akce. Atribut info u akcí: Většina akcí může obsahovat atribut info. Tento atribut nese informační text, který je zobrazen v chatovacím okně protihráče (které má id stejné jako atribut „info“ u plochy) při vykonání této akce. 4.3.7.4 Balíček Balíček je element obsahující karty. S těmito kartami lze manipulovat pomocí kontextového menu. Balíček má atribut „name“, jenž udává jméno balíčku a atribut „napln“, který pokud je nastaven na 1 značí, že balíček bude naplněn při začátku hry nějakým externím souborem. Dále jsou zde vnořené elementy „obrazek“ udávající název souboru s obrázkem, který bude balíček na ploše představovat. Potom je zde alement „akce“ obsahující v sobě jako vnořené elementy jednotlivé akce:
17
Název elementu akce
Popis
zamichej
Zamíchá tento balíček
posli
Pošle vrchní kartu (nebo libovolný počet vrchních karet) z balíčku do jiného kontejneru. Počet je dán atributem „pocet“
vyber
Zobrazí okno se seznamem všech karet v balíčku a s možností výběru jedné z nich, kterou poté pošle do jiného elementu
vyloz
Vyloží vrchní kartu z tohoto balíčku na nějakou plochu Tabulka 15 – Akce pro balíček
4.3.7.5 Počítadlo Počítadlo je element sloužící k tomu, aby měl hráč přehled o počtu svých bodů, mohl je přidávat, nebo odebírat. Má atribut „id2“, ve kterém je uloženo „id“ zobrazovače, který je s tímto počítadlem spojený. Spojený zobrazovač a počítadlo si udržují stejné hodnoty. Dále obsahuje atribut „pocatek“ který udává počáteční hodnotu počítadla na začátku hry. Má vnořený element „nadpis“, který udává v atributu „hodnota“ nadpis tohoto počítadla a v atributu „size“ velikost písma nadpisu. 4.3.7.6 Zobrazovač Zobrazovač slouží k zobrazení protivníkova počtu bodů. Má atribut počátek značící počáteční hodnotu zobrazovače. Dále je zde vnořený element nadpis s atributy „hodnota“ a „size“, který u zobrazovače zobrazí text „hodnota“ o velikosti „size“. 4.3.7.7 Tokeny Tokeny je element sloužící k vykládání žetonů. Obsahuje vnořený element „obrazek“, ve kterém ja zadáno jméno souboru s obrázkem, který bude na ploše představovat tento element. Také je zde vnořený element „akce“, který může obsahovat akce „vyloz“ mající stejné atributy jako např. u balíčku. 4.3.7.8 Karta Dalším velmi důležitým elementem je karta. Karta však není popsána v souboru hra.xml, ale má vlastní soubor karta.xml. Karta se totiž na ploše nenachází trvale, jedná
18
se pouze o dočasný element. Všechny dostupné karty hry jsou uloženy v databázi, kde je u každé karty také položka (nebo více položek) s názvem souboru s obrázkem. Kořenovým elementem souboru karta.xml je „popis_karty“. Prvním vnořeným elementem je dotaz, který obsahuje SQL dotaz do databáze karet vybrané hry. Dále následuje výčet typů karet pomocí elementů „karta“
Atribut
Popis
typ
Název typu karty. Tabulka 16 – Atributy elementu karta
Poté následují vnořené elementy „podminka“ podle kterých se vybírá typ karty
Atribut
Popis
sloupec
Jméno sloupce v databázi, ze kterého se vybírá hodnota
hodnota
Hodnota v sloupci „sloupec“ v databázi, která má být splněna Tabulka 17 – Atributy elementu podmínka
Pro vykreslení obrázku karty (a i pro další akce, o kterých bude řeč později), potřebujeme vědět, jakého typu karta je. (např. kvůli tomu, když nemáme obrázek karty v celku, ale skládáme ho z jednotlivých ikon a textů, zobrazíme ikony podle typu karty, nebo také různé typy karet mají různá kontextová menu ve hře) Soubor XML je procházen od začátku postupně. Při procházení podmínek vnořených uvnitř elementu „karta“ se podmínky vyhodnocují. Pokud je u zvolené karty vybrané z databáze ve sloupci zadaném podmínkou hodnota zadaná podmínkou, pak je podmínka splněna a postupuje se k vyhodnocení další podmínky této karty. Pokud se vyhodnotí všechny podmínky jako splněné, pak je karta tohoto typu. Pokud je některá z podmínek nesplněna, přeskočí se na následující element „karta“ a začíná se z vyhodnocováním podmínek pro tento typ karty. Z toho vyplývá, že posledním elementem „karta“ v souboru by měla být defaultní karta bez podmínek. Dalším vnořeným elementem je „back“. Tento element určuje zadní stranu karty. Je předpokládáno, že karty stejného typu mají vždy stejnou zadní stranu, která navíc neobsahuje žádné ikony ani texty, ale je tvořena pouze jedním obrázkem.
19
Atribut
Popis
obrazek
Název souboru s obrázkem zadní strany karty. Tabulka 18 – Atributy elementu back
Všechny obrázky, které hra obsahuje jsou uloženy v adresáři „idHry/obr/“ Dalším vnořeným elementem elementu „karta“ je „obrazek“ Udává obrázek, který je vykreslen na nějaké místo uvnitř karty. Karta tedy může být tvořena i více obrázky spojenými dohromady, nebo jedním velkým obrázkem.
Atribut
Popis
sloupec
Zde je uloženo číslo sloupce ve kterém je uložen název souboru s obrázkem. Sloupce jsou číslovány v od 0 podle elementu „dotaz“
x
Souřadnice x tohoto obrázku vzhledem k levému okraji karty
y
Souřadnice y tohoto obrázku vzhledem k hornímu okraji karty
w
Šířka obrázku
h
Výška obrázku Tabulka 19 – Atributy elementu obrazek
Dále pokud není text karty (případně nadpis nebo jakýkoliv jiný text) k dispozici přímo v obrázku karty, je třeba ho načíst z databáze. Element „text“ má následující atributy.
20
Atribut
Popis
sloupec
Zde je uloženo číslo sloupce, ve kterém je uložen text, který se má zobrazit
barva
Zde je barva textu. Může být zadána jak názvy standardních barev, např. „blue“, tak RGB hodnotou „#ffffff“
font
Zde je název fontu, který bude použit na text
velikost
Zde je velikost písma
x
Souřadnice x tohoto textu vzhledem k levému okraji karty
y
Souřadnice y tohoto textu vzhledem k hornímu okraji karty
w
Šířka textu
h
Výška textu Tabulka 20 – Atributy elementu text
Dále karta může obsahovat elementy „akce“, ve kterých jsou popsány položky kontextového menu po kliknutí pravým tlačítkem myši na tento typ karty ve hře
Atribut
Popis
plocha
Jedná se o id plochy pro kterou jsou vnořené akce, v jiné ploše než této nejsou tyto vnořené akce pro tuto kartu k dispozici. Tabulka 21 – Atributy elementu akce
Název elementu akce
Krátký popis
nahled
Zobrazí náhled karty
stav
Změní stav karty
posli
Pošle kartu do do nějakého kontejneru
vyloz
Vyloží tuto kartu na nějakou jinou plochu. Z této plochy karta zmizí.
nahoru
Tato karta překreje všechny elementy, které jsou pod ní.
dolu
Tato karta se zařadí pod všechny elementy, které na ploše překrývala Tabulka 22 – Seznam akcí pro kartu
21
Všechny akce mají atribut „name“, ve kterém je uložen název položky pro tuto akci v kontextovém menu. Podrobnější popis některých akcí: Akce „stav“: Tato akce změní stav karty na stav uvedený v atributu „stav“
Číslo stavu
Popis
0
Karta není natočena a je lícem nahoru.
1
Karta je natočena o 90 stupňů a je lícem nahoru.
2
Karta je natočena o 180 stupňů a je lícem nahoru.
3
Karta je natočena o 270 stupňů a je lícem nahoru.
4
Karta není natočena a je lícem dolů.
5
Karta je natočena o 90 stupňů a je lícem dolů.
6
Karta je natočena o 180 stupňů a je lícem dolů.
7
Karta je natočena o 270 stupňů a je lícem dolů. Tabulka 23 – Tabulka stavů
Akce „stav“ jsou viditelné pouze pokud stav dotyčné karty je stejný jako atribut „veStavu“. Akce „posli“: Akce „posli“ slouží k poslání karty do nějakého kontejneru, který může obsahovat karty (např. ruka nebo balíček karet). V atributu „cil“ je uloženo id tohoto kontejneru. Akce „vyloz“: Akce „vyloz“ slouží k předání karty do jiné plochy. Tato plocha je určena atributem „plocha“, ve kterém je uloženo její id, souřadnice, na které má být karta předána jsou dány atributy x a y.
22
4.4 Komunikace mezi klientem a serverem během hry Klient se serverem během hry komunikuje pomocí posílání řetězců. Vždy, když klient provede nějakou akci, kterou by měl vidět i protihráč, pošle serveru zprávu, kterou server přepošle klientu protihráče. Posílání a příjímání zpráv obstarává třída Spojeni. Tato třída má k posílání zpráv metodu void posli(QString message), kterou elementy uvnitř hry volají, pokud potřebují poslat nějakou zprávu. Ke příjímání zpráv slouží metoda void prichoziZprava(), která je zavolána vždy, pokud od serveru přišla nějaká zpráva. Tato metoda vyvolá signál novaZprava(QString zprava), který odchytí třída Hra. Po odchycení signálu je u hry spuštěna metoda void prichoziZprava(QString zprava), která z textu zprávy zjistí, pro který element je tato zpráva určena a spustí u něho potřebnou metodu. Zpráva
Popis
p-idp;zbytek_zpravy
Zpráva je určena pro plochu s id=idp
konecHry
Protivník se odpojil
info;zbytek_zpravy
Tato zpráva se přeposíla chatu, který je ve hře nastaven k příjímání infa
idElementu;zbytekZpravy zbytekZpravy je přeposlán elementu ve hře, který má dané id Tabulka 24 – Příchozí zprávy pro třídu Hra
Zpráva
Popis
vylozKartu;idKarty;x;y
Vyloží kartu s id=idKarty v této ploše na souřadnice x a y.
prenesKartu;idK1;idK2;x;y Přenese kartu mezi plochami. Vytvoří kartu s id=idK1 na této ploše na daných souřadnicích a smaže ji (přes idK2) ve staré ploše vylozToken;obrazek;x;y
Vyloží token s obrázkem obrazek na tuto plochu na souřadnice x a y
Tabulka 25 – Příchozí zprávy pro třídu Plocha
Přeposílání zprávy elementu uvnitř hry: Každý element má metodu void prichoziZprava(QString zprava), kterou Hra zavolá, pokud má elementu přeposlat zprávu. 23
Posílání zpráv od elementů: Pokud element změní svůj stav tak, že by měl informovat protivníka, pošle mu zprávu. Tuto zprávu posílá spuštěním metody void posli(QString message) třídy Spojení, která odešle zprávu serveru.
5 Testování aplikace Aplikace byla testována již během vývoje. Poté byla aplikace dána k veřejnému testování hráčům ze serveru www.lapiduch.cz z diskusního fóra Doomtrooper. Tito hráči aplikaci důkladně otestovali hraním partií karetní hry Doomtrooper a posílali mi návrhy na zlepšení a informace o chybách. Takto bylo objeveno ještě celkem dost chyb, které mi před tímto testováním nebyly známy. Po důkladném zanalyzování původu těchto chyb jsem tyto chyby opravil. Testování aplikace těmito zkušenými hráči také potvrdilo splnění cíle bakalářské práce. Především pak schopnost dohrát hru do konce bez problémů, intuitivní ovládání programu apod. Tato bakalářská práce byla testována pod operačními systémy Windows (verze 98, 2000, XP) i pod operačním systémem Linux (Mandrake Linux 10.1). Klientská i serverová část aplikace fungovala pod každým z těchto operačních systémů bez problému, čímž se potvrdila přenositelnost mezi platformami u použité knihovny Qt.
6 Porovnání s jinými programy pro online karetní hry Existuje několik programů pro hraní sběratelských karetních her po internetu. Tyto programy bývají k dispozici zdarma ke stažení na stránkách výrobců.
6.1 GEngine
( http://www.ccgworkshop.com )
Jedná se o program určený pro hraní velkého množství her (a neustále přibývají nové). Jeho výhodou je tedy možnost výběru karetní hry z více než 100 možností, příjemné ovládání a celkem velká komunita hráčů hrajících tyto hry. Nevýhodou by mohly být trochu vyšší hardwarové nároky, existence klienta pouze pod operační systém Windows, nebo omezení počtu odehraných her zdarma na jednoho hráče měsíčně. Za
24
hry navíc se musí zaplatit poplatek.
6.2 Magic: The Gathering Online
( http://www.wizards.com/magiconline )
Program pro hraní Magic: The Gathering přímo od výrobců papírové verze Magicu. Je zaměřen pouze na tuto hru. Nevýhodou je nutnost kupování virtuálních karet jako by se jednalo o karty klasické papírové.
6.3 Magic Workstation
( http://www.magicworkstation.com )
Jedná se o program určený nejenom k hraní karetní hry Magic: The Gathering, ale lze pomocí něho hrát i jiné karetní hry. Limitovaná verze tohoto programu je k dispozici zdarma, za kompletní verzi se musí připlatit.
6.4
DT Arena
( http://www.dtarena.ic.cz )
Webová aplikace určená pro hraní hry Doomtrooper. Tato aplikace je napsaná v jazyku PHP, což je trošku nevýhoda, protože hráči musí opakovaně obnovovat stránku zobrazenou webovým prohlížečem, aby zjistili, zda protihráč něco nepodnikl. DT Arena však má promyšlený systém nákupu karet, kdy hráči za odehrané hry získávají body, za které si mohou kupovat balíčky náhodně vybraných karet. V tomto se tato aplikace velice blíží klasickým papírovým karetním hrám, ve kterých je třeba kupovat karty, zde se však neutrácejí skutečné peníze.
7 Závěr Základním cílem této bakalářské práce byla implementace programu, pomocí něhož jdou hrát sběratelské karetní hry po internetu. Tento cíl jsem se při psaní své bakalářské práce snažil splnit. To se nakonec podařilo, protože přes tento program bylo odehráno spousty her. Podařilo se dokonce i napsat program nezaměřený pouze na jednu hru, ale je možnost přes něj hrát více různých her. Důkazem je implementace dvou her, a to Magic: The Gathering a Doomtrooper. Je také velice jednoduché přidávat další hry. Stačí totiž napsat pouze několik XML souborů a vytvořit databázi karet. Při psaní této bakalářské práce jsem se naučil spousty věcí. Jednak jsem získal zkušenosti při psaní takto rozsáhlé aplikace. Dále jsem se naučil používat knihovnu Qt, a to nejenom třídy zaměřené na GUI, ale i další části této knihovny, jako například třídy pro přístup k databázím, pro čtení a zapisování do souborů XML, pro síťové a vícevláknové programování. Při programování mě napadaly další nápady, které by se daly v tomto programu implementovat, nezbyl však na ně čas. Jmenovitě se jedná o vylepšení serveru, kde by byl vytvořen kvalitnější přihlašovací systém a následně možnost pořádání turnajů a lig 25
v různých karetních hrách po internetu, žebříčky nejlepších hráčů apod. Dále by bylo možno vytvořit editor pro vytváření nových her atd. Tyto vylepšení mám v plánu dodělat.
8 Seznam použité literatury [1] Dokumentace knihovny Qt http://doc.trolltech.com [2] Pokyny pro psaní bakalářských a magisterských závěrečných prací na katedře počítačů http://info336.felk.cvut.cz [3] Pravidla karetní hry Magic: The Gathering http://www.wizards.com [4] Článek o historii Magic: The Gathering na serveru hraj.cz http://www.hraj.cz/view.php?cisloclanku=2006052402 [5] Wikipedie – otevřená on-line encyklopedie http://en.wikipedia.org [6] Seriál o XML pro Softwarové noviny http://www.kosek.cz/clanky/swn-xml/index.html [7] Slightly Magic - Magic Workstation resource site http://www.slightlymagic.net/ [8] Databáze a obrázky karet Doomtrooper http://toshirovo.com/doomtrooper
26
Dodatek A Uživatelská příručka A.1 Přihlášení Po spuštění programu se objeví následující nabídka
Obrázek 4 – Přihlašovací okno Zde uživatel vyplní adresu serveru a Username. Po kliknutí na tlačítko Connect se program, pokud nenastala žádná chyba, připojí. Následně se otevře hlavní okno programu, kde je možnost výběru z hlavního menu a globální chat.
Obrázek 5 – Globální chat Globální chat slouží především mezi komunikaci mezi všemi hráči zároveň. Hráči se zde mohou domlouvat na zahájení hry apod. V pravé části tohoto okna je seznam přihlášených uživatelů. V levé jsou vidět příchozí zprávy od všech uživatelů i odchozí od vás. V dolní části okna je textové pole k napsání zprávy a tlačítko „Send“ na odesílání zpráv. Zpráva se dá také odeslat stiskem klávesy enter. Pokud je toto okno zavřeno, pouze zmizí, ale zprávy od všech uživatelů přijímá
27
dál a po opětovném zobrazení tohoto okna jsou všechny zprávy viditelné.
A.2 Select Game Po kliknutí na tuto položku v hlavním menu se zobrazí okno s výběrem karetních her. Je nutné vybrat nějakou z těchto her, aby bylo možno stavět balíčky nebo hrát tuto hru.
Obrázek 6 – Okno výběru hry
A.3 New Deck
Obrázek 7 – Okno pro tvorbu balíčků Levá část okna je určena pro zobrazování a výběr všech dostupných karet vybrané hry.
28
Prostřední část s tlačítky je určena k přidávání a odebírání karet do balíčku, k vytváření, otevírání a ukládání balíčků. Na pravé straně je seznam karet v balíčku.
A.3.1 Popis ovládacích prvků stavěče balíčků Filtry: Výběrová pole v levé horní části okna slouží k filtrování obsahu všech dostupných karet. Používají se následujícím způsobem: Vybereme, podle kterých kritérií chceme karty vybrat. Poté klikneme na tlačítko Select a v seznamu dostupných karet se zobrazí názvy karet, které odpovídají výběru. Tlačítko New Deck: Po kliknutí na toto tlačítko se objeví okno, které chce zadat název nového balíčku. Balíček bude po uložení umístěn pod tímto názvem s koncovkou xml v adresáři decks, který je umístěn v adresáři příslušné hry. Tlačítko Open: Tímto tlačítkem lze načíst již rozestavěný balík a lze do něj přidávat další karty, nebo je z něho odebírat. Tlačítko Save: Tímto tlačítkem se uloží vytvořený balík do souboru zadaného při vytváření nového balíku. Tlačítko Add: Po kliknutí na toto tlačítko se přidá vybraná karta z levého seznamu do balíku. Pokud v balíku již tato karta existuje, zvýší se číslo počtu stejných karet v balíku před jejím názvem. Tlačítko Remove: Toto tlačítko slouží k odstranění vybrané karty z balíku. Pokud je v balíku těchto karet více, sníží se číslo udávající počet stejných karet v balíku před jejím názvem. Po postavení balíku je již možné spustit novou hru
29
A.4 New Game Nastavení nové hry se spustí vybráním položky New Game z hlavního menu. Po kliknutí na tuto položku se zobrazí následující okno:
Obrázek 8 – Okno výběru nové hry Pod položkou Jmeno protivnika se nachází seznam všech dostupných protivníků pro tuto hru. Poté klikněte na tlačítko Nacti, kde vyberete hrací balíček, se kterým budete hrát a po potvrzení tlačítkem Ok chvíli počkáte na protihráče, než si vybere balíček a pak začíná nová hra.
A.5 Hra
Obrázek 9 – Aplikace při spuštěné hře
30
V horní části obrazovky je přehled o Vítězných bodech a bodech osudu protivníka. Vpravo je chatovací a informační okno, používá se pro domluvu s protivníkem během hry a také pro získávání informací o tom, co právě udělal (například zda zamíchal knihovnu apod.) V prostřední části obrazovky jsou vykládací plochy pro karty. Šedá je protivníkova vykládací plocha, jsou zde vidět karty, které má vyložené protivník. Černá je vaše vykládací plocha, pokud vyložíte nějakou kartu, objeví se na této ploše. Po kliknutí pravým tlačítkem na kartu umístěnou na ploše protivníka se objeví kontextové menu s nabídkou náhled. Tato nabídka obsahuje pouze náhled, protože při hře nemůžete nijak manipulovat s protihráčovými kartami. Po kliknutí na položku náhled se otevře okno s náhledem karty. To slouží převážně k přečtení textu na kartě, protože zobrazené karty na ploše jsou dost malé. S vlastními kartami můžete provádět daleko více věcí. Jednak je můžete pomocí levého tlačítka myši přesouvat po ploše a po kliknutí pravým tlačítkem na kartu se otevře kontextové menu s tím, co vše je možno s kartou provést.
A.5.1 Položky kontextového menu karty Náhled: Zobrazí náhled karty. Hodí se pro čtení textu na kartě. Otočit: Otočí kartu o 90 stupňů, pokud již karta je takto otočena, otočí se do původního stavu. Skrýt/Odkrýt: Pokud je karta otočena lícem nahoru, nachází se v menu položka Skrýt. Po kliknutí na tuto položku je karta otočena lícem dolů. Pokud je karta otočena lícem dolů, je zde položka Odkrýt. Po kliknutí je karta otočena lícem nahoru. Vyřadit: Po kliknutí na tuto položku je karta vyřazena do balíčku odhozených karet (ten červený). Vzít zpět do ruky: Po kliknutí na tuto položku si vezmete kartu zpět do ruky. Předej protivníkovi: 31
Po kliknutí na tuto položku předáte kartu protivníkovi. Karta je přemístěna na plochu protivníka, vy nad ní ztrácíte kontrolu, zatímco protivník nad touto kartou kontrolu získá. Dolů: Tato položka se používá, pokud jsou karty překryté ve špatném pořadí. Po použití této volby je tato karta dána dospod. (Pokud je karta pod jinou kartou a vy ji chcete dát na tuto kartu, stačí na tuto kartu kliknout levým tlačítkem myši a ona se sama posune nahoru.) Ve spodní části obrazovky se nachází hlavní ovládání hry. Je zde zobrazena vaše ruka, knihovna balíček odhozených karet, počítadla bodů a další.
A.5.2 Žetony Malá ikonka úplně nalevo slouží k vykládání žetonů. Žeton se vyloží po kliknutí pravým tlačítkem myši na tuto ikonu a zvolením nabídky vyložit žeton.
A.5.3 Ruka Ruka se ovládá tlačítky pod seznamem karet. Tlačítko vyložit vyloží vybranou kartu v seznamu karet ruky na vaši plochu. Odhodit odhodí vybranou kartu do balíčku odhozených karet a náhled zobrazí náhled právě vybrané karty. Pod tlačítkem Další akce se nachází okno s výběrem méně používaných akcí. Další akce: Odhoď vše: Odhodí všechny karty do balíčku odhozených karet Zvyš kapacitu ruky: Zvýší kapacitu ruky o jednu kartu Sniž kapacitu ruky: Sníží kapacitu ruky o jednu kartu Vylož do úkrytu: Vyloží kartu rovnou lícem dolů, tak aby protivník neviděl, o jakou kartu se jedná Odhoď náhodnou kartu: Odhodí jednu náhodou kartu z ruky do balíčku odhozených karet Předej kartu protivníkovi: Předá vybranou kartu do ruky protivníka Předej náhodnou kartu: Předá jednu náhodnou kartu do ruky protivníka
32
A.5.4 Knihovna Po kliknutí na knihovnu (zelený balíček) pravým tlačítkem myši se objeví kontextové menu s možnostmi, jak zacházet s knihovnou. A.5.4.1 Položky kontextového menu knihovny Vylož vrchní kartu: Vyloží vrchní kartu z knihovny. Dober karty: Dobere karty do maximální kapacity ruky z knihovny. Dober jednu kartu: Dobere jednu kartu z knihovny do ruky. Odhodit vrchní kartu: Odhodí vrchní kartu z knihovny do balíčku odhozených karet. Prohledej knihovnu: Zobrazí nové okno se seznamem všech karet v knihovně.
Obrázek 10 – Okno výběru karty z balíčku A po vybrání karty a kliknutí na tlačítko Select přesune tuto kartu do ruky. Je nutné poté knihovnu zamíchat.
A.5.5 Balíček odhozených karet Tento balíček se ovládá podobně jako knihovna.
33
A.5.6 Počítadla bodů Body osudu a vítězné body jsou počítadla, po kliknutí na tlačítko << se počet bodů sníží o 1 bod. Po kliknutí na tlačítko >> se naopak počet bodů zvýší o 1 bod.
A.5.7 Ukončení hry Pokud chceme hru ukončit, klikneme na položku v hlavním menu Leave game.
A.5.8 Ukončení programu K ukončení programu použijeme položku v menu Quit.
34
Dodatek B Seznam použitých zkratek GUI - Graphical User Interface XML - Extensible Markup Language GTK+ - The GIMP Toolkit MFC - Microsoft Foundation Classes DOM - Document Object Model SAX - Simple API for XML TCP - Transmission Control Protocol UDP - User Datagram Protocol
35