PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY
BAKALÁŘSKÁ PRÁCE
Desková hra SCRABBLE s podporou hraní po síti
2011
Otakar Kočka
Anotace Cílem této práce bylo zpracování klasické deskové hry Scrabble s podporou hraní po síti do elektronické podoby s dodržením všech pravidel hry.
Děkuji svému vedoucímu práce Mgr. Petru Osičkovi za vedení mé práce a věcné připomínky ke zpracování tohoto tématu.
Obsah 1. Požadavky na řešení
7
2. Úvod 2.1. Co je SCRABBLE? . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Historie SCRABBLE . . . . . . . . . . . . . . . . . . . . . . . . .
8 8 9
3. Uživatelská příručka 3.1. Pravidla deskové hry SCRABBLE . . . . . . . . . 3.2. Implementace pravidel do elektronické verze . . . 3.3. Systémové požadavky . . . . . . . . . . . . . . . . 3.4. Instalace a odinstalace SCRABBLE . . . . . . . . 3.5. Spuštění hry SCRABBLE . . . . . . . . . . . . . 3.5.1. Úvodní obrazovka SCRABBLE . . . . . . 3.6. Herní módy SCRABBLE . . . . . . . . . . . . . . 3.6.1. Lokální hra . . . . . . . . . . . . . . . . . 3.6.2. Síťová hra - SERVER . . . . . . . . . . . . 3.6.3. Síťová hra - KLIENT . . . . . . . . . . . . 3.7. Herní rozhraní SCRABBLE . . . . . . . . . . . . 3.7.1. Herní rozhraní - popis . . . . . . . . . . . 3.7.2. Herní rozhraní - přesun hracích kamenů na 3.7.3. Herní rozhraní - ukončení hry . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . hrací . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . desku . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
12 12 14 16 17 18 18 19 19 20 24 27 27 30 31
4. Programátorská příručka 4.1. Použitá technologie . . . . . . . . . . . . . . . . . 4.2. Komponenty programu . . . . . . . . . . . . . . . 4.2.1. Komponenta - Úvodní obrazovka hry . . . 4.2.2. Komponenta - Herní logika, herní rozhraní 4.2.3. Komponenta - Síťová komunikace . . . . . 4.2.4. Komponenta - Slovník přípustných slov . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
32 32 32 32 32 37 39
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
Závěr
40
Conclusions
41
Reference
42
A. Obsah přiloženého CD
43
B. Hrací kameny SCRABBLE
44
C. Hrací deska SCRABBLE
45
4
Seznam obrázků 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.
Ukázka z instalace . . . . . . . . . . . . . . . . . . . . . . . . . Položky Scrabble na ploše a v nabídce Start. . . . . . . . . . . Plocha hry Scrabble. . . . . . . . . . . . . . . . . . . . . . . . Nastavení lokální hry. . . . . . . . . . . . . . . . . . . . . . . . . Nastavení času na jeden tah. . . . . . . . . . . . . . . . . . . . . Nastavení síťového serveru Scrabble. . . . . . . . . . . . . . . Jméno / Nick síťového serveru Scrabble. . . . . . . . . . . . . IP adresa, port a tlačítko vytvoření síťového serveru Scrabble. Nastavení času na jeden tah. . . . . . . . . . . . . . . . . . . . . Síťový klient připojený k síťovému serveru Scrabble. . . . . . Síťový klient připravený k síťové hře Scrabble. . . . . . . . . . Nastavení síťového serveru Scrabble. . . . . . . . . . . . . . . Přezdívka / Nick klienta síťové hry Scrabble. . . . . . . . . . Nastavení a připojení klienta síťové hry Scrabble. . . . . . . . Stav připojení klientů síťové hry Scrabble na straně klienta. . Hráč (klient) připraven ke hře nebo ukončení klienta. . . . . . . Herní rozhraní Scrabble. . . . . . . . . . . . . . . . . . . . . . Speciální pole hrací desky Scrabble. . . . . . . . . . . . . . . Zásobník s hracími kameny a tlačítka ukončení tahu Scrabble. Výsledková tabule jednoho hráče Scrabble. . . . . . . . . . . . Informační tabule hry Scrabble. . . . . . . . . . . . . . . . . . Žolík v zásobníku hráče a na hrací ploše,kde zastupuje „Aÿ. . . Výběr písmene, které bude zastupovat žolík. . . . . . . . . . . . Vyhodnocení hry Scrabble. . . . . . . . . . . . . . . . . . . .
5
. . . . . . . . . . . . . . . . . . . . . . . .
17 17 18 19 20 21 21 22 22 23 23 24 24 25 25 26 27 27 28 29 29 30 30 31
Seznam tabulek 1.
Tabulka systémových požadavků. . . . . . . . . . . . . . . . . . .
6
16
1.
Požadavky na řešení
1. Kompletní implementace pravidel hry. Není možné, aby hráč provedl něco, co je proti pravidlům, a na druhou stranu, všechny akce povolené pravidly musí být proveditelné 2. Hra po síti. Hru může hrát více hráčů po síti. Aplikace se tedy musí umět chovat jako herní server (tj. ostatní hráči se k němu připojí) i jako herní klient (umí se připojit k hernímu serveru). Připojení na bázi TCP/IP protokolu. Komunikace mezi klientem a serverem pomocí lidsky čitelných dat (např. XML). 3. Komponentové řešení. Je třeba rozdělit aplikaci do několika komponent a navrhnout rozhraní pro jejich komunikaci tak, aby bylo možné některou z komponent vyměnit. Minimální požadavky na rozdělení jsou komponenty pro logiku hry a herní stav, grafické uživatelské rozhraní, síťovou komunikaci.
7
2. 2.1.
Úvod Co je SCRABBLE?
Scrabble je desková hra se slovy pro 2 až 4 hráče. Součástí hry je hrací deska, která obsahuje 15 x 15 hracích polí, a 100 hracích kamenů, který každý reprezentuje písmeno a bodovou hodnotu tohoto písmene ve hře. Hrací deska obsahuje speciální pole, která násobí buď celého složené slovo nebo násobí bodovou hodnotu písmene, speciálním jediným polem je také pole označené jako začátek hry, na které musí položit hrací kámen hráč, který celou hru začíná. Více o pravidlech Scrabble v sekci „3. Uživatelská příručkaÿ na straně 12.
8
2.2.
Historie SCRABBLE
(převzato z http://www.hrejsi.cz/scrabble/historie.htm [1]) V roce 1931 se město Poughkeepsie ve státě New York nacházelo v právě tak neradostné situaci jako celý zbytek Ameriky: na samém dně hospodářské krize. Nikdo si nebyl jist svou prací a každý musel nasadit veškeré své schopnosti do každodenního boje o přežití. Tak se také stalo, že když přišel o práci místní architekt Alfred Mosher Butts, rozhodl se rozvinout svou zálibu v hrách a v jazyku. Klidný Butts, jenž stále nosil brýle, neměl v lásce hry s kostkou. Vždyť v nich šlo jen o štěstí. Na druhé straně byl názoru, že všechny čistě strategické hry, třeba šachy, jsou pro běžného člověka příliš složité. A tak vymyslel hru, jež stála z poloviny na štěstí a z poloviny na schopnostech. Koncem roku 1931 měl hotovou základní myšlenku a název: Lexico. Lexico se hrálo bez desky. Hráči získávali body podle délky slova, které vytvořili. Další body se daly získat za písmena označená jako ”minor honors” (malé cti): B, F, H, M, P, V, W a Y. Ještě vyšší odměna byla vypsána na využití ”major honors” (velkých ctí): J, K, Q, X a Z. Butts pečlivě prošel titulní stránku New York Times, aby mohl stanovit četnost a bodové ohodnocení jednotlivých písmen abecedy. V roce 1933 byla odmítnuta Buttsova žádost o patent na Lexico. Také od dvou významných výrobců her, Parker Brothers a Milton Bradley, se mu dostalo pouze zdvořilého odmítnutí. Butts se tím ovšem nenechal odradit. Během následujících pěti let jednoduše sám vyrobil skoro 200 her, které prodával i rozdával svým přátelům. Pak už to ale s Lexikem dále nešlo. Komerční úspěch tato hra nikdy nezaznamenala. Rok 1938 znamenal průlom ve vývoji hry. Buttsova obliba křížovek ho přivedla na myšlenku, propojit písmena s hrací deskou, na které by se slova dala skládat podobně jako v křížovkách. Z Lexika se stalo ”New Anagrams”, ”Alph”, ”Criss-Cross” a nakonec ”Criss-Crosswords”. První hry byly nakresleny doma na Buttsově rýsovacím prkně, reprodukovány a nalepeny na skládací šachovnice. Písmenka maloval Butts ručně na malé dřevěné čtverečky. Pravidla stále ještě vypadala jinak než dnes, například první slovo se pokládalo do levého horního rohu hracího plánu. Mnohé původní vlastnosti Buttsovy hry však zůstaly zachovány. Deska měla už tenkrát rozměr 15 x 15 palců; také písmen bylo 7 a ukládala se do malého zásobníku. Ani způsob skládání slov a hodnoty písmen už se od roku 1938 nezměnily. Bohužel narazil Criss-Crosswords na stejné překážky jako předtím Lexico. Patentní úřad Buttse odmítnul a podobně se zachovali také výrobci her. Bylo to rozhodnutí, kterého ještě měli litovat! Butts chvíli myslel na to, že se sám pustí do výroby. Ale uvědomoval si, že není podnikatelský typ, a stal se raději zase architektem. Ke své hře se vrátil 9
až v roce 1948, po skončení druhé světové války. Tehdy se daly věci do pohybu díky osobě Jamese Brunota, Buttsova přítele a majitele jedné z prvních sad CrissCrosswords. Brunotovi byli hrou nadšeni a usoudili, že by měla být zhodnocena na trhu. Co však bylo ještě důležitější, James Brunot měl čas a zájem, postarat se o její obchodní úspěch. Oba přátelé uzavřeli dohodu. Za to, že dovolil Brunotovi hru vyrábět a prodávat, měl Butts za každý prodaný kus obdržet licenční poplatek. A Brunotovi došli k názoru, že hře chybí ještě poslední úpravy. Uspořádali nově prémiová pole, zjednodušili příliš dlouhá pravidla a přemýšleli o novém jméně. Sepsali žádost o patent, která byla 1. prosince 1948 přijata. Nedlouho na to pak došlo k té nanejvýš důležité změně jména. Po dlouhém hledání bylo rozhodnuto pro Scrabble, které mohlo být 16. prosince zaregistrováno jako ochranná známka. Moderní Scrabble spatřil konečně světlo světa. Zpočátku vedli Brunotovi své obchody z obýváku svého domu v Newtonu ve státě Connecticut. Brunot kupoval jednotlivé díly od různých výrobců a se svojí ženou je dávali dohromady. Vyráběli pouhých 18 her za den, každičké písmeno museli pracně nalepovat na dřevěné kameny. V roce 1949, prvním roce výroby, tímto způsobem sestavili a prodali 2251 her a udělali ztrátu 450 dolarů. I následující roky znamenaly neustálý boj. V roce 1952 stále ještě prodělávali a nebyli daleko od rozhodnutí, celý projekt vzdát. Brunot si vzal dovolenou, během níž si chtěl vše nechat ještě jednou projít hlavou. Když se vrátil, zjistil, že ústní propaganda přinesla záplavu objednávek. Najednou bylo potřeba rozšířit provoz. Manželé Brunotovi objevili opuštěnou školní budovu nedaleko svého domova v Connecticutu a přenesli své aktivity tam. Ve čtvrtém čtvrtletí už prodali 37 000 her. 1952 byl také rok, kdy na dovolené hrál poprvé Scrabble Jack Strauss, prezident tehdy největšího světového obchodního domu Macy’s v New Yorku. Hra se mu natolik zalíbila, že ihned po svém návratu do New Yorku požádal oddělení hraček, aby mu několik sad poslalo. A vedoucí oddělení musel přiznat, že nic, co by se jmenovalo Scrabble, prostě nevedou. To se ale mělo velmi rychle změnit! A nejen to. Macy’s podpořil reklamní kampaň, díky které hra rychle dobyla srdce tisíců Američanů. V roce 1953 Brunot zjistil, že přestože nyní vyráběl 6000 her za týden, rostoucí poptávku dále nebyl schopen uspokojit. Poskytl tedy výrobní licenci jednomu z předních amerických výrobců her, firmě Selchow and Righter, která pár let před tím hru odmítla. Po celé tři roky musely být objednávky omezovány. Poptávka rostla a rostla. Mezitím zasáhla v roce 1953 scrabblová horečka také Austrálii. Ve stejném roce byla hra firmou J. W. Spear & Sons dovezena do Velké Británie, kde zaznamenala okamžitý úspěch. V roce 1968 nakonec Brunot prodal licenční práva a Spear’s získal celosvětovou licenci s výjimkou USA, Kanady a Austrálie, kde zůstala majetkem Selchow and Righter. (Australská práva ovšem Spear’s získal dodatečně také.) Toto teritoriální dělení duševního vlastnictví zůstalo v platnosti až do dneška. Firma Selchow and 10
Righter byla roku 1986 prodána společnosti Coleco, která však rok na to udělala bankrot. A práva na Scrabble pro severní Ameriku tak přešla - 53 let poté, co hru poprvé odmítl - na giganta Milton Bradley. V roce 1991 se konalo první mistrovství světa ve Scrabble v Londýně. Druhý šampionát se konal o dva roky později v New Yorku. James Brunot zemřel v říjnu 1984 a mistrovství už se nedožil. Alfred Butts se té slávy však ještě dočkal. Bylo mu 93 let, když v dubnu 1993 zemřel. Firma J. W. Spear & Sons byla v roce 1994 prodána Mattel Inc., jednomu z největších světových výrobců hraček a her. To už existovala řada mutací pro jiné jazyky než angličtinu. Jak pravil tehdejší reklamní slogan, ve světě se již prodalo více než sto miliónů sad se Scrabble a tento počet nadále roste. Zatímco v západní Evropě, Americe a Austrálii hlavní módní vlna už přešla, nyní hra zapouští kořeny ve střední a východní Evropě, Turecku i jinde. Česká verze vznikla krátce před pohlcením Spearsů Mattelem, v roce 1993. Jejím autorem je Martin Hloušek, tehdy šéf hračkářské firmy MHB, který k nám Scrabble přivezl z veletrhu hraček v Paříži. Na jaře 1998 byla založena Česká asociace Scrabble (ČAS), která chce sdružovat nově vznikající české kluby. Ve spolupráci se společností Mattel přebírá asociace odpovědnost za pořádání mistrovství republiky. Další důležitou aktivitou, do které se asociace pustila, je úprava pravidel pro českou verzi. Mezi přípustné slovní tvary, původně zřejmě pod vlivem angličtiny značně omezené, byl na podzim 1997 vpuštěn minulý čas, o rok později pak také čas budoucí, zvratná slovesa a příčestí trpné. Od léta 1998 se schází slovníková komise, jejímž prvním cílem je upevnit normu pro schvalování slov, dlouhodobým cílem pak vytvořit - po vzoru Angličanů - průběžně aktualizovaný slovník pro oficiální turnaje ve Scrabblu. Národní asociace, kluby a slovníky existují pochopitelně i v dalších zemích, ve kterých je Scrabble oblíben. Ve Velké Británii dnes mají kolem tří stovek klubů; slovník zvaný Chambers obsahuje povolené výrazy od dvou do devíti písmen. Francouzsky mluvící země si pořádají vlastní mistrovství světa ve francouzském Scrabble, avšak ve Francii se těší největší oblibě opisovaný Scrabble - výmysl Belgičana Hyppolita Wouterse. Pořádají se tam masové partie pro 400 i více hráčů. Narozdíl od Čech ovšem na desku nepokládají nejlepší slovo, které bylo vymyšleno, ale nejlepší slovo, které vůbec položit lze! Zjistit, které slovo to je, není pro Francouze těžké: mají slovník povolených tvarů a počítač, tak v čem je problém? Hra je pak vlastně jednoznačně určena posloupností slov, takže není nutné zaznamenávat umístění. . . Anglický Scrabble je jednou z disciplín na Olympiádě duševních sportů, jejíž druhý ročník se letos konal v Londýně. Kromě anglické, francouzské a české verze existuje řada dalších: německá, holandská, španělská, italská, portugalská, islandská, maďarská, polská, ruská, řecká, kyperskořecká, turecká, arabská a afrikánská; v licenci je vyráběna též dánská, švédská, norská a finská. 11
3.
Uživatelská příručka
3.1.
Pravidla deskové hry SCRABBLE
(převzato z http://scrabble.hrejsi.cz/pravidla [2]) • Začátek hry 1. Hráč, který bude začínat, se vylosuje takto: Každý hráč si vytáhne ze sáčku jeden kámen. Hráč s písmenem nejblíže k začátku abecedy začíná. V případě shody si všichni hráči, kteří měli nejnižší písmeno, vytáhnou další kámen. Po losování se kameny opět vrátí do sáčku. 2. Poté si každý hráč vylosuje sedm kamenů a uloží do svého zásobníku tak, aby je ostatní neviděli. 3. Začínající hráč vytvoří podle pravidel uvedených níže slovo ze dvou nebo více svých kamenů a položí ho na hrací desku tak, aby jedno z jeho písmen leželo na růžovém středovém poli „Začátekÿ. Kromě této podmínky se první tah řídí stejnými pravidly, jako všechny následující (viz níže). Po skončení tahu jsou na řadě další hráči, počínaje hráčem po levici začínajícího. • Průběh hry 4. Hráč, který je na řadě, vybere ze svého zásobníku jeden nebo více kamenů a položí je na hrací desku. 5. Potom si sečte body za všechna vytvořená či obměněná slova (viz kapitolu Bodování) a oznámí je zapisovateli. 6. Považují-li jeho spoluhráči některé nově vzniklé slovo za nepřípustné, mohou ho zpochybnit před zahájením tahu dalšího hráče. Pokud je jedno z právě vytvořených slov uznáno za neplatné podle níže uvedených pravidel, hráč si vezme nazpět své kameny a ztrácí tah. 7. Nakonec si dolosuje tolik kamenů, kolik jich použil při tvoření slov. Po skončení tahu tedy bude mít opět sedm kamenů. 8. Místo pokládání kamenů může hráč svůj tah využít k výměně některých či všech svých kamenů. Výměnu provede tak, že položí své kameny lícem dolů, vybere z ostatních odpovídající počet nových kamenů a pak své staré kameny zamíchá mezi ty, ze kterých se losuje. V tomto kole již netvoří slova a na řadě je další hráč. Výměnu kamenů nelze provést, jestliže v sáčku zbývá méně než sedm kamenů. 9. Pokud hráč nechce tvořit slova ani měnit kameny, může se vzdát tahu. Ostatním to oznámí tím, že řekne pass. Vzdát tahu se hráč může i v případě, že by byl schopen z písmen ve svém zásobníku utvořit slova. 12
• Pokládání kamenů 10. Alespoň jeden z nově položených kamenů musí stranově sousedit s některým kamenem, který už na desce ležel. Úhlopříčné sousedství se nepočítá. 11. Všechny nově položené kameny musí ležet ve stejném řádku nebo sloupci a nesmí mezi nimi být mezera, tj. musí existovat slovo, na kterém se všechny podílejí. 12. Nové slovo, tvořené nebo dotvořené položenými kameny, musí být čitelné zleva doprava nebo shora dolů a musí být povolené (viz níže). Na všech místech, kde se ho z boku dotýkají jiné kameny, musí také vzniknout povolená slova čitelná zleva doprava nebo shora dolů. 13. Nová slova tedy mohou vzniknout následujícími způsoby: – Přidáním jednoho či více kamenů ke slovu, které již na hracím plánu je. – Umístěním slova kolmo k již existujícímu slovu na hracím plánu. Takto vzniklé slovo buď využívá jedno z písmen kolmého slova, nebo ho přidáním písmene na jeho začátek či konec modifikuje. Nové slovo může rovněž přemostit dvě či více již existujících slov. – Položením celého nového slova rovnoběžně vedle již existujícího slova tak, že těsně sousedící kameny vytvoří rovněž smysluplná slova. 14. Prázdný kámen (žolík) lze použít místo kteréhokoli písmene, včetně těch, která se na žádném kamenu nevyskytují (např. ”W”, ”Q”, ”Ö”). Hráč však musí oznámit, místo kterého písmene žolík použil. Až do konce hry potom žolík zastupuje toto písmeno, což může mít význam při přikládání kamenů dalšími hráči. 15. Žádný kámen nelze přesunout, bylo-li s ním už jednou hráno. • Bodování 16. Za každé písmeno všech nově vytvořených nebo obměněných slov obdrží hráč počet bodů, který je na něm uveden. Počítají se tedy nejen kameny, které hráč v daném tahu přidal, ale i ty, které již na desce ležely. Písmena, která leží ve dvou nových slovech současně, se započítají opakovaně, a to včetně svých případných prémií (viz níže). 17. Některá pole hracího plánu jsou prémiová. Mají následující význam: – Světle modrá pole zdvojnásobují hodnotu písmene, které je na nich položeno. – Tmavě modrá pole ztrojnásobují hodnotu písmene, které je na nich položeno. 13
– Růžová pole zdvojnásobují hodnotu celého slova, které je na nich položeno. – Červená pole ztrojnásobují hodnotu celého slova, které je na nich položeno. 18. Prémiové pole si započítá pouze hráč, který na něj kámen položil. Hráč který využije v novém slově kámen, který už dříve ležel na prémiovém poli, si započítá pouze základní hodnotu kamene. 19. Pokud je umístěn na červeném poli prázdný kámen, zdvoj- či ztrojnásobuje se slovní skóre přesto, že kámen sám nemá žádné bodové ohodnocení. 20. Jestliže v jednom slově hráč využije současně písmenné a slovní prémie, započítá se slovní prémie až nakonec. Využije-li hráč dvě slovní prémie v jediném slově, započítají se postupně obě. Lze tedy získat i čtyř- nebo devítinásobek bodové hodnoty slova. 21. Hráč, který v jednom tahu umístí všech sedm kamenů ze svého zásobníku, získá zvláštní prémii 50 bodů. Tato prémie se připočte k bodům získaným v dotyčném tahu až po započtení písmenných i slovních prémií. 22. Na konci hry je skóre každého z hráčů zmenšeno o hodnotu kamenů, které nepoužil. Pokud některému z hráčů nezbyl v zásobníku žádný kámen, k jeho skóre se přičtou hodnoty všech kamenů, které zbyly ostatním hráčům. • Konec hry 23. Hra končí, jestliže některý hráč využil všechny své kameny a nemůže si již vylosovat žádné další. Nikdo další už nesmí táhnout a hráčům se upraví skóre podle kamenů, které jim zůstaly v ruce - viz Bodování. 24. Hra ovšem nekončí, pokud již nelze losovat nové kameny, ale všem hráčům ještě nějaké zbývají v ruce a hráči s nimi umí táhnout. Teprve když se všichni hráči ve dvou po sobě jdoucích kolech vzdají tahu, hra skončí.
3.2.
Implementace pravidel do elektronické verze
• Začátek hry 1. Není implementováno, první na tahu je vždy první hráč. 2. Plně implementováno, kameny hráčům samozřejmě vylosuje počítač. 3. Plně implementováno. 14
• Průběh hry 4. Plně implementováno. 5. Plně implementováno, bodování plně zajišťuje počítač. 6. Plně implementováno, přípustnost slov rozhoduje počítač pod vestavěného slovníku přípustných slov. 7. Plně implementováno. 8. Hráč si může vyměnit pouze všechny kameny, samozřejmě pokud jsou v pomyslném sáčku ještě nějaké kameny. Drobný rozdíl je ještě v tom, že se kameny nejdříve vrátí do sáčku a pak se ze všech losuje sedm kamenů. 9. Plně implementováno, popsáno jako „Prázdný tahÿ • Pokládání kamenů 10. Plně implementováno. 11. Plně implementováno. 12. Plně implementováno. 13. Plně implementováno. 14. Plně implementováno, pouze lze používat písmena, která jsou na některém z hracích kamenů. 15. Plně implementováno. • Bodování 16. Plně implementováno. 17. Plně implementováno. 18. Plně implementováno. 19. Plně implementováno. 20. Plně implementováno. 21. Plně implementováno. 22. Plně implementováno. • Konec hry 23. Plně implementováno. 24. Plně implementováno. Jediné pravidlo, které je implementováno navíc, je možná výměna položeného (odehraného) žolíka za kámen se stejným písmenem ze zásobníku hráče během jeho tahu. 15
3.3.
Systémové požadavky
Systémové požadavky jsou uvedeny v tabulce. Operační systém:
Windows XP nebo novější .NET Framework 3.5 SP1
Procesor: Paměť RAM: Pevný disk: Grafická karta: Rozlišení:
Intel Pentium 1400MHz nebo lepší minimálně 512MB 300MB volného prostoru kompatibilní s DirectX 9.0c 1024x768 nebo lepší
Tabulka 1. Tabulka systémových požadavků.
16
3.4.
Instalace a odinstalace SCRABBLE
Instalace Scrabble se provede pomocí standardního instalační průvodce Microsoft Windows bez nutnosti dalších nastavení. Ve volbách instalace se může pouze nastavit umístění instalace v počítači a zda se instalace zástupců spuštění hry provede pro všechny uživatele nebo pouze pro právě přihlášeného uživatele (viz. Obrázek 1.).
Obrázek 1. Ukázka z instalace Odinstalace Scrabble se provádí: 1. položkou v Ovladacích panelech „Programyÿ - „Odinstalovat programÿ ve Windows 7 nebo „Přidat nebo odebrat programyÿ ve Windows XP 2. položkou v programové skupině „Scrabbleÿ „Odinstalovat Scrabbleÿ (viz. Obrázek 2.) v nabídce Start systému Windows.
Obrázek 2. Položky Scrabble na ploše a v nabídce Start.
17
3.5.
Spuštění hry SCRABBLE
Hra SCRABBLE se startuje ikonou „Hrát SCRABBLEÿ na ploše nebo položkou „Hrát SCRABBLEÿ v programové skupině „SCRABBLEÿ v nabídce Start (viz. Obrázek 2.). 3.5.1.
Úvodní obrazovka SCRABBLE
Obrázek 3. Plocha hry Scrabble. Po spuštění SCRABBLE přejde aplikace do celoobrazovkové režimu (viz. Obrázek 3.). V levé horní části herní obrazovky je k dispozici menu hry ke zvolení požadované položky spuštění samotné hry. V pravém horním rohu herní obrazovky jsou k dispozici ikony pro minimalizaci a k okamžitému ukončení aplikace.
18
3.6.
Herní módy SCRABBLE
Obrázek 4. Nastavení lokální hry.
3.6.1.
Lokální hra
Položka „Lokální hraÿ v menu slouží ke spuštění hry Scrabble pro 1 až 4 hráče na lokálním (jednom) počítači. Po kliknutí na položku „Lokální hraÿ se nastavují atributy této hry (viz. Obrázek 4.). V položce „Počet hráčů:ÿ si hráč zvolí počet hráčů, kteří se budou účastnit hry. Do položky „Jméno hráče 1:ÿ až „Jméno hráče 4:ÿ může hráč zadat jména nebo přezdívky hráčů. Jestliže položky jmen nechá prázdné, každému hráči bude přiděleno jméno ve tvaru „Hráč 1ÿ až „Hráče 4ÿ, samozřejmě dle zvoleného počtu hráčů. Pokud hráč nezaškrtne políčko „Čas na tah:ÿ bude mít každý hráč možnost neomezeného času na jeden tah, ale pokud políčko zaškrtne (viz. Obrázek 5.), bude nastaven čas na jednotlivý tah. Nejkratším možným časem na tah je 15 sekund a naopak nejdelším možným časem na jeden tah jsou 3 minuty. V závislosti na posunutí ukazatele na časové ose doleva se bude čas zkracovat, při posunu ukazatele doprava se bude čas prodlužovat (viz. Obrázek 5.). Další možnost nastavení času na tah je pomocí šesti tlačítek pod časovou osou (viz. Obrázek 5.). 19
Obrázek 5. Nastavení času na jeden tah. Tlačítka mají tuto funkci: 1. „|<ÿ - přesun ukazatele času na nejkratší možnou dobu času na jeden tah, což je 15 sekund. 2. „<<ÿ - přesun ukazatele času na kratší možnou dobu času na jeden tah a to o 10 sekund až na 15 sekund. 3. „<ÿ - přesun ukazatele času na kratší možnou dobu času na jeden tah a to o 1 sekundu až na 15 sekund. 4. „>ÿ - přesun ukazatele času na delší možnou dobu času na jeden tah a to o 1 sekundu až na 3 minuty. 5. „>>ÿ - přesun ukazatele času na delší možnou dobu času na jeden tah a to o 10 sekund až na 3 minuty. 6. „>|ÿ - přesun ukazatele času na nejdelší možnou dobu času na jeden tah, což je 3 minuty. Po nastavení hry hráč hru odstartuje stisknutím tlačítka „OKÿ. Hra se spustí a na tahu bude první hráč. Pokud hráč hru zahájit nechce, klikne na tlačítko „Stornoÿ a nastavení bude zapomenuto a bude vrácen zpět na úvodní obrazovku hry (viz. Obrázek 3.). 3.6.2.
Síťová hra - SERVER
Pokud se hráči rozhodnou pro hraní Scrabble v síti, je nutné mít nejdříve zvolen a poté nastaven síťový server. K síťovému serveru se hráči (klienti) připojí. Síťový server je jeden z hráčů a je „mozekÿ celé hry. Síťovou hru řídí, určuje, kdo bude hrát, kontroluje přípustnost slov. Při odpojení serveru, celé síťová hra končí, bez síťového serveru není možné síťovou hru hrát. Položka „Vytvořit SERVERÿ slouží ke hře 1 až 4 hráčů po počítačové síti. Po zvolení této položky se objeví okno s nastavením síťového serveru (viz. Obrázek 6.).
20
Obrázek 6. Nastavení síťového serveru Scrabble. V okně musí hráč (server), nejdříve nastavit několik atributů, které jsou potřeba ke spuštění serveru, aby se ostatní hráči (klienti) mohli připojit a síťová hra mohla být zahájena. První důležitou položkou v nastavení je přezdívka (viz. Obrázek 7.), nebo-li nick. Pokud si nick hráč (server) nezvolí, bude mu nastaven dle názvu počítače v síti. Tento nick slouží jako identifikace serveru ve hře a zároveň jako jméno hráče v síťové hře.
Obrázek 7. Jméno / Nick síťového serveru Scrabble. Další dvě důležité položky je tzv. IP adresa a port komunikace (viz. Obrázek 8.) připojení pro identifikaci serveru v síti. IP adresa je ve tvaru XXX.XXX.XXX.XXX (internetový protokol IPv4, kde XXX nabývá hodnot 0. .255), která identifikuje počítač v počítačové síti. IP adresu hráč (server) vybere ze seznamu dostupných v sekci „Server / port Serverÿ a port komunikace lze chápat jako jakýsi kanál, kterým počítače v síti komunikují. Pro bezchybný provoz síťového serveru je nutné program Scrabble a port komunikace mít povolený 21
pro síťovou komunikaci v bráně firewall (bližší informace sdělí správce počítače).
Obrázek 8. IP adresa, port a tlačítko vytvoření síťového serveru Scrabble. Poslední důležitou položkou nastavení je nastavení času na jeden tah (viz. Obrázek 9.). V síťové hře není umožněno hrát bez časového omezení na jeden tah. Nejkratším možným časem na tah je 15 sekund a naopak nejdelším možným časem na jeden tah jsou 3 minuty. V závislosti na posunutí ukazatele na časové ose doleva se bude čas zkracovat, při posunu ukazatele doprava se bude čas prodlužovat. Další možnost nastavení času na tah máte pomocí šesti tlačítek pod časovou osou.
Obrázek 9. Nastavení času na jeden tah. Tlačítka mají tuto funkci: 1. „|<ÿ - přesun ukazatele času na nejkratší možnou dobu času na jeden tah, což je 15 sekund. 2. „<<ÿ - přesun ukazatele času na kratší možnou dobu času na jeden tah a to o 10 sekund až na 15 sekund. 3. „<ÿ - přesun ukazatele času na kratší možnou dobu času na jeden tah a to o 1 sekundu až na 15 sekund. 4. „>ÿ - přesun ukazatele času na delší možnou dobu času na jeden tah a to o 1 sekundu až na 3 minuty.
22
5. „>>ÿ - přesun ukazatele času na delší možnou dobu času na jeden tah a to o 10 sekund až na 3 minuty. 6. „>|ÿ - přesun ukazatele času na nejdelší možnou dobu času na jeden tah, což je 3 minuty. Hráč (server) nastaví tyto čtyři atributy a poté stiskne tlačítko „Vytvořitÿ v sekci „Server / port Serverÿ, tím nastartuje síťový server pro čekání na připojení síťových klientů. Pokud chce hráč (server) tzv. „naslouchání serveru po sítiÿ ukončit a tím samozřejmě zrušit běžící síťový server a odpojit všechny připojené hráče (klienty), stiskne tlačítko „Zrušitÿ v sekci „Server / port Serverÿ. Během připojování hráčů (klientů) může hráč (server) s již připojenými hráči (klienty) chatovat (komunikovat) v dolní části okna nastavení síťového serveru.
Obrázek 10. Síťový klient připojený k síťovému serveru Scrabble.
Obrázek 11. Síťový klient připravený k síťové hře Scrabble. Informace o úspěšném připojení hráče (klienta) se objeví v právé horní části okna nastavení síťového serveru v sekci „Klient 1:ÿ až „Klient 3:ÿ. V této sekci může hráč (server) připojené klienty libovolně odpojovat. Hráč (klient) je buď pouze „připojenÿ (viz. Obrázek 10.), což znamená, že se může z pozice síťového klienta odpojit a serveru není umožněno zahájit vlastní hru Scrabble, nebo je „připojen - připravenÿ (viz. Obrázek 11.), což znamená, že hráč (klient) je připraven ke hře a pouze čeká na pokyn k zahájení hry ze strany síťového serveru. Pokud jsou všichni hráči (klienti) „připojen - připravenÿ (viz. obr. č. 11.), může hráč (server) zahájit vlastní hru Scrabble a to tak, že klikne na tlačítko „Start síťové hryÿ. 23
3.6.3.
Síťová hra - KLIENT
Obrázek 12. Nastavení síťového serveru Scrabble. Pokud se hráči rozhodnou pro hraní Scrabble v síti, je nutné mít nejdříve zvolen a poté nastaven síťový server. K síťovému serveru se hráči (klienti) připojí. Síťový server je jeden z hráčů a je „mozekÿ celé hry. Síťovou hru řídí, určuje, kdo bude hrát, kontroluje přípustnost slov. Při odpojení serveru, celé síťová hra končí, bez síťového serveru není možné síťovou hru hrát. Položka „Připojit se k SERVERuÿ slouží k připojení hráče (klienta) k serveru síťové hry, ke hře 1 až 4 hráčů po počítačové síti. Pomocí tohoto nastavení síťové hry se hráč (klient) připojí k běžícímu hernímu síťovému serveru. Po zvolení této položky se objeví okno s nastavením síťového klienta (viz. Obrázek 12.).
Obrázek 13. Přezdívka / Nick klienta síťové hry Scrabble. První důležitou položkou v nastavení je přezdívka (viz. Obrázek 13.), nebo-li nick. Pokud si nick hráč (klient) nezvolí, bude nastaven dle názvu počítače v síti. 24
Tento nick slouží jako identifikace klienta ve hře a zároveň jako jméno hráče v síťové hře.
Obrázek 14. Nastavení a připojení klienta síťové hry Scrabble. Další důležitou položkou je adresa síťového serveru a port komunikace (viz. Obrázek 14.). V sekci „SERVER - IP adresa nebo název počítače v sítiÿ může hráč (klient) zvolit ze dvou způsobů zadání adresy serveru. První možností je, že zadá název počítače serveru tak, jak je identifikován v počítačové síti. Tento název sdělí hráč (server). Druhou možností je zadání tzv. IP adresy, která je ve tvaru XXX.XXX.XXX.XXX (internetový protokol IPv4, kde XXX nabývá hodnot 0. .255) a identifikuje počítač v počítačové síti. IP adresu opět sdělí hráč (server). Port komunikace lze chápat jako jakýsi kanál, kterým komunikující
Obrázek 15. Stav připojení klientů síťové hry Scrabble na straně klienta. počítače v síti komunikují. Číslo portu na straně serveru a na straně klienta musí 25
být stejné, jinak ke spojení klienta se serverem nemůže dojít. Číslo portu opět sdělí hráč (server), který jej zvolil. Pro bezchybný provoz síťového klienta je nutné program Scrabble a port komunikace mít povolený pro síťovou komunikaci v bráně firewall (bližší informace sdělí spráce počítače). Pokud hráč (klient) nastaví potřebné atributy síťové hry, pro připojení k serveru klikne na tlačítko „Připojitÿ v sekci „SERVER - IP adresa nebo název počítače v sítiÿ. Toto tlačítko slouži hráči (klientu) k případnému odpojení klienta od serveru síťové hry. Informace o připojení hráče (klienta) k hráči (serveru) jsou zobrazeny v pravé horní části okna nastavení klienta síťové hry v sekci „Serverÿ, který zobrazuje aktivní připojení k serveru síťové hry (viz. Obrázek 15.). V sekcích „Klient 1ÿ a „Klient 2ÿ jsou informace o ostaních připojených hráčích (klientech) k serveru síťové hry. Během připojování klientů může hráč (klient) s hráčem (serverem) a již připojenými hráči (klienty) chatovat (komunikovat) v dolní části okna nastavení síťového klienta. Jestliže je hráč (klient) připraven ke hře, zaškrtne políčko „Připraven ke hřeÿ v sekci „Síťová hraÿ, a čeká na zahájení hry ze strany síťového serveru. Pokud hráč (klient) nemá o síťovou hru zájem, klikne na „Ukončení klientaÿ v sekci „Síťová hraÿ před zaškrtnutím políčka „Připraven ke hřeÿ. Pokud jsou všichni hráči (klienti) ve stavu „připojen - připravenÿ (viz. obr. č. 11.), může hráč (server) zahájit vlastní hru Scrabble.
Obrázek 16. Hráč (klient) připraven ke hře nebo ukončení klienta.
26
3.7.
Herní rozhraní SCRABBLE
Herního rozhraní Scrabble a jeho ovládání je společné pro všechny módy hraní Scrabble. 3.7.1.
Herní rozhraní - popis
Obrázek 17. Herní rozhraní Scrabble. Herní rozhraní Scrabble (viz. Obrázek 17.) se skládá ze čtyř sekcí, první je hrací deska (15 x 15 polí), druhá je zásobník z hracími kameny a tlačítky k odehrání tahu, třetí jsou výsledkové tabule hrajících hráčů a čtvrtou je informační tabule počtu hracích kamenů k dolosování nových kamenů, času na jeden tah a počet prázdných tahů do konce. Hrací deska obsahuje 15 x 15 hracích polí, na které se pokládají kameny ze zásobníku hráče. Hrací deska obsahuje několik speciálních polí (viz. Obrázek 18.).
Obrázek 18. Speciální pole hrací desky Scrabble. 1. „Začátekÿ - na toto pole musí být položen hrací kámen v prvním platném tahu hry. 27
2. „Dvakrát hodnota písmeneÿ - při odehrání hracího kamene na tomto poli, bude hodnota písmene hracího kamene zdvojnásobena. 3. „Třikrát hodnota písmeneÿ - při odehrání hracího kamene na tomto poli, bude hodnota písmene hracího kamene ztrojnásobena. 4. „Dvakrát hodnota slovaÿ - při odehrání hracího kamene na tomto poli, bude hodnota vytvořeného slova zdvojnásobena. 5. „Třikrát hodnota slovaÿ - při odehrání hracího kamene na tomto poli, bude hodnota vytvořeného slova ztrojnásobena. Zásadou je, že se nejdříve sčítají hodnoty písmen včetně násobku za písmeno a potom se eventuelně vynásobí násobkem slov.
Obrázek 19. Zásobník s hracími kameny a tlačítka ukončení tahu Scrabble. Zásobník hracích kamenů (viz. Obrázek 19.) obsahuje na začátku sedm kamenů, z kterých každý z hráčů sestavuje slova na hrací desce. Vpravo od zásobníky jsou čtyři tlačítka pro ukončení tahu nebo speciálních akcí s hracími kameny. 1. tlačítko „Odehrát položeníÿ - toto tlačítko ukončí tah a zkontroluje položené hrací kameny na hrací ploše, zda jsou platná. Tlačítko je k dispozici, jestliže hráč položil aspoň jeden hrací kámen na hrací desku. 2. tlačítko „Prázdný tahÿ - toto tlačítko ukončí tah, hráč není hodnocen, ani nemění kameny. Tlačítko je k dipozici vždy během tahu. 3. tlačítko „Výměna kamenůÿ - toto tlačítko ukončí tah, hráči jsou vyměněny všech hrací kameny v zásobníku. Tlačítko je k dipozici pokud je všech sedm hracích kamenů hráče v zásobníku. 4. tlačítko „Vrácení kamenůÿ - toto tlačítko neukončí tah, pouze vrátí zpět do zásobníku všechny položené kameny z hrací desky. Tlačítko je k dispozici, jestliže hráč položil aspoň jeden hrací kámen na hrací desku. Výsledkových tabulí (viz. Obrázek 20.) je vždy tolik, kolik bylo na začátku hráčů. Maximálně jsou na hrací ploše čtyři výsledkové tabule. Na každé výsledkové tabuli je několik údajů. 1. pole označuje číslo hráče a označení zda je na tahu. 2. pole je jméno (přezdívka hráče). 28
Obrázek 20. Výsledková tabule jednoho hráče Scrabble. 3. pole je počet bodů získaných za položené hrací kameny a sestavená slova. 4. pole je počet položených kamenů na hrací plochu. 5. je vizuálně zobrazeno počet kamenů v zásobníku každého hráče, toto je využitelné pouze na konci hry, kdy již se nedolosovávají kameny a každý hráč může mít v zásobníku méně než sedm kamenů.
Obrázek 21. Informační tabule hry Scrabble. Informační tabule (viz. Obrázek 21.) obsahuje tři důležité informace o hře. 1. část nese informaci o počtu prázdných tahů do konce, toto se využívá na konci hry. Bližší informace v sekci „3.7.3. Herní rozhraní - ukončení hry” na straně 31ÿ 2. část nese informaci o počtu hracích kamenů v pomyslném sáčku, ze kterých se losují hrací kameny do zásobníku každého hráče za kameny, které hráč odehrál (položil) na hrací desku. 3. část je čas na jeden tah, po uplynutí času na jeden tah dojde automaticky k ukončení tahu hráče a na tahu je další hráč. 29
3.7.2.
Herní rozhraní - přesun hracích kamenů na hrací desku
• Ohodnocený hrací kámen Hrací kameny se ze zásobníku hráče přesouvají na hrací desku. Přesun kamenů se provádí myší. Na hracím kameni, který je přesouván klikněte levým tlačítkem a levé tlačítko držte stisknuté a přesouvejte hrací kámen nad pole hrací desky. Levé tlačítko myši uvolněte a hrací kámen je umístěn na hrací desku. Pokud na poli, kam se snažíte umístit hrací kámen již jeden kámen je, pokládaný kámen se vrátí automaticky zpět do zásobníku hráče. Hrací kameny můžete stejným způsobem přesouvat v zásobníku mezi sebou.
Obrázek 22. Žolík v zásobníku hráče a na hrací ploše,kde zastupuje „Aÿ. • Žolík (viz. Obrázek 22.) Při položení žolíka na hrací plochu se postupuje stejně jako u standardního kamene, ale po položení žolíka na hrací desku jste vyzváni, aby jste v nově zobrazeném okně vybrali písmeno, které bude žolík zastupovat (viz. Obrázek 23.). Zvláštní akcí je výměna žolíka položeného a již odehraného na
Obrázek 23. Výběr písmene, které bude zastupovat žolík. hrací ploše. Stačí, aby jste na tento žolík klikl levým tlačítkem myši a hra sama zjistí, zda v zásobníku hráče, který je právě na tahu, existuje kámen s písmenem, které žolík na hrací desce zastupuje. Pokud ano, dojde k výměně hracího kamene žolíka s hracím kamenem v zásobníku hráče. Hráč pokračuje v tahu. Pokládání kamenů a vyhodnocení sestavených slov se řídí pravidly uvedenými v „3.1. Pokládání kamenůÿ na straně 13 30
3.7.3.
Herní rozhraní - ukončení hry
Jestliže jeden z hráčů po svém tahu nemá v zásobníku žádný hrací kámen a v pomyslném sáčku nejsou žádné kameny k dolosování, hra končí. Druhým možný způsobem ukončení hry je dosažení počtu prázdných tahů, kdy již v pomyslném sáčku nejsou žádné kameny k dolosování. Jedná se o možný počet prázdných tahů za sebou, tzn. kolikrát mohou hráči za sebou kliknout na tlačítko „Prázdný tahÿ k ukončení tahu. Počet prázdných tahů za sebou se sčítá za všechny hráče. Pokud kterýkoliv hráč položí a odehraje aspoň jeden kámen, hodnota se opět vrátí na maximum počtu prázdných tahů do konce. Jestliže hodnota počtu prázdných tahů do konce je rovna nule, hra končí. Po ukončení hry dojde k vyhodnocení hry (viz. Obrázek 24.).
Obrázek 24. Vyhodnocení hry Scrabble.
31
4.
Programátorská příručka
4.1.
Použitá technologie
K realizaci hry Scrabble jsem využil Microsoft Visual Studio 2008, programovací jazyk C# založený na NET. Framework 3.5.
4.2.
Komponenty programu
Řešení hry jsem jsem dle požadavku zadání rozdělil na čtyři komponenty. 1. Úvodní obrazovka hry 2. Herní logika, herní rozhraní 3. Síťová komunikace 4. Slovník přípustných slov 4.2.1.
Komponenta - Úvodní obrazovka hry
Tato komponenta obsahuje grafické rozhraní úvodní obrazovky hry Scrabble, z kterého se spouští různé módy hry a je zde možnost minimalizace aplikace a ukončení aplikace. Nejsou zde žádné speciální třídy, pouze metody pro spouštění hry. 4.2.2.
Komponenta - Herní logika, herní rozhraní
Tato komponenta je „mozkemÿ celé hry. Obsahuje herní logiku a herní rozhraní. Komponenta je dále členěna na několik dalších částí rozdělených v komponentě na soubory s příponou „.csÿ. • HraciDeska.cs – Třída HraciDeska ∗ ∗ ∗ ∗ ∗
stará se o vlastní herní logiku hry, dodržování pravidel obsahuje grafické herní rozhraní obsahuje instance polí hrací desky obsahuje instance hráčů významné atributy · Policko[,] jednoPolicko = new Policko[15, 15]; - odkazy na jednoltlivá hrací pole herní desky · Hrac[] hraci = new Hrac[4]; - odkazy na jednotlivé hráče ∗ významné metody 32
· CasProsel() - tah byl ukončen překročením limitu času na jeden tah. · HracPrazdnyTah() - hráč ukončil tah prázdným tahem. · HracVymenVsechnyKameny() - hráč ukončil tah výměnou kamenů. · HracVraceniKamenu() - hráč stahuje z hrací desky všechny položené kameny. · HracKontrolaTahu() - hráč ukončil tah položením kamenů na hrací desku. · KontrolaPolozenychKamenu() - kontrola položených kamenů na hrací desce a přípustnosti všech vytvořených slov. · DohranyTah() - potvrzení kamenů na hrací desce při uznaném tahu nebo vrácení kamenů do zásobníku při neuznání tahu. · HrajeDalsiHrac() - změna hráče, který je na tahu · AktualizujInfoTabuli() - aktualizuje informace o hráči na výsledkové tabuli. – Třída Policko (zděděno z třídy Image) ∗ provádí operace nad jedním polem na hrací desce ∗ obsahuje informace o jednom poli hrací desky ∗ zobrazuje grafické vyjádření písmene a jeho hodnoty na hracím poli ∗ významné atributy · byte rada - hodnota 0 - 15, řada pole na hrací desce · byte sloupec - hodnota 0 - 15, sloupec pole na hrací desce · byte nasobnost - druh hracího pole nabývá těchto hodnot: 0 - bez zvláštní ohodnocení 1 - dvakrát hodnota písmene 2 - třikrát hodnota písmene 3 - dvakrát hodnota sestaveného slova 4 - třikrát hodnota sestaveného slova 5 - zvláštní pole Začátek · int kamenHrace - číslo položeného hracího kamene ze zásobníku hráče během tahu hráče · bool polickoObsazeno - obsazenost hracího pole během tahu hráče · bool zolik - pole je obsazeno žolíkem · bool odehrane - pole dohrálo, je obsazeno odehraným hracím kamenem 33
· char kamen - písmeno, které reprezentuje hrací pole nebo znak „*ÿ za žolíka · char zobrazenePismeno - písmeno, které reprezentuje hrací pole, včetně zástupného písmene žolíka ∗ významné metody · jeVolne() - obsazenost pole během tahu nebo po něm · PolozenKamen() - položení kamene na pole · SitovaHraServerPolozenKamen() - položení kamene na pole - síťový server · SitovaHraKlientPolozenKamen() - položení kamene na pole - síťový klient · ZvednutKamen() - odebrání kamene z hrací desky · SitovaHraServerZvednutKamen() - odebrání kamene z hrací desky - síťový server · SitovaHraKlientZvednutKamen() - odebrání kamene z hrací desky - síťový klient · Policko PreviewMouseLeftButtonUp() - výměna žolíka po události kliknutí na žolíka · Policko Obrazek() - grafické vyjádření písmene a hodnoty písmene hracího pole • Hrac.cs – Třída Hrac ∗ ∗ ∗ ∗
obsahuje grafické vyjádření výsledkové tabule hráče obsahuje instance hracích kamenů v zásobníku hráče obsahuje informace o hráči významné atributy · KamenHrace[] kamenyHrace = new KamenHrace[7]; - odkazy na kameny hráče v zásobníku · Image[] imgKamenyHraceTabule = new Image[7]; - grafické vyjádření kamenů hráče na výsledkové tabuli · jmeno - jméno hráče · pocetBodu - body získané hráčem za složená slova · trestBody - trestné body za neodehrané hrací kameny na konci hry · odehranoKamenu - počet položených a odehraných kamenů hráče · hracJeKlientSitoveHry - hráč na síťovém serveru je klient síťové hry 34
∗ významné metody · HracBudeHratTah() - příprava hráče na tah a s tím spojená nastavení. · HracDohralTah() - hráč ukončil tah a s tím spojená nastavení. · SitovyHracDohralTah - síťový klient ukončil tah a s tím spojená nastavení. · SitovyHracDolosovaneKameny() - síťový klient si dolosoval kameny za odehrané · KamenDohral() - za odehraný hrací kámen již není možno dolosovat nový · KontrolaPresunu() - výměna kamenů v zásobníku mezi sebou · vymenZolika() - kontrola, zda má hráč v zásobníku hrací kámen, který lze vyměnit za žolíka na hrací ploše · NastavGrafikuHrace() · NastavGrafikuHracePriHre() · NastavGrafikuHracePriCekani() - nastavení grafického vyjádření hráče na začátku hry, během tahu a při čekání – Třída KamenHrace (zděděno z třídy Image) ∗ ∗ ∗ ∗
provádí operace nad jedním hracím kamenem v zásobníku hráče obsahuje informace o jednom hracím kameni v zásobníku hráče zobrazuje grafické vyjádření hracího kamene v zásobníku hráče významné atributy · int cisKamen - číslo kamene v zásobníku od levé strany · int cisHrace - číslo hráče, kterému kámen patří · bool kamenJePresouvan - indikuje, zda je hrací kámen přesouván na hrací desku · bool losZnaku - indikuje, zda se za hrací kámen bude dolosovávat nový · bool dohral - za odehraný hrací kámen již není možno dolosovat nový · Znak kamenZnak - reprezentace písmene kamene, je vytvořena zvláštní třída Znak, která zároveň zajišťuje událostí změny písmene grafické vyjádření kamene. ∗ významné metody · KamenHrace PreviewMouseLeftButtonUp() · KamenHrace PreviewMouseLeftButtonDown()
35
· Vlakno MouseMove() - metody zajišťující přesouvání kamene a grafické vyjádření tohoto • HraciKameny.cs – Struktura HraciKamen ∗ pomocná struktura s hracími kameny (písmeno, hodnota, počet ve hře) ∗ významné atributy · char znak - písmeno, reprezentující hrací kámen · int ohodnoceni - ohodnocení písmene ve hře · int kolikVeHre - počet těchto kamenů ve hře – Třída HraKameny ∗ jedná se o pomyslný sáček k losování kamenů ∗ na začátku hry obsahuje všech 100 hracích kamenů ∗ významné atributy · List
hraciKameny = new List(); - seznam všech písmen, hodnot a výskytů ve hře · List hraciKamenyVeHre = new List(); - seznam, pomyslný sáček s hracími kameny, z kterého se losují hrací kameny ∗ významné metody · HodnotaKamene() - vrátí hodnotu hracího kamene na základě písmene, které reprezentuje · VratKamen() - vrácení kamene do sáčku při výměně kamenů · VylosujKameny() - vylosuje jeden hrací kámen z pomyslného sáčku · pocetKamenuVeHre() - počet hracích kamenů v pomyslném sáčku Tato komponenta dále obsahuje tato grafická rozhraní: 1. „NovaHraÿ - nastavení nové lokální hry 2. „VyhodnoceniHryÿ - tabulka vyhodnocení po ukončení hry 3. „VyuzitiZolikuÿ - volba písmene za žolík položený na hrací desku Tato grafická rozhraní nemají žádné další třídy. Ostatní soubory této komponenty jsou doplňkové a některé také rozšiřující, které by byly použitelné při případném rozšíření hry jako např. tvorba možných slov z kamenů hráče. 36
4.2.3.
Komponenta - Síťová komunikace
Tato komponenta obsluhuje síťovou komunikaci od jejího počátku, tzn. nastavení, připojení až po ukončení spojení. Síťová komunikace je založena na bázi klient-server, kdy při síťové hře je jeden počítač jako herní síťový server a ostatní, maximálně tři počítače, jsou síťovými klienty. Síťová komunikace je on-line ve formátu XML. Síťový server a klient jsou neustále spojeni a komunikují právě prostřednictví formátu XML. Síťový server uchovává veškeré informace o hře a hráčích. Klienti pouze využívají herního rozhraní k odehrání tahu a výsledky tahu odesílají ke zpracování serveru. Herní server zpracovává veškeré herní situace (vyhodnocování slov, losování kamenů, bodování vytvořených slov, atd.). Klienta i server komunikují s třídou „HraciDeskaÿ pomocí událostí, které třída „HraciDeskaÿ zpracovává. Tato komponenta je rozdělena na soubory pro server a pro klienty. Síťový server Scrabble: • SitovyHracServer.cs – Třída SitovyHracServer ∗ vždy je ve hře pouze jeden ∗ obsluhuje kompletně komunikaci serveru s klienty a předává informace třídě „HraciDeskaÿ ∗ vyhodnocené informace opět rozesílá klientů ∗ významné atributy · SitovaHraHrac[] sitHraHrac = new SitovaHraHrac[4]; - všichni hráči ve hře pro síťovou komunikaci · TcpListener naslouchacServer; - síťový naslouchač pro připojení klientů · TcpClient[] klientHrac = new TcpClient[3]; - odkaz na spojení s klienty · NetworkStream[] netStreamXML = new NetworkStream[3]; · XmlTextReader[] cteniXML = new XmlTextReader[3]; · XmlTextWriter[] zapisXML = new XmlTextWriter[3]; čtení, zápis do síťového proudu pro komunikaci s klienty ∗ významné metody · SitovaHraStart - odstartování síťové hry, všichni klienti jsou připojeni a připraveni na hru · Naslouchani() - naslouchání serveru na síti a připojování klientů · VytvorServer() - nastartuje síťový server na určené IP adrese a portu 37
· · · · · · · ·
ZrusServer() - ukončení a zrušení síťového serveru PripojenKlient() PripravenKlient() - připravenost klienta k síťové hře PripojeniKlienta(int cisloHrace) - připojení a nastavení spojení s klientem OdpojeniKlienta(int cisloHrace) - zrušení spojení s klientem CentrumXMLOdesilani() - zajišťuje kompletní odesilání XML dat klientovi Odesilani() - odesilání částí dat XML klientovi Prijem() - prříjem dat XML od klienta
Síťový klient Scrabble: • SitovyHracKlient.cs – Třída SitovyHracServer ∗ obsluhuje kompletně komunikaci se serverem a předává informace třídě „HraciDeskaÿ ∗ významné atributy · SitovaHraHrac[] sitHraHrac = new SitovaHraHrac[4]; - všichni hráči ve hře pro síťovou komunikaci · TcpClient klientHrac - spojení se serverem · NetworkStream netStreamXML · XmlTextReader cteniXML · XmlTextWriter zapisXML - čtení, zápis do síťového proudu pro komunikaci se serverem ∗ významné metody · SitovaHraStart - odstartování síťové hry, klient je připojen a připraven na hru · Pripojeni() - připojení a nastavení síťového klienta k serveru · Odpojeni() - zrušení spojení se serverem · CentrumXMLOdesilani() - zajišťuje kompletní odesilání XML dat serveru · Odesilani() - odesilání částí dat XML serveru · Prijem() - prříjem dat XML od serveru Soubor SitovyHracSpolecne obsahuje dvě třídy SitovaHraHrac a SitovaHraKamen pro uchování informací o síťových hráčích a jejich hracích kamenech pro síťovou komunikaci klient-server. Tato komponenta obsahuje grafická rozhraní pro nastavení síťového serveru a síťového klienta: 38
1. „SCRABBLEServerÿ - nastavení nové hry jako síťový server popis rozhraní je v sekci ”3.6.2. Síťová hra - SERVER” na straně 20 2. „SCRABBLEKlientÿ - nastavení nové hry jako síťový klient a připojení k serveru popis rozhraní je v sekci ”3.6.3. Síťová hra - KLIENT” na straně 24 4.2.4.
Komponenta - Slovník přípustných slov
Tato komponenta má za úkol jednu jedinou věc, a to je kontrola vytvořených slov ve slovníku přípustných slov. • Slovnik.cs – Třída Slovnik ∗ kontroluje vytvořená slova ve slovníku přípustných slov ∗ významné atributy · SqlCeConnection pripojSlovnik - připojení k SQL serveru · SqlCeCommand prikazSQL - vykonávání SQL příkazu · SqlCeDataReader ctiData - čtení dat z SQL ∗ významné metody · PripojSQL() - nastavení připojení k SQL serveru · OdpojSQL() - odpojení od SQL serveru · KontrolaSlova() - kontrola sestaveného slova ve slovníku přípustných slov Použitý databázový systém je „Microsoft SQL Server Compact 3.5 SP2ÿ, který je ideální pro uchovávání jednoduchých dat (data jsou v jednom souboru „.sdfÿ). Tato verze SQL serveru není třeba instalovat, ale stačí nakopírovat runtime knihovny tohoto SQL serveru k aplikaci, která jej využívá, a do komponenty přidat referenci na tento runtime.
39
Závěr Cílem bakalářské práce bylo vytvoření klasické deskové hry Scrabble v elektronické podobě. Snažil jsem se tento cíl co nejlépe realizovat a splnit veškeré požadavky zadání.
40
Conclusions The aim of my Bachelor thesis is a creation of the classic board game Scrabble in an electronic form. Great effort has been made to reach the set goals and and meet all requirements.
41
Reference [1] Dan Zeman. SCRABBLE - historie. Klub deskových her Paluba http://www.hrejsi.cz/scrabble/historie.htm [2] Tomáš Kuča. SCRABBLE - pravidla. Česká asociace Scrabble, 2008 http://scrabble.hrejsi.cz/pravidla [3] Bill Evjen, Morgan Skinner, Christian Nagel, Jay Glynn, Karli Watson. C# 2008 - Programujeme profesionálně. Nakladatelství COMPUTER PRESS, 2009. [4] John Sharp. Microsoft Visual C# 2008 - Krok za krokem. Nakladatelství COMPUTER PRESS, 2008.
42
A.
Obsah přiloženého CD
bin/ - v adresáři „Setupÿ obsahuje instalátor Scrabble. - v adresáři „Spustitelneÿ obsahuje verzi Scrabble spustitelnou přímo z CD. Pro spuštění spustitelné verze je nutné mít na počítači nainstalován runtime „Microsoft .NET Framework 3.5 SP1ÿ a „Microsoft SQL Compact 3.5 SP2ÿ. doc/ Obsahuje dokumentaci práce ve formátu PDF, vytvořená dle závazného stylu KI PřF pro diplomové práce, včetně všech příloh, a všechny soubory nutné pro bezproblémové vygenerování PDF souboru dokumentace. src/ Obsahuje kompletní zdrojové kódy Scrabble ve formátu „Microsoft Visual Studio 2008ÿ pro bezproblémové vytvoření spustitelných verzí programu (v ZIP archivu). readme.txt Instrukce pro instalaci a spuštění Scrabble. Navíc CD/DVD obsahuje: install/ Obsahuje instalace: • Microsoft .NET Framework 3.5 SP1 (dotnetfx35.exe) • Microsoft SQL Compact 3.5 SP2 (SSCERuntime-ENU.exe)
43
B.
Hrací kameny SCRABBLE
Písmena, bodové ohodnocení a počet ve hře
5x
2x
3x
3x
1x
2x
2x
3x
2x
4x
2x
1x
3x
4x
1x
3x
1x
5x
2x
2x
1x
3x
1x
4x
2x
3x
4x
6x
1x
2x
1x
3x
1x
3x
1x
5x
2x
3x
1x
2x
44
C.
Hrací deska SCRABBLE
45