PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY
BAKALÁŘSKÁ PRÁCE
Počítačová hra na motivy Dračího doupěte
2010
Tomáš Čechal
Anotace Cílem této bakalářské práce bylo vytvoření počítačové hry typu hra na hrdiny (Role-Playing Game), ve které je úkolem hráče procházet herním světem se svou družinou a plnit nejrůznější úkoly. Každá z postav má své specifické vlastnosti což ovlivňuje celý průběh vývoje hry. Hra umožňuje hráči ponořit se do fantasy světa, ve kterém si může vyzkoušet život hrdiny vedoucího svoji družinu do nejrůznějších dobrodružství. Dále nabízí tvorbu vlastního hrdiny z několika druhů postav, sestavení vlastní družiny a svobodné rozhodování v rámci možností herního světa.
Děkuji Mgr. Tomáši Kührovi za vedení mého bakalářského projektu a za cenné rady při konzultacích.
Obsah 1. Úvod
8
2. Zadání bakalářské práce 2.1. Specifikace zadání . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Aplikace by měla umožňovat . . . . . . . . . . . . . . . . . . . . .
9 9 9
3. Počítačové hry 3.1. Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Hraní počítačových her . . . . . . . . . . . . . . . . . . . . . . . .
10 10 10
4. Hra Dračí doupě 4.1. Dostupná podoba hry Dračí doupě . . . . . . . . . . . . . . . . . 4.2. Realizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11 11 11
5. Uživatelská dokumentace 5.1. Požadavky . . . . . . . . . . . . . 5.2. Spuštění aplikace . . . . . . . . . 5.3. Ovládání aplikace a její možnosti 5.3.1. Nabídka menu hry . . . . 5.3.2. Hrací plocha . . . . . . . . 5.3.3. Ovládací nabídka . . . . . 5.3.4. Textový panel . . . . . . . 5.3.5. Příkazový řádek . . . . . . 5.3.6. Zobrazení hrdiny . . . . . 5.3.7. Inventář hrdiny . . . . . . 5.3.8. Nabídka použití kouzel . . 5.3.9. Zobrazení mapy . . . . . . 5.3.10. Nabídka výběru postav . . 5.3.11. Nabídka nákupu vybavení 5.3.12. Bojové tlačítko . . . . . . 5.3.13. Zobrazení boje . . . . . . 5.3.14. Příkazový řádek v boji . . 5.3.15. Nastavení boje . . . . . . 5.3.16. Výběr protivníka k boji . 5.3.17. Kostka . . . . . . . . . . . 5.4. Popis hry . . . . . . . . . . . . . 5.4.1. Používané jednotky . . . . 5.4.2. Kostky . . . . . . . . . . . 5.4.3. Postavy . . . . . . . . . . 5.4.4. Vybavení postav . . . . . 5.4.5. Kouzla a magenergie . . .
12 12 12 12 12 14 14 15 15 16 16 17 18 19 20 21 21 22 22 23 23 24 24 24 24 27 27
4
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . .
5.4.6. 5.4.7. 5.4.8. 5.4.9. 5.4.10. 5.4.11.
Životy . . . . . . . . . . . . . . . . . . . . . . . . . Vývoj postav . . . . . . . . . . . . . . . . . . . . . Souboj . . . . . . . . . . . . . . . . . . . . . . . . . Činnosti, které lze provádět během souboje . . . . . Hledání . . . . . . . . . . . . . . . . . . . . . . . . Činnosti, které lze provádět s postavami během hry
6. Programátorská dokumentace 6.1. Použité technologie . . . . . . . . . . . . . . . 6.1.1. Microsoft Visual Studio . . . . . . . . 6.1.2. C# . . . . . . . . . . . . . . . . . . . . 6.1.3. Extensible Markup Language (zkráceně řitelný značkovací jazyk) . . . . . . . . 6.1.4. PSPad editor . . . . . . . . . . . . . . 6.2. Datové zdroje . . . . . . . . . . . . . . . . . . 6.3. Použité algoritmy . . . . . . . . . . . . . . . . 6.4. Aplikace . . . . . . . . . . . . . . . . . . . . . 6.4.1. Datové prvky aplikace . . . . . . . . . 6.4.2. Prezentační prvky aplikace . . . . . . . 6.5. Problematika vývoje aplikace. . . . . . . . . . 7. Aplikace DRDEditor 7.1. Spuštění Editoru . . . . . . . . . . . . 7.2. Editace již existujícího příběhu . . . . 7.3. Vytvoření nového příběhu . . . . . . . 7.4. Zavedení nového příběhu do aplikace . 7.5. Ovládání editoru . . . . . . . . . . . . 7.5.1. Panel cestování . . . . . . . . . 7.5.2. Panel nestvůry . . . . . . . . . 7.5.3. Panel Mluvení . . . . . . . . . . 7.5.4. Panel Příkazy . . . . . . . . . . 7.5.5. Panel Hledání . . . . . . . . . . 7.5.6. Panel Past . . . . . . . . . . . . 7.5.7. Panel Odměna . . . . . . . . . 7.5.8. Panel Odměna/ Odebrání všem 7.5.9. Místa a tlačítko Odstranit . . . 7.5.10. Zapsat a Vynulovat . . . . . . . 7.6. Realizace Editoru . . . . . . . . . . . . 7.6.1. Ukázka sestavení xml souboru .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . XML, česky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . . . . . . . rozši. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
27 27 28 28 29 29 31 31 31 31 31 32 32 32 33 33 41 44 45 45 45 46 46 46 46 47 47 47 47 48 48 48 49 49 49 49
Závěr
50
Conclusions
51
5
Reference
52
8. Obsah přiloženého CD
53
6
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.
Nabídka menu hry. . . . . . . . . . . . . . . . . . . Hrací plocha. . . . . . . . . . . . . . . . . . . . . . Ovládací nabídka. . . . . . . . . . . . . . . . . . . . Zobrazení hrdiny. . . . . . . . . . . . . . . . . . . . Inventář hrdiny. . . . . . . . . . . . . . . . . . . . . Nabídka použití kouzel. . . . . . . . . . . . . . . . . Nabídka použití kouzel - nepřátelé. . . . . . . . . . Nabídka použití kouzel - hrdinové. . . . . . . . . . . Zobrazení mapy. . . . . . . . . . . . . . . . . . . . . Nabídka výběru postav. . . . . . . . . . . . . . . . Nabídka nákupu vybavení. . . . . . . . . . . . . . . Tlačítko spuštění boje. . . . . . . . . . . . . . . . . Zobrazení boje. . . . . . . . . . . . . . . . . . . . . Nastavení boje. . . . . . . . . . . . . . . . . . . . . Výběr protivníka k boji. . . . . . . . . . . . . . . . Kostka. . . . . . . . . . . . . . . . . . . . . . . . . Indikace přechodu na vyšší úroveň. . . . . . . . . . Základní třídy postav. . . . . . . . . . . . . . . . . Vývojový diagram vyhledávání protivníka nepříteli. Vývojový diagram vyhledávání hrdiny k boji. . . . Vývojový diagram vyhledávání protivníka hrdinovi. Editor. . . . . . . . . . . . . . . . . . . . . . . . . . Ukázka XML kódu příběhu. . . . . . . . . . . . . .
7
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
12 14 14 16 16 17 17 17 18 19 20 21 21 22 23 23 28 34 37 38 39 45 49
1.
Úvod
Hru Dračí doupě jsem si zvolil, protože samotná hra přináší spoustu zábavy, rozvíjí fantazii a dopřává hráčům ponořit se do světa, ve kterém vše záleží jen na jejich rozhodnutí, chování a jednání. V téhle práci jsem se pokusil, alespoň částečně, přiblížit tomuto světu a navodit hráči během hraní pocit, jakoby sám do takového světa patřil. Hra je určena pro hráče, kteří se chtějí na chvíli odreagovat od běžného života a prožít si dobrodružství se svojí fantasy postavou. Ve hře je hráčova postava součástí čtyřčlenné družiny, kterou sám vede. Své spolubojovníky si vybírá a může se podílet na tvorbě jejich vlastností, které charakterizují jednotlivé postavy. Každá z postav má své jedinečné schopnosti, které se v průběhu hry zdokonalují. Samotná volba postav může podstatně ovlivnit vývoj celého dobrodružství.
8
2.
Zadání bakalářské práce
2.1.
Specifikace zadání
Diplomant vytvoří počítačovou hru typu hra na hrdiny (Role-Playing Game), ve které je úkolem hráče procházet herním světem se svou družinou a plnit nejrůznější úkoly.
2.2.
Aplikace by měla umožňovat
• ukládání a načítání hry, • snadnou editaci herních dat • a vytváření dalších jazykových verzí.
9
3. 3.1.
Počítačové hry Historie
Již k roku 1947 se datuje vznik první počítačové hry a následně roku 1948 byla patentována [1]. Byl to počátek vývoje počítačových her a od toho data prošel vývoj obrovskou evolucí. Od ještě nedávných prvních úspěchů piškvorek, prvních kostrbatých 3D her, máme dnes velice realistické a sofistikované herní enginy. Vývoj počítačových her šel současně s vývojem počítače. Dnes již existují firmy (např. Logitech, Electronic Arts apod.), které se věnují pouze výrobě herních komponentů, vývoji herních systémů a samozřejmě vydávání her.
3.2.
Hraní počítačových her
Počítačové hry nejsou určeny pouze pro lidskou zábavu, ale mají i praktický přínos v podobě propracovaných simulátorů, na kterých se školí a zdokonalují profesionálové mnohých oborů, jako je např. armáda, piloti, kosmonauti atd. Také běžný člověk si může za pomoci počítačových her vyzkoušet situace, do kterých se pravděpodobně ve svém životě nikdy nedostane a věci, se kterými se nikdy nesetká. Tak jako má mince rub a líc, tak i toto odvětví má svou stinnou stránku. Hraní počítačových her nejvíce ovlivňuje chování mladých lidí, kteří tráví spoustu hodin denně u svých počítačů a nevnímají svět okolo sebe. Ztrácí postupně přirozenou verbální komunikaci, začínají se stranit ostatním lidem (nehráčům) a těší se, až budou zase ve hře v podobě svého avatara. Dospělí lidé sice netráví tolik hodin hraním her, jako jejich ratolesti, ale zase hrají hry například v zaměstnání, což také většinou nevede k upevňování mezilidských vztahů, zejména s nadřízenými. Dnes již asi téměř neexistují lidé, kromě našich babiček a dědečků, kteří by si občas nějakou hru nezahráli. Proto úsudek, kde je pomyslná mez mezi klady a zápory hraní počítačových her, si nejspíše musíme udělat každý sám.
10
4.
Hra Dračí doupě
Hra Dračí doupě je stolní hra typu RPG (role playing game), odehrávající se ve fantasy světě. Hra je určena pro 2 - 12 hráčů ve věku od 9 let. Hru řídí tzv. pán jeskyně (PJ), který uvádí příběh, navozuje atmosféru prostředí, dohlíží na dodržování pravidel a zastupuje všechny postavy vyskytující se v příběhu. Ostatní hráči jsou hrdinové, kteří bojují s různými nepřáteli, čelí nástrahám, kouzlům, jedům atd. [2]
4.1.
Dostupná podoba hry Dračí doupě
Pravidla hry Dračí doupě vydalo knižně nakladatelství Altar v roce 1990. Hra je neustále rozvíjena a zdokonalována, dnes již verze 1.6 [3]. Na internetu existuje desítky stránek věnované hraní online v podobě textové komunikace hráčů.
4.2.
Realizace
Za pomoci knižních pravidel jsem vytvořil aplikaci, ve které vystupuje čtyřčlenná družina procházející dobrodružstvím [2]. Postavu pána jeskyně zde zastupuje PC. Z důvodu realizace byly některé věci oproti původním pravidlům upraveny, zjednodušeny. Mezi takové patří zejména systém boje, který je v knižních pravidlech podrobně rozebrán a realizace není v rámci bakalářské práce jedné osoby proveditelná.
11
5.
Uživatelská dokumentace
5.1.
Požadavky
Jde o 32-bitovou aplikaci určenou pro operační systém Windows XP, Windows Vista a Windows 7. Minimální požadavky na počítač: minimální rozlišení monitoru 1280x800. Pro chod aplikace je vyžadována podpora technologie Microsoft .NET Framework 3.5 nebo vyšší.
5.2.
Spuštění aplikace
Aplikaci je možné spustit nakopírováním adresáře aplikace do počítače a následným dvojitým kliknutím na soubor DrD.exe, který je umístěn v adresáři . . .\DrD\. Pozor, smazání jakéhokoliv souboru nebo adresáře programu by mohlo mít negativní dopad na celou aplikaci.
5.3. 5.3.1.
Ovládání aplikace a její možnosti Nabídka menu hry
Nabídka je určena k ovládání základních funkcí hry.
Obrázek 1. Nabídka menu hry.
12
V menu se nachází tlačítka jako: • profil - výběr profilu, vytvoření profilu; • nahrát hru - možnost nahrát uloženou hru; • uložit hru - možnost uložit hru; • nová hra - výběr nové hry; • nastavení - nastavení jazyka, nastavení rychlosti vypisování textu, nastavení zobrazení; • nápověda; • o hře; • konec - ukončení aplikace; • hraj / pokračuj - spuštění hry, návrat do hry. Do nabídky menu hry se v průběhu hry můžeme dostat třemi způsoby, a to: • stiskem klávesy ”Esc”; • pomocí ovládací nabídky na hrací ploše; • příkazem ”menu” nebo ”esc” zadaným do příkazové řádky.
13
5.3.2.
Hrací plocha
Zde se odehrává většina herního času. Nahoře se nachází ovládací nabídka, uprostřed textový panel obsahující textové pole pro vypisování příběhu, základní nabídku dalších možností postupu a příkazový řádek. V okolí textového panelu jsou zobrazeny postavy hrdinů. Dole uprostřed tlačítko zobrazení mapy.
Obrázek 2. Hrací plocha.
5.3.3.
Ovládací nabídka
Slouží k ovládání základních funkcí hry tak, jako nabídka menu hry.
Obrázek 3. Ovládací nabídka.
14
5.3.4.
Textový panel
Textový panel slouží k zobrazování příběhu hry. Pod textem je zobrazována základní nabídka dalších možností postupu v příběhu. Postoupit na další část příběhu lze napsáním zobrazeného textu do příkazového řádku a následným stiskem klávesy enter, nebo kliknutím myši na rámeček se zobrazeným textem. 5.3.5.
Příkazový řádek
Příkazový řádek je určen jak k ovládání činnosti postav, tak i k ovládání samotné aplikace. Jednotlivé příkazy lze psát v českém nebo anglickém jazyce. Vpravo příkazového řádku je ikona základní nápovědy k příkazovému řádku. Najetím myši na ikonu se zobrazí text nápovědy. K ovládání činnosti postav jsou definovány následující příkazy: • fight - bojovat; • speak - mluvit; • overhear - naslouchat; • force door - vyrazit dveře; • open - otevřít; • disable - zneškodnit; • seek - hledat; • tracing - stopovat; • treatment - léčit; • meditation - meditovat; • awake - procitnout; • go next level - zvýšit úroveň. K ovládání aplikace slouží příkazy: • help - nápověda; • save - uložit; • esc - menu; • close - konec. 15
5.3.6.
Zobrazení hrdiny
Zobrazení hrdiny nám podává základní informace o postavách jako vlastnosti, popis postavy a vybavení. Informace jsou rozděleny ve čtyřech kartách.
Obrázek 4. Zobrazení hrdiny.
5.3.7.
Inventář hrdiny
Otevírá se na kartě výstroj/dovednosti. Zobrazuje výzbroj a výstroj, kterou hrdina vlastní. Slouží ke změně aktuálně používané výzbroje a výstroje. Změnu výzbroje a výstroje provedeme kliknutím myši na prvek v batohu a následně povelem Použít.
Obrázek 5. Inventář hrdiny.
16
5.3.8.
Nabídka použití kouzel
Otevírá se na kartě výstroj/dovednosti. Zobrazuje hrdinovi kouzla. Slouží k výběru a aplikaci kouzla. Výběr kouzla se provádí kliknutím myši na zobrazené kouzlo a následně na tlačítko Vybrat.
Obrázek 6. Nabídka použití kouzel. Po výběru kouzla se zobrazí nabídka nepřátel a pokud má být kouzlo sesláno na nepřítele, označí se nepřítel kliknutím myši a aplikuje se kouzlo tlačítkem Vybrat. V případě požadavku změny kouzla se tak učiní tlačítkem Kouzla.
Obrázek 7. Nabídka použití kouzel - nepřátelé. Má-li být kouzlo aplikováno na hrdinu, tak pro přepnutí slouží tlačítko Hrdinové/Monstra.
Obrázek 8. Nabídka použití kouzel - hrdinové.
17
5.3.9.
Zobrazení mapy
Pro vyvolání mapy slouží tlačítko Zobrazit/skrýt mapu umístěné dole na středu hrací plochy. Mapa slouží k zakreslení cesty, kterou hráč volil. Následně se může vracet a prozkoumávat ještě nenavštívená místa. Místa pro zakreslení do mapy jsou popisována pomocí světových stran. Předpokládá se, že hrdina stojí vždy otočený směrem k severu. Severní stranou je myšlen horní okraj monitoru. Označení cesty se provádí levým tlačítkem myši, odznačení pravým tlačítkem.
Obrázek 9. Zobrazení mapy.
18
5.3.10.
Nabídka výběru postav
Zobrazuje nabízené druhy ras a povolání pro vytvoření postavy. Na výběr je ze čtyř ras a čtyř povolání. Pro vytvoření postavy provedeme výběr rasy, povolání a pozice ve skupině. Ještě před samotným vytvořením postavy, můžeme zvolit, zda se má postava vygenerovat automaticky nebo její vlastnosti bude vytvářet hráč sám. K tomu slouží volba dole pod nabídkou. V případě volby generovat, bude po kliknutí na tlačítko Vytvořit automaticky vytvořena postava. V opačném případě bude zobrazena kostka (obr. 16.) a hráč se podílí na vytvoření postavy.
Obrázek 10. Nabídka výběru postav.
19
5.3.11.
Nabídka nákupu vybavení
Zde si postavy nakupují své vybavení. Nabídka věcí možných k nákupu je upravována dle jednotlivých postav. Zde je zobrazena nabídka nákupu zbraní. Pro nákup vybavení provedeme výběr postavy, následně výběr vybavení a tlačítkem Koupit provedeme nákup. Pro výběr postavy i vybavení používáme levé tlačítko myši, pro zrušení výběru pravé tlačítko myši. Při nákupu je u postavy kontrolováno, zda vlastní dostatečné množství zlata a dostatečnou volnou nosnost. V případě nevyhovující jedné z podmínek je nákup neuskutečněn.
Obrázek 11. Nabídka nákupu vybavení. Další nabídky stejného charakteru obsaženy ve hře jsou: • platnéřství - brnění a štíty; • obchodník - vaky, jídlo; • knihovna - výuka kouzel; • vetešník - výkup předmětů.
20
5.3.12.
Bojové tlačítko
V případě napadnutí nepřítelem se objeví přes příkazový řádek tlačítko spuštění boje. Boj je spuštěn kliknutím myši na toto tlačítko.
Obrázek 12. Tlačítko spuštění boje.
5.3.13.
Zobrazení boje
Zde se odehrává část hry, kdy se bojuje. V levém a pravém rohu jsou zobrazeny bojující postavy, uprostřed se vypisuje průběh boje. Pod textem je zobrazena vzdálenost postav v boji. V ovládací části je tlačítko Nastavení boje, kterým se vyvolá nabídka pro nastavení v boji (obr. 14.). Uprostřed je příkazový řádek pro ovládání postav během boje a pod ním je zobrazena kostka. Kostka se ovládá levým tlačítkem myši. Při prvním kliknutí na kostku se kostka uvede do činnosti, při druhém kliknutí se zastaví. V případě nastavení automatického boje je na pravé straně indikován čas, ve kterém lze převzít ovládání postavy. Pro převzetí ovládání postavy slouží tlačítko Převzít iniciativu.
Obrázek 13. Zobrazení boje.
21
5.3.14.
Příkazový řádek v boji
Příkazový řádek slouží k ovládání postav a jejich činnosti v boji. Postava se ovládá pomocí příkazů zadaných do příkazového řádku a následného zmáčknutí klávesy enter. Příkazy k ovládání činnosti postav jsou: • change fighter - změna nepřítele; • overawe - zastrašit; • state - stát; • go forward - jít vpřed; • go back - jít vzad; • run - útěk; • inventory - inventář; • magics - kouzla. Pro zobrazení nápovědy k příkazovému řádku v boji slouží příkaz nápověda nebo help. 5.3.15.
Nastavení boje
Pomocí myši lze nastavit činnosti postav, ve kterých je bude zastupovat počítač.
Obrázek 14. Nastavení boje.
22
5.3.16.
Výběr protivníka k boji
Výběr protivníka se provede kliknutím myši na zvoleného protivníka. Po kliknutí se spouští automaticky boj s protivníkem.
Obrázek 15. Výběr protivníka k boji.
5.3.17.
Kostka
Prvek označený jako kostka obsahuje házecí rotující kostku a textové pole. Kostku lze ovládat pomocí levého tlačítka myši nebo klávesou space. Při prvním kliknutí myši nebo stisknutí klávesy space se uvede kostka do činnosti, při druhém kliknutí nebo zmáčknutí klávesy se kostka zastaví a zvolená hodnota bude akceptována do hry. V textovém poli se zobrazují informace k aktuálnímu použití kostky.
Obrázek 16. Kostka.
Obrázky do hry byly pořízeny prostřednictvím internetu [8].
23
5.4. 5.4.1.
Popis hry Používané jednotky
Délka je udávána v sázích a coulech. Jeden sáh odpovídá přibližně jednomu metru a jeden coul přibližně jednomu centimetru. Hmotnost je udávána v mincích. Dvacet zlatých mincí odpovídá přibližně jednomu kilogramu. Magenergie je energie potřebná k vyvolání kouzel, nemá ekvivalent v reálném světe. 5.4.2.
Kostky
Ve hře jsou použity celkem tři různé druhy kostek a to: • šestistěnná s hodnotami 1 - 6; • desetistěnná s hodnotami 1 - 10; • desetistěnná s hodnotami 0 - 9. Kostka 0-9 se používá k házení procentních hodů. Obahuje nulu, aby bylo možné hodit např. 3% = 03, hod 100% = 00. Ne vždy je dobré házet nejvyšší čísla, jak jsme většinou zvyklí. Pokud máme 20% šanci na útěk z boje, je potřeba k úspěchu hodit méně jak 20%. Hráč je vždy upozorněn na to, jaký hod má uskutečnit. 5.4.3.
Postavy
Základní charakteristika postav je dána jejich rasou a jejich povoláním. Od volby rasy a povolání se odvíjejí všechny možnosti a dovednosti postavy. Rasy Kudůk Kudůkové jsou zvláštní rasou, která vznikla kdysi dávno spojením plemene trpaslíků a hobitů. Kudůkové dorůstají 90-130 coulů a 1000-1500 mincí hmotnosti. Jsou velmi obratní a poměrně i chytří. Po trpaslících zdědili svoji nezdolnost. Rádi žijí mimo větší osídlená místa někde v horách i nížinách. V boji umí dobře zacházet jak s ručními, tak i střelnými zbraněmi, jsou obratní a tudíž i šikovní zloději.
24
Elf Elfové jsou vysocí 145-180 coulů, váží 1000-1700 mincí. Elfové jsou národ sympatizující s matkou přírodou. Žijí v lesích, údolích a roklinách. Jsou drobnější postavy než lidé, mají jemné rysy a jsou považováni za velmi krásná stvoření. Dosahují velmi vysoké inteligence, a proto neradi bojují hrubou silou. Jsou-li však k boji donuceni, mohou být velmi nebezpeční. Díky své vysoké obratnosti jsou velmi nadaní střelci a střelné zbraně preferují. Tráví hodně času studiem, učením magie a kouzel. Z jejich řad vzešlo již mnoho známých a nesmírně šikovných kouzelníků. Člověk Výška člověka se pohybuje v rozmezí 165-210 coulů, váha 1300-2300 mincí. Lidé se od těch, jak je známe, téměř vůbec neliší. Žijí jak v oblastech hor tak i stepích a tundrách. Shlukují se do vesnic a měst budovaných na obchodních křižovatkách. Lidé nejsou silní jako krollové, ani chytří jako elfové, ale jsou houževnatí a nacházejí uplatnění v celé škále povolání. Kroll Krollové dorůstají 180-245 coulů, hmotnost je vyšší v rozmezí 2000-4000 mincí. Většinou staví svá obydlí v nehostinných podmínkách hor a tunder. Dospělý kroll může připomínat pračlověka. Jsou silnější než obyčejní lidé, neohrabaní a také mnohem hloupější. Patří k nejobávanějším bojovníkům. Už po celé generace bojují mezi sebou, a tudíž jejich umění boje je již velmi vyvinuté. Disponují ještě jednou vlastností, a to je sluch, který zdědili po divokých předcích. Umožňuje slyšet nepřítele dříve a tím získat výhodu. Povolání Válečník Silná a houževnatá postava. V boji umí použít jakoukoliv zbraň. Šance, že by nepřítele nezasáhl, je velmi malá. Válečník je nepostradatelný všude tam, kde je potřebná hrubá síla jako boj, vyrážení dveří atd. Válečník již svým vzhledem budí velký respekt, a proto mezi jeho zvláštní schopnost patří zastrašení nepřítele. Mezi další jeho schopností patří léčba vlastních zranění. Bylo by téměř sebevraždou jít do dobrodružství bez válečníka, jelikož boj je zde nevyhnutelnou součástí.
25
Kouzelník Je velmi chytrý, avšak není příliš dobrý v přímém boji tváří v tvář. Ovládá jen lehké zbraně a štíty, nepoužívá žádné bojové brnění. Vše vynahrazuje používáním kouzel různých druhů. Lidé se k nim chovají uctivě, ale podezřívavě a se strachem. Kouzelníci dávají přednost samotě, ve které studují svá kouzla, nabírají svou energii a zdokonalují své umění. Kouzelníkovy schopnosti jsou velmi mimořádné a neměl by chybět v žádné skupině. Hraničář Hraničář je silný a moudrý. Hraničáři žijí v hlubokých hvozdech, kde sami střeží stezky a pomáhají těm, kdo pomoc potřebuje. V boji má hraničář určité omezení, ovládá jen lehké a střední zbraně. Ovládá téměř všechny druhy střelných zbraní a všechny druhy brnění kromě rytířských. Díky dlouholetému styku s přírodou a přírodní magií se u nich vyvíjejí i jisté nadpřirozené schopnosti. Mezi hraničářovi mimořádné schopnosti patří stopování a kouzla. Postava hraničáře má také výhodu v boji proti zvířatům, a to v podobě bonusu +1 na obranu i útok. Zloděj Velmi mrštná postava, z čehož též vyplývají jeho hlavní rysy. V boji se moc nesnaží stát v první řadě, ale umí také tvrdě zasáhnout. Používá lehké a střední zbraně pro boj tváří v tvář, téměř všechny střelné zbraně a lehké brnění. Je odborníkem na nebezpečné situace, které vyžadují spíše obratnost než hrubou sílu. Zloději studují své řemeslo a stále se v něm zdokonalují. Prostí lidé si vykládají bájné zkazky o jejich umění. Zlodějovy schopnosti závisí na jeho charismatu, obratnosti a zkušenosti. Každá ze schopností může selhat a skončit totálním neúspěchem. Mezi jeho schopnosti patří především objevení a otevření různých objektů, objevení a zneškodnění mechanismů, komunikace s lidmi. Díky svým pozoruhodným schopnostem je žádaným členem v každé skupině.
26
5.4.4.
Vybavení postav
Výzbroj hrdiny lze pořídit na jednotlivých místech v průběhu hry. Všechny druhy zbraní pořídíte u zbrojíře, který dokáže odhadnout hrdinu podle vzhledu a nabídne mu jen zbraně, které přísluší jeho postavě. Štíty a brnění pořídíte v platnéřství, který podobně jako zbrojíř, dokáže za dobu své činnosti odhadnout hrdinu a upravit mu podle toho svoji nabídku. Použití výzbroje má své omezení. Pokud uchopí postava do rukou obouruční zbraň, jeho štít je automaticky uložen v jeho inventáři. Pokud je použito kouzlo pro zvýšení vlastnosti výzbroje, nelze měnit aktuální výzbroj až do doby pominutí kouzla. Výstroj lze pořídit u obchodníka, který má sice velmi omezený výběr, zato však samé důležité věci jako jsou torny a vaky pro zvýšení nosnosti hrdiny. 5.4.5.
Kouzla a magenergie
Pokud je postava obdařena uměním kouzlit, nová kouzla se naučí z knih v některé z knihoven. Postavě z možností kouzel se zvyšší úrovní zvedne i počet používaných kouzel a maximální množství magenergie potřebné ke kouzlení. Magenergii postava získává meditací. Postava je během meditace nepoužitelná a neúčastní se žádným způsobem vývoje hry. Do meditace vstoupí postava pomocí příkazu zadaného do příkazového řádku. Totéž platí pro procitnutí z meditace. Nárůst magenergie je 1 mag za 3 minuty našeho času. Pokud odpočívá hráč, odpočívá i jeho družina. Pokud hráč nehraje více jak 4 hodiny, bude družina odpočata a všem se magenergie doplní do maximální hodnoty. 5.4.6.
Životy
Životy získává postava pomocí odpočinku, kouzel a samoléčbě. Postava hraničáře umí kouzla, které vyléčí určitý počet životů. Hrdinové některých povolání jsou již tak zoceleni, že mají jednou za den zvláštní schopnost samoléčby. Všem postavám se doplní životy odpočinkem hráče delším jak 4 hodiny. 5.4.7.
Vývoj postav
Postavy během dobrodružství získávají zkušenosti za své činy. Každá činnost, kterou postava vykoná, je ohodnocena. Nejvíce zkušeností získává postava při vykonávání svých zvláštních schopností, jelikož jejich používáním se stále zdokonalují. Po získání určité míry zkušeností může postava přejít na vyšší úroveň. Postava je během přechodu nepoužitelná a nezúčastňuje se vývoje hry. Pokud dojde k přerušení přechodu, přechod se neuskuteční. Pro zrušení přechodu lze použít stejný příkaz jako pro procitnutí z meditace. 27
Možnost přechodu na vyšší úroveň je indikována na zobrazení hrdiny. Po najetí myší na indikaci možnosti přechodu na vyšší úroveň se zobrazí podrobnosti přechodu.
Obrázek 17. Indikace přechodu na vyšší úroveň.
5.4.8.
Souboj
Souboj probíhá v podobě jednotlivých kol. Během jednoho kola může postava vykonat jeden úkon. Výjimečně lze provést více úkonů, a to například při použití kouzla ”Dvojitý útok.” V tom případě provede postava dva útoky za jedno kolo. Kola jsou rozdělena na útok postavy a na obranu postavy. V jednom kole je postava na tahu útoku a v druhém na tahu obrany. Na začátku souboje hraje velkou roli moment překvapení. Rozhoduje o tom, která strana bude na tahu útoku, a která na tahu obrany. Pokud hrdinové vědí předem o nepříteli, jsou ve výhodě a mají moment překvapení ve svůj prospěch. V případě neutrálního stavu se rozhoduje hodem šestistěnné kostky. 5.4.9.
Činnosti, které lze provádět během souboje
Změna nepřítele Během souboje lze změnit nepřítele proti kterému bojujete. Zastrašení Některé z postav vypadají mnohdy ještě hrozivěji, než nepřátelé, se kterými bojují a budí přirozený respekt. Díky téhle vlastnosti se mohou pokusit zastrašit nepřítele, a tím ukončit boj. Stát, jít vpřed, jít vzad Během boje se vyhodnocuje vzájemná vzdálenost nepřátel a dosah jejich zbraní, tudíž se dá se vzdáleností kalkulovat. Útěk Pokud již hrdinové jsou na sklonku svých sil a boj nemíří ke konci, mohou se pokusit z boje utéct.
28
Inventář Vyvolání inventáře hrdiny. Kouzla Vyvolání použití kouzel. Nápověda Vyvolání nápovědy k boji.
5.4.10.
Hledání
Hledání je jednou z nejdůležitějších činností. Během dobrodružství mohou být na cestě nastraženy různé pasti, jedy, tajné dveře, mechanismy a také schovány části výzbroje a výstroje. Pasti a jedy mohou být nastraženy pro nezvané návštěvníky. Při bezmyšlenkovitém jednání můžou hrdinové utrpět velkou újmu na životech. Pokud takové místo naleznou předem, mohou se pokusit nástrahy zneškodnit nebo omezit jejich účinek, a tím předejít ztrátě životů. Tajné dveře chrání spoustu míst, které nemají být navštíveny každým kolemjdoucím, a tak bývá jejích vstup dobře maskován. Během dobrodružství lze také najít výzbroj a výstroj, která se postavě může hodit, nebo ji může později prodat a získat tak nějaké zlaťáky. 5.4.11.
Činnosti, které lze provádět s postavami během hry
Bojovat Pokud postavy narazí na nepřítele a on je nenapadne, můžou jej napadnout sami. Mluvit Mluvení je základním prostředkem získávání informací. Získané informace mohou postavám mnohdy urychlit činnost. K úspěšnému získání informací musí mít postava vyšší úroveň inteligence a charisma. Naslouchat, stopovat Je dobré vědět o nepříteli dříve. Tím získají postavy moment překvapení na svoji stranu.
29
Hledat Během dobrodružství lze najít nejrůznější věci, tajné dveře, nastražené pasti a jedy. Otevřít Pokud hrdinové najdou skryté dveře, budou je nejspíše potřebovat otevřít. Ne vždy je to lehká činnost, dveře mohou být dobře zamčeny. Vyrazit dveře Pokud nejdou dveře otevřít, hrdinové se je mohou pokusit vyrazit. Zneškodnit Při nalezení pastí a jedů se je hrdinové mohou pokusit zneškodnit nebo omezit jejich účinek a tím předejít ztrátě životů. Meditovat Hrdinové obdařeni možností kouzlit, získávají svoji energii meditací. Procitnout Stav meditace hrdiny ukončí opětovné procitnutí. Léčit Některé postavy jsou obdařeny vlastností samoléčby. Zvýšit úroveň Zdokonalit hrdinovi vlastnosti [2].
30
6. 6.1.
Programátorská dokumentace Použité technologie
Aplikace je vytvořena v prostředí Microsoft Visual Studio 2008, v programovacím jazyku C#. Data jsou načítána a ukládána ve formátu XML (Extensible Markup Language) . 6.1.1.
Microsoft Visual Studio
Microsoft Visual Studio je integrované prostředí od firmy Microsoft. Zjednodušuje proces vývoje aplikace od návrhu až po nasazení. Obsahuje velké množství integrovaných nástrojů pro vytváření GUI aplikací, designer webu a databází. Dále obsahuje nástroje pro testování i ladění. Mezi vestavěné jazyky patří C/C++ (použitím Visual C++), VB.NET (použitím Visual Basic.NET) a C# (použitím Visual C#). Podpora dalších jazyků jako Chrome, F#, Python a Ruby spolu s ostatními může být přidána jazykovými službami, které musí být nainstalovány zvlášť. Také je podporováno XML/XSLT, HTML/XHTML, JavaScript a CSS [4]. 6.1.2.
C#
Vysokoúrovňový objektově orientovaný programovací jazyk vyvinutý firmou Microsoft zároveň s platformou .NET Framework, později schválený standardizačními komisemi ECMA (ECMA-334) a ISO (ISO/IEC 23270). Microsoft založil C# na jazycích C++ a Java (a je tedy nepřímým potomkem jazyka C, ze kterého čerpá syntax). Pomocí jazyka C# lze například napsat dynamickou webovou stránku, webovou službu XML, komponentu distribuované aplikace, komponentu k přístupu do databáze a samozřejmě klasickou aplikaci pro pracovní plochu systému Windows [5]. 6.1.3.
Extensible Markup Language (zkráceně XML, česky rozšiřitelný značkovací jazyk)
XML je obecný značkovací jazyk, který byl vyvinut a standardizován konsorciem W3C. Umožňuje snadné vytváření konkrétních značkovacích jazyků (tzv. aplikací) pro různé účely a různé typy dat. Zpracování XML je podporováno řadou nástrojů a programovacích jazyků. Jazyk je určen především pro výměnu dat mezi aplikacemi, pro publikování dokumentů a jako uložiště dat. XML usnadňuje počítači tvořit, číst a zapisovat data, zajistit jednoznačnost struktury dat. Stejně jako HTML používá tzv. tagy a atributy, zatímco však HTML přesně specifikuje, co který tag či atribut znamená, XML používá tagy pouze k ohraničení částí dat a zpracování přenechává aplikaci, která data čte [6].
31
Každý XML dokument musí striktně dodržovat syntaktická pravidla: • Obsah dokumentu musí být uložen v jednom kořenovém elementu. • Každý element je párový. • Elementy se nesmějí křížit. • Hodnoty atributů musí být v uvozovkách. • Element nesmí začínat tečkou, pomlčkou nebo podtržítkem. 6.1.4.
PSPad editor
PSPad editor je volně šířitelný univerzální editor pro MS Windows. Vznikl koncem roku 2001 jako náhrada za Notepad. Program podporuje formáty HTML, XHTML, Java, JavaScript, Perl, PHP, Python, XML, C, C++ a další. Umožňuje zvýraznění syntaxe, kontrolu českého pravopisu a spoustu jiných funkcí. PSPad editor byl využit pro tvorbu a editaci všech datových zdrojů využívaných v aplikaci [7].
6.2.
Datové zdroje
Datové zdroje lze rozdělit na dvě části, a to na část aplikační a část prezentační. V tomto smyslu jsou vytvořeny datové XML soubory. V datových souborech jsou uloženy výchozí data a hodnoty k výpočtům. V souborech podporující zobrazení jsou uloženy texty a cesty k obrázkům. Tento přístup vede ke zjednodušené následné editaci, možnosti přidávat jiné jazykové mutace, měnit vzhled zobrazení, přidávat herní postavy, předměty v nabídkách vybavení hrdinů a především vkládat další herní příběhy. Při dodržení navržených struktur XML souborů lze do aplikace vložit jakýkoliv nový příběh, jakoukoliv jazykovou mutaci, nové postavy hrdinů, vybavení postav a podobně.
6.3.
Použité algoritmy
Jádrem celé hry jsou propracované výpočetní algoritmy. Algoritmy jsou použity na vytváření vlastností a možností postav, stanovení úspěšnosti činností postav během hry a hlavně na systém boje. Algoritmy jsou převzaty z knihy [2]. Některé z uvedených algoritmů musely být z důvodu realizace upraveny.
32
Aplikace používá následující algoritmy: • určení vlastností podle povolání; • určení vlastností podle rasy; • určení postihů a bonusů; • určení počtu životů; • přechod na vyšší úroveň; • zastrašení nepřátel; • stopování; • naslouchání; • úspěšnost sesílání kouzel; • mluvení; • objevení mechanizmů; • objevení objektů; • zneškodnění mechanizmů; • otevření objektů; • systém boje; • útěk z boje.
6.4.
Aplikace
K jednotlivým třídám jsou uvedeny jen hlavní metody, na kterých je postavena funkcionalita programu. 6.4.1.
Datové prvky aplikace
Úkolem datových prvků je načítat data z datových souborů, provádět nad nimi výpočty a uchovávat jejich výsledky. Je na nich založena celá funkcionalita programu.
33
Základním prvkem programu jsou postavy a jejich vybavení.
Obrázek 18. Základní třídy postav. Třída Existence.cs Třída je předchůdce pro třídy Moster.cs a Hero.cs. Obsahuje stejné datové složky a metody pro postavy vystupující ve hře. Třída Monster.cs Třída monster slouží k načtení a nastavení vlastností postavy nepřítele. Většina dat je přímo uložena v datovém souboru monsters.xml. Třída Hero.cs Uchovává všechny vlastnosti vytvořené postavy, vykonává úpravy hodnot a vlastností v případě přechodu na vyšší úroveň a při meditaci postavy. Třída pracuje s datovými soubory xp next level.xml a bonus.xml. Úprava hodnoty vlastností při přechodu na vyšší úroveň. public void LoadNextLevel() Třída CreateHero.cs Třída sloužící k vytvoření postavy hrdiny. V téhle třídě je uplatněna podstatná část realizovaných algoritmů, jelikož vytvoření hrdiny je jednou z nejdůležitějších částí hry. Datové soubory potřebné k tvorbě postav jsou: clovek.xml, elf.xml, kroll.xml, kuduk.xml, hranicar.xml, kouzelnik.xml, valecnik.xml, zlodej.xml, bonus.xml, overawe.xml, probably success.xml, races.xml, jobs.xml. Vytvoření postavy. public Hero LoadHero(string pathRace, string pathJob, bool ranProp)
34
Načtení rozsahu vlastnosti. private int[] GetRange(XmlNode node) Určení počtu hodů při nastavování vlastnosti. private int GetCountThrow(int[] propRange) Určení hodnoty přičítající se k hodu (součtu hodů) kostkou, při určování vlastnosti. private int GetValueAddProp(int[] propRange, int countThrow) Výpočet hodnoty vlastnosti. private int GetProperty(string titleProperty) Výpočet počtu zlata hrdiny. private int GetCountGold() Třída Bag.cs Slouží k uchovávání vybavení hrdiny. V aplikaci je zobrazena jako inventář hrdiny. Třída využívá datový soubor equipments.xml. Vložení vybavení do zavazadla. public void AddBag(Equipment thing) Odstranění vybavení ze zavazadla. public void RemoveBag(Equipment thing) Třída Equipment.cs Je předchůdcem tříd Weapon.cs, Armour.cs, Shield.cs, Food.cs a Jewel.cs. Všechny vyjmenované třídy slouží k načtení a uchovávání hodnot vybavení pro následující využití a zpracování. Třídy načítají data ze souboru weapons.xml, armours.xml, shields.xml a equipments.xml. Třída MagicApply.cs Třída provádí aplikaci kouzla na postavu. Ve třídě dochází k uložení původních hodnot vlastností postavy, k aplikaci kouzla a po ukončení působení kouzla k opětovnému návratu původních hodnot vlastností. Data pro prezentaci třídy magic apply.xml. Odstranění štítu. private void UnSetShieldDefensive(Existence ex) Nastavení dvojitého útoku. private void SetDoubleAttack(Existence ex, Magic mag) Nastavení bonusu zbraně. private void SetBonusWeapon(Existence ex, Magic mag)
35
Nastavení bonusu štítu. private void SetBonusShield(Existence ex, Magic mag) Nastavení bonusu k útěku z boje. private void SetBonusFightRun(Existence ex, Magic mag) Nastavení počtu životů. private void SetBonusLives(int koef) Nastavení vzdálenosti protivníků. private void SetDistance(int value) Nastavení postihu životů. private void SetSanctionLives() Nastavení dosahu zbraní, zbraně. private void SetRangeOfFire(int range) Třída Cube.cs Třída vytváří házecí kostku jakéhokoli rozsahu. V konstruktoru se zadává minimální a maximální požadovaná hodnota kostky. public Cube(int minValue, int maxValue) Naplnění stran kostky čísly požadovaného rozsahu. private void FillValueSides(int min, int max) Vrací jednu stranu kostky automaticky vygenerovanou. public int GetValue() Třída PanelBattlefield.cs Třída zobrazující a vyhodnocující průběh boje. Celý boj se odehrává ve smyčce, při které se mění postavy hrdinů, postavy nepřátel a střídají se jejich pozice mezi útokem a obranou. Boj přetrvává až do chvíle, kdy jsou všechny postavy jedné strany pobity, nebo se podaří hrdinům použít jednu ze svých speciálních vlastností, popřípadě utéct z boje. Třída využívá soubor form battlefield.xml.
36
Výběr protivníka ze strany nepřítele Nepřítel nejdříve kontroluje, zda již není s někým ve dvojici v boji z předešlého kola. Pokud je, nadále bojuje se svým protivníkem. private bool FoundCoupleMonster(Monster monster) Nemá-li protivníka ve dvojici, hledá mezi hrdiny, který ještě není s nikým v bojující dvojici. private Hero FoundFreeHero() Nenalezne-li volného protivníka, generátorem se náhodně jeden vybere.
Obrázek 19. Vývojový diagram vyhledávání protivníka nepříteli.
37
Nalezení hrdiny k boji U hrdinů musí být dodržen určitý postup výběru bojujícího hrdiny. Nejdříve začínají postavy z možností kouzlit, které ještě nebojovaly. private Hero GetFightingHeroMagic() Další jsou na řadě postavy se střelnými zbraněmi, které ještě nebojovaly. private Hero GetFightingHeroFireArms() Nakonec ostatní, kteří ještě nebojovali. private Hero GetFightingHeroNotFought()
Obrázek 20. Vývojový diagram vyhledávání hrdiny k boji.
38
Výběr protivníka ze strany hrdiny Hrdina nejdříve kontroluje, jestli už není s někým ve dvojici v boji. Pokud už je, nadále bojuje se svým protivníkem. private bool FoundCoupleHero(Hero hero) Nenajde-li protivníka, nabídne uživateli výběr ze všech nepřátel.
Obrázek 21. Vývojový diagram vyhledávání protivníka hrdinovi. Spuštění výkonu jednoho kola boje. private void StartFighting() Spouštění útoku postavy. private void Attack(Existence ex) Spuštění obrany postavy. private void Defence(Existence ex) Vyhodnocení boje. private void EvalutionRound(Hero hero, Monster monster) Během útoku a obrany se vyhodnocuje vzdálenost bojovníků a dosah jejich zbraní. Podle toho se nepřítel také chová. Pokud je daleko a bylo na něj vystřeleno, tak se útoku brání. Nebylo-li vystřeleno jde dopředu. Ve chvíli, kdy je hrdina na dosah jeho zbraně, bojuje. Vyhodnocení boje probíhá pokud dvojice bojovala. Byla-li mimo dosah zbraní, je vyhodnocení přeskočeno.
39
Kontrola zda jeden z dvojice není již mrtev. private bool CheckEndFighting() Kontrola zda není už po smrti celá jedna bojující strana. private void CheckFinishBattle()
Třída FormGameDesk.cs Tato třída tvoří hlavní hrací plochu a scházejí se v ní ať už přímo či nepřímo všechny objekty vytvořené v programu. Jejím úkolem je načítat a zobrazovat příběh, komunikovat s uživatelem a na základě jeho požadavků vykonávat jednotlivé operace s datovými i prezentačními objekty. Třída načítá prezentační data ze souboru form game desk.xml. Vykonání příkazů zadaných do příkazového řádku. Na základě zadaného příkazu se spustí stanovený výpočetní proces a podle nastavených aktuálních hodnot objektů dojde k vyhodnocení. private bool MakeSpecialCommand(string command) Načítání zvolených částí příběhu. Tato metoda provádí načítání zvolených částí příběhů a nastavení jednotlivých objektů podle načtených specifik. private void GoNextPart(string id) Uložení navštívených míst příběhu. Tato metoda je jednou z nejzásadnějších částí aplikace. Provádí uložení navštívených míst příběhu. Pokud už uživatel na nějakém místě bojoval a není v příběhu vytvořena smyčka opětovného boje, nebude již zde při návratu bojovat. Také se ukládají nalezené věci v příběhu a k těm se nelze opětovaně dostat. private void WriteVisitedNode(XmlNode xn)
40
6.4.2.
Prezentační prvky aplikace
Úkolem prezentačních prvků je načítání prezentačních dat z prezentačních datových souborů a zobrazovat data dodaná od datových prvků. Prvky vytvořeny speciálně pro účel této aplikace, které jsou obohaceny o nějakou funkcionalitu vzhledem k běžně dostupným prvků ve Visual Studiu 2008. Třída PictureBoxIndication.cs Prvek poděděný ze třídy PictureBox.cs, který je částečně překryt druhým prvkem PictureBox. Po události kliknutí levým tlačítkem myši změní barvu pozadí. Docílen zrakový vjem výběru prvku. Třída PanelIndication.cs Prvek poděděný ze třídy Panel.cs, který v součinnosti s prvkem PictureBoxIndication.cs zajišťuje indikaci výběru jednoho prvku obsaženého v tomto panelu. Při kliknutí na neoznačený prvek, dojde k odznačení předešlého prvku a následné označení nového prvku. Panel vrací vybraný prvek. public PictureBoxIndication SelectedControl Třída CubePicPictureBox.cs Prvek poděděný z PictureBox.cs opatřen časovačem, který v nastaveném intervalu náhodně mění image soubory na pozadí. Obsahuje jeden image soubor označený jako backSide, což je výchozí zobrazení kostky. Dojde-li k první události Click myší, spustí se časovač, který v nastaveném intervalu mění zobrazené obrázky na pozadí. Při druhém kliknutí myši dojde k zastavení časovače, ukončení výměny obrázků a návrat k výchozí zadní straně. V součinnosti s datovou třídou Cube.cs tvoří zobrazení rotující kostky, na které se uživatel kliknutím snaží získat požadovanou hodnotu . Třída TextBoxSlowWriter.cs Třída poděděná ze třídy TextBox.cs. Prvek vytvořen pouze z design účelu. Provádí postupné zobrazování textu ve stanoveném intervalu. Metoda provádějící postupné vypisování. public void WriteText(string text)
41
Zbylé prvky které níže uvedu jsou poskládány z výše uvedených prezentačních objektů a z běžně dostupných objektů v Microsoft Visual Studiu 2008. Jediným jejich účelem je zobrazení výše popsaných dat, načtení textů popisujících aktuálně prezentovaná data a získání uživatelského vstupu. Třída PresentationPictureBox.cs Zobrazení výzbroje, výstroje a kouzel postav. Třída PresentationPictureBoxRasAndJob.cs Zobrazení popisu rasy postavy a povolání postavy. Třída PicFighting.cs Zobrazení postav v boji. Třída využívá prezentační soubor picture existence fighting.xml. Třída PictureHero.cs Hlavní zobrazení hrdiny a všech jeho vlastností. Třída využívá prezentační soubor picture hero.xml. Třída PictureHeroMin.cs Zobrazení hrdiny s vybranými informacemi. Využito při nákupech výzbroje a výstroje. Třída využívá prezentační soubor picture hero min.xml. Třída FormCubeWithText.cs Zobrazení házecí kostky s popisem hodu. Třída FormMenuHero.cs Nabídka výběru ras a povolání pro tvorbu postav. Třída využívá prezentační soubor form menu hero.xml. FormMenuForHero.cs Nabídka vyzbroje, výstroje menu for hero.xml.
a
kouzel.
Třída
využívá
prezentační
soubor
FormMenuGame.cs Úvodní nabídka hry. Třída využívá prezentační soubor form menu game.xml. FormSelectMonster.cs Nabídka výběru nepřítele k boji. FormUseMagic.cs Nabídka použití kouzel. Třída využívá prezentační soubor form use magics.xml. FormInventář.cs Zobrazení inventáře. Třída využívá prezentační soubor form inventar.xml.
42
FormHelp.cs Zobrazení nápovědy. Třída využívá prezentační soubor form help.xml. FormMap.cs Zobrazení mapy. Třída využívá prezentační soubor map.xml. FormWhere.cs Prvek je určen k zíkání uživatelského vstupu. Je použit pro specifikaci výpočetních dat. Ve chvíli, kdy hráč použije příkaz naslouchat nebo stopovat, je požádán o zadaní směru. Třída využívá prezentační soubor form where.xml. FormPasteName.cs Prvek je určen k získání uživatelského vstupu. Prostřednictvím prvku zadává hráč jméno postavy. Prezentační soubor využívaný třídou form menu hero.xml. MyMessageBox.cs Vytvořen vlastní MessageBox z estetického důvodu. Třída využívá prezentační soubor message box.xml.
43
6.5.
Problematika vývoje aplikace.
Největším problémem vývoje, kterému předcházelo nesčetně mnoho verzí, byla část boje. Během smyčky boje se musí vykonat: • kontrola ukončení boje, • výběr hrdinů podle schématu uvedeného v popisu třídy FormBattlefield.cs, • výměna postav mezi útokem a obranou, • v případě použití kouzla ”dvojitý útok” spuštění dvou útoků za sebou, tudíž zabránit výměně bojujících postav, • zastavení výkonu smyčky a poskytnutí prostoru pro uživatelský vstup, • pokud je zvolen automatický boj postav, opětovné spuštění smyčky, • použije-li uživatel příkazový řádek, vyhodnocení příkazu a vykonání požadované operace, • v případě útěku nebo zastrašení okamžité ukončení smyčky a ukončení boje, • kontrola vzdálenosti postav a dosah jejich zbraní, na základě toho řídit činnost nepřátel a spouštět vyhodnocení, • vyhodnotit kolo boje. Nejtěžší problémem bylo pokrytí všech uživatelských vstupů v aplikaci, aby nedocházelo k chybám, následným vyvoláním výjimek, případně pádu celé aplikace.
44
7.
Aplikace DRDEditor
V rámci projektu byl také vytvořen jednoduchý editor pro možnost editace herních dat a vytváření dalších jazykových verzí.
7.1.
Spuštění Editoru
Editor je uložen ve složce s aplikací hry. Spuštění provedete dvojitým kliknutím na soubor Editor.exe, který je umístěn v adresáři . . .\DrD\. Pozor, smazání jakéhokoliv souboru nebo adresáře programu by mohlo mít negativní dopad na celou aplikaci.
Obrázek 22. Editor.
7.2.
Editace již existujícího příběhu
Pokud chcete editovat již existující příběh, musíte ho před spuštěním editoru přesunout do adresáře . . .\DrD\new story, který je umístěn v adresáři s hrou.
45
7.3.
Vytvoření nového příběhu
Vytváříte-li zcela nový příběh, je uložen ve zmíněném adresáři . . .\DrD\new story. Upozornění, při vytvoření nového dobrodružství dojde k přepisu souborů umístěných ve složce . . .\DrD\new story, které tím budou ztraceny. Před příkazem Nový projekt vyplňte kolonky Název dobrodružství a Název dobrodružství anglicky. Nebude-li vyplněna kolonka Název dobrodružství, bude automaticky dobrodružství pojmenováno ”story”. Nebude-li vyplněna kolonka Název dobrodružství anglicky, bude dosazen za anglický název text z kolonky Název dobrodružství. Po zadání názvu kliknětě na tlačítko Nový projekt.
7.4.
Zavedení nového příběhu do aplikace
Pro zavedení nového příběhu do aplikace musíte překopírovat adresář ”new story” do adresáře . . .\DrD\stories. Po překopírování si můžete adresář přejmenovat jak budete chtít. Načítání příběhu se řídí podle souboru ini.xml, který byl vytvořen při zakládání nového příběhu.
7.5. 7.5.1.
Ovládání editoru Panel cestování
Id partu Značka aktuálního místa která slouží pro vyhledávání dané části příběhu. Musí být jedinečný výraz. Pokud zadáte již existující, dojde k smazání starého a nahrazení novým. Zobrazovaný text Text který se vypíše na obrazovku při načtení partu. Next Id, Název následující části, Viditelný Zde se zadávají odkazy následujícího možného postupu v příběhu, název následujícího místa a viditelnost odkazu. Název je text, kterým se na zvolené id odkazujeme. Viditelnost odkazu nastaví, zda se text zobrazí v nabídce následujícího postupu. Příklad použití neviditelnosti odkazu V případě, že zaneseme do příběhu tajné dveře, musí je hráč prostřednictvím některé z postav objevit, následně otevřít a potom se uživatel dozví, jak zní odkaz na následující část. Po zadání odkazu do příkazové řádky, dojde k načtení původně skryté části.
46
7.5.2.
Panel nestvůry
Text uvádějící nestvůry Text který se vypíše na obrazovku v případě, že na daném místě nastavíme přítomnost nepřátel. Pokud dané místo navštíví družina během hry ještě jednou, text již nebude vypsán. Iniciativa nestvůr Nastavení, zda nepřátelé jsou ve výhodě prvního útoku. Boj Informace o tom, zda se má spustit boj automaticky po příchodu na lokaci. V případě nezaškrtnutého políčka vyvolává boj uživatel. Zastrašení, Stopování Nastavení procent pro úspěšné zastrašení nebo stopování s texty, které se zobrazí v případě úspěchu. Nad 40 je jistota, že se činnost hrdinům povede, -20 a méně, nikdy se činnost nepovede. Druh nestvůry, Zbraň, Štít, Brnění Všechny vyjmenované prvky se načítají z externích datových souborů a je z nich vytvořena nabídka. Vzdálenost Nastavení výchozí vzdálenosti protivníka. Zkušenosti Zkušenosti získané za zabití protivníka.
7.5.3.
Panel Mluvení
Mluvit Text, který se zobrazí, pokud uživatel použije úspěšně příkaz mluvit.
7.5.4.
Panel Příkazy
Příkaz, Parametr Příkaz slouží k zobrazení stanovené nabídky. Parametr udává druh zobrazené nabídky. Příklad použití Uživatel má v nabídce jít koupit zbraně. Na místě nákupu musí být nastaveno spuštění nabídky zbraní. Tudíž příkaz je ve volném překladu obchod a parametr zbraně.
7.5.5.
Panel Hledání
Všechny kolonky z označením % nalezení jsou hodnoty procent pro úspěšné nalezení daného prvku. Stejně tak i platí pro % otevření, % vyražení a % zneškodnění.
47
Prvky označené Text nalezení, označují místo pro texty, které se zobrazí v případě úspěchu. U vybavení nastavujeme druh a typ, který hrdina našel, a který je mu přičten do postavy. Nabídka se načítá z datových souborů.
7.5.6.
Panel Past
Past se spouští v případě, že ji postavy nenašly a nezneškodnily. Vlastnost Výběr vlastnosti z které se provádějí výpočty účinku pasti. Každá past může účinkovat na jinou vlastnost postavy. Min koef a Max koef V případě nezneškodnění pasti hodí hráč na účinek pasti. Pokud uspěje v hodu na účinek, je mu postih životů počítán pomocí hodnoty Min koef, v případě neúspěchu Max koef. Hodnota -1 zadaná v políčku Min koef znamená že v případě úspěchu v hodu na účinek pasti, nebude odečten postavám ani jeden život.
7.5.7.
Panel Odměna
Nastavení odměny v případě nějakého úspěchu. Odměnu lze dávat v podobě vybavení nebo zlata. Použití Musí se používat v kombinaci s neviditelnými odkazy, jelikož se načítá v době příchodu na lokaci. Příklad použití Hrdinovi tvé družiny se povedlo vytáhnout dlouhý luk, který byl přiskřípnut padacími dveřmi. Pro vyzvednutí napiš ”vzít luk”. Na povel ”vzít luk” přejde příběh na další část, kde bude nastavena odměna v podobě dlouhého luku.
7.5.8.
Panel Odměna/ Odebrání všem
Funguje stejným způsobem jako panel odměna, ale odebírá nebo přidává zlato všem postavám. Má i vlastní textový popis, jelikož nemusí být tak plánovaná jako odměna jednotlivci. Použití V případě odchodu družiny z krčmy zadáme na následujícím partu hodnotu (např. 5) a do důvodu napíšeme ”Při odchodu z krčmy každý zaplatil 5 zlatých.” Tím, že má odměna vlastní text, bude zobrazena na prvním místě a významově nebude zasahovat do textu aktuální části.
48
7.5.9.
Místa a tlačítko Odstranit
Seznam již vytvořených částí příběhu. Po výběru části kliknutím myši dojde k vyplnění všech prvků formuláře dle uložených dat. Tlačítko odstranit vymaže vybranou část ze souboru.
7.5.10.
Zapsat a Vynulovat
Tlačítko Zapsat zapíše nastavené hodnoty do souboru. Tlačítko Vynulovat nastaví všechny prvky formuláře do výchozích poloh.
7.6.
Realizace Editoru
Jedná se o jednu třídu typu form, osázenou prvky Label, TextBox, ComboBox atd. Jejím jediným úkolem je práce z xml soubory, jejich načítání, editace a ukládání.
7.6.1.
Ukázka sestavení xml souboru
Na obrázku je zobrazený jeden výstupní part z editoru, zapsáný v souboru xml.
Obrázek 23. Ukázka XML kódu příběhu.
49
Závěr Úkolem této bakalářské práce bylo vytvoření počítačové hry typu RPG, ve které má hráč procházet herním světem a přitom být doprovázen družinou dalších postav. Hra byla vytvořena podle knižně vydaných pravidel pro deskovou hru Dračí doupě, ve které každý hráč představuje jednoho herního hrdinu. Celou hru uvádí vypravěč, který příběh upravuje podle aktuálně vzniklé situace. Hlavním úkolem bylo vytvořit herní prostředí, převést roli vypravěče na program při zachování co největší rozmanitosti herního světa, co nejpřesněji implementovat algoritmy popsané v pravidlech a automatizovat postavy družiny, které hráče v dobrodružství doprovázejí. Jedním z požadavků byla možnost pozdější editace dat a vytváření dalších jazykových mutací. Z toho důvodu je pro roli vypravěče zvolena technologie jazyka XML. Byla definována struktura dat, kterou aplikace načítá, zpracovává a interpretuje pro uživatele. Pro editaci a vytváření nových dobrodružství byl vytvořen jednoduchý editor, který zajišťuje uložení nových dat v přesně definované struktuře. V knižní podobě bylo vydáno několik dalších pokračování pravidel, které zdokonalují a rozšiřují systém hry. Aplikace by se mohla v budoucnu zdokonalovat a dále rozšiřovat přidáním dalších funkcionalit, které nebyly v rámci práce implementovány.
50
Conclusions The aim of this thesis was to create an RPG type computer game in which the player goes through a game setting accompanied by a company of other characters. The game is based on the published Dungeons & Dragons rules in which each player represents one game character. The whole game is led by a storyteller who also adjusts the story according to the current situation. The main task was to create the game setting, transpose the role of the storyteller to the program while maintaining rich diversity of the setting, implement the pen-and-paper algorithms as closely as possible and automate the characters that accompany the player. One of the demands was the possibility of later data editing and creating language mutations. For this reason, XML language technology was selected for the role of the storyteller. A data structure was defined, a structure that the application can read, process and interpret on behalf of the user. A simple editing interface was created to edit and create new adventures. This editor enables saving new data in an exactly defined structure. There were several sequels published to the pen-and-paper version of the game; these sequels improve and expand the gaming system. Therefore this application could also improve and expand in future by adding other functions that were not implemented in this thesis.
51
Reference [1] Dějiny počítačových her a videoher. http://cs.wikipedia.org/wiki/Dějiny počítačových her a videoher [2] Dračí doupě: Pravidla pro začátečníky, Altar, 2007. [3] Nakladatelství Altar, Dračí doupě, http://www.altar.cz/drd/ [4] Informace o Microsoft Visual Studiu. http://cs.wikipedia.org/wiki/Microsoft Visual Studio, http://www.microsoft.com/cze/msdn/vstudio/2010/ [5] Informace o jazyku C#. http://cs.wikipedia.org/wiki/C Sharp, Christian Nagel, C# 2005 Programujeme profesionálně, Computer Press, 2006. [6] Informace o jazyku XML. http://www.tvorba-webu.cz/xml/, http://www.dynawest.cz/xml/XMLv10bodech.htm http://cs.wikipedia.org/wiki/Xml [7] PSPad editor. //www.pspad.com/cz/ [8] Obrázky čerpány z internetových stránek: http://www.cerstin.estranky.cz/stranka/gladiatus http://www.fantasyobchod.cz/nuklearni-sestistenka-p-2638.html http://www.faqs.org/photo-dict/phrase/3307/meat-food.html http://www.survivals.cz/kuse/noname/reflexni.htm http://lyria.blog.cz/rubrika/fantasy-obrazky http://www.heroesofmightandmagic.com/
52
8.
Obsah přiloženého CD Součástí bakalářské práce je i CD, které obsahuje následující adresáře: • Adresář bin obsahuje aplikaci. • Adresář doc obsahuje dokumentaci bakalářské práce. • Adresář src obsahuje zdrojové kódy. • Soubor readme.txt obsahuje postup pro spuštění aplikace.
53