8 Kingdoms
-
Projektová dokumentace

Obsah
1 Úvod ?
2 Specifikace projektu ?
2.1 Téma ?
2.2 Hlavní cíle ?
2.3 Popis hry ?
2.4 Grafika a uživatelské rozhraní ?
2.5 Síťová hra ?
2.6 Skriptování ?
2.7 Umělá inteligence ?
3 Vývojový tým ?
4 Vývoj ?
4.1 Nástroje ?
4.2 Chronologie ?
4.3 Zhodnocení ?
1 Úvod
Hra 8 Kingdoms vznikla jako studentská práce na půdě MFF-UK (Matematicko-fyzikální fakulty Univerzity Karlovy v Praze) v rámci předmětu "PRG023 - Projekt" pod vedením Mgr. Marty Vomlelové, Ph.D.
2. Specifikace projektu
2.1 Téma
Strategická "turn-based" hra pro Windows i Linux, s 3D grafikou, umělou inteligencí, diplomacií, možností síťové hry, realistickými a snadno modifikovatelnými pravidly.
2.2 Hlavní cíle

- přehledné, intuitivně ovladatelné a co "nejhezčí" zobrazení
- síťová hra - v prostředí LAN i internetu
- snadná modifikovatelnost a rozšiřitelnost
- hratelnost - základní kámen každé hry
- co nejlepší úroveň umělého protihráče
- portabilita (pro Windows i Linux)

2.3 Popis hry
Námět hry 8 Království čerpá z populární sféry fantasy. Hra probíhá na hexové mapě, hráči se střídají po kolech. V rámci kol se mění počasí. Hráči se stávají králi, budují armády, dobývají cizí města, uzavírají mezi sebou diplomatické smlouvy, prozkoumávají a dobývají nová království.
Hlavní pilíře obsažené v pravidlech:

- realistické zpracování terénu a povrchu, vliv na pohyb a boj
- výcvik jednotek a zlepšování jejich vlastností
- propracované výpočty soubojů, včetně protiútoků, viditelnosti, zkušenosti
- systém diplomacie, umožňující uzavírání smluv, vyhlašování válek a uzavírání míru, přímý vliv případného porušení smlouvy na model světa ve hře
- systém peněz, výnosy z měst, výdaje na armádu
- model zkušeností jednotek

2.4 Grafika a uživatelské rozhraní

- uživatelské rozhraní programu nesmí hráče zdržovat zbytečnými efekty, musí být co nejpohodlněji ovladatelné. Zřejmým cílem je co nejpěknější vizuální podání herního světa, nikoli však technický zázrak v 3D zobrazování.
- použití OpenGL

2.5 Síťová hra

- client-server architektura
- server vypočítává všechny události ve fantasy světě
- klient(i) je graficky zobrazují

2.6 Skriptování

- použití skriptovacího jazyka TCL
- skriptování herních událostí
- možnost ovlivňování vlastností jednotek

2.7 Umělá inteligence

- aktivní účast umělého hráče v diplomacii
- hospodaření s penězi, stavění budov, expanze
- obrana vlastních budov a měst, organizované útočení na nepřítele
- vyhledávání cest s ohledem na rozmístění jednotek a měst, analýza terénu
- nastavitelná úroveň inteligence

3 Vývojový tým
Vedoucí:

- Mgr. Marta Vomlelová, Ph.D.

Členové:

- Vojtěch Hlaveš - síťová komunikace, správa zdrojů, překlad do AJ, editor map
- Václav Krajíček - GUI, tvorba modelů a zdrojů
- Petr Wolf - reprezentace herního světa, implementace pravidel
- Petr Zíta - hra umělé inteligence, editor map
- Pavel Žoha - GUI

4 Vývoj
4.1 Nástroje
Jako ústřední programovací jazyk jsme zvolili C++, pro implementaci některých rysů herních pravidel a chování umělé inteligence jsme použili skriptovací jazyk TCL. Ve značné míře jsme využili možností podmíněného překladu jazyka C++ a pomocí maker jsme tak usnadnili dynamické alokace paměti, logování, posílání zpráv atd. Použití vláken a synchonizačních primit se opírá o knihovnu SDL.
Pro parsování XML dokumentů byl využit parser Expat a to z důvodu jeho malé velikosti, spolehlivé funkčnosti (o jeho výpočty se opírá mnoho známých aplikací) a snadné portaci. Knihovna zlib se, při povolení komprese, stará o komprimaci XML dat posílaných přes síť. Ve výchozím nastavení však není tato vlastnost povolena.
Projekt 8Kralovství komunikuje s uživatelem pouze skrze grafické uživatelské rozhraní(GUI). K jeho vytvoření se používá nízkoúrovňová, multiplatformí, grafická kníhovna OpenGL, jejíž prostřednictvím lze využít potenciálu moderních grafických akcelerátorů. Klasické prvky grafického uživatelského rozhraní(tlačítka, editační pole) jsou v projektu vytvořeny pouze prostředky OpenGL.
Zvuk a hudební doprovod zprostředkovává knihovna SDL ve spolupráci s doplňkovou knihovnou SDL_Mixer.
Přenositelnost celého projektu je principielně závislá pouze na přenositelnosti výše zmíněných knihoven a použitém překladači splňujícím normy C/C++.
4.2 Chronologie
březen - červen 2006
Dokončování implementace, vylepšování hry AI, rozšiřování a formátování dokumentace. Ladění vlastností jednotek a budov, průběžné opravy drobných chyb a testování. Zjišťování informací o okolních hrách.
Uvolnění dalších release.
leden - únor 2006
Dokončování implementace modulu pravidel, dokumentace, finalizace uživatelského rozhraní, ošetřování nestandardních situací.
První release projektu.
říjen - prosinec 2005
Integrace modulu.
Implementace GUI.
červenec - září 2005
Vznik síťové vrstvy.
Implementace nízkoúrovňového GUI.
Tvorba modelů a grafiky.
březen - červen 2005
Načítání a udržení XML dokumentů v paměti, začátky implementace Resource Manageru.
prosinec - únor 2005
Začátky implementace, vymezení základních modulů.
říjen - listopad 2004
Studování principů CVS, výběr externích knihoven.
září - prosinec 2003
Založení projektu na sourceforge.net, vyzkoušení deskové hry, sjednocování názorů na výsledný projekt.
4.3 Zhodnocení
Uživatelské rozhraní
Projekt se nechal v průběhu vývoje inspirovat několika komerčními i nekomerčními herními tituly. Především šlo o inspiraci v otázkách softwarového inženýrství a principů návrhu uživatelského rozhraní. Ve výsledku se nedá říci, že by projekt některý z těchto titulů přímo napodoboval. Hlavním plusem je poměrně originální zpracování herního žánru turnbased strategické hry. Byl přijat fakt, že přestože 3D rozhraní nemusí být vždy nejvhodnější, je to hlas doby a trend, kterému podléhá převážná většina vznikajících počítačových her. Projekt si nikdy nekladl za cíl soutěžit s konkurencí na poli technického zpracování uživatelského rozhraní a grafiky. Proto tu zůstává otevřeno ještě mnoho možností pro zlepšení a budoucí vývoj. Například pomoc profesionálního grafika/výtvarníka při vytváření dat, modelů a grafických návrhů by velice pomohla a přidala na celkovém dojmu. Dalším uplatňováním nabytých zkušeností při zpracování projektu by vedlo také k dalšímu zlepšení. Od počátku vývoje byly brány na zřetel limitující faktory: čas a nedostatek zkušeností. Tomu se také musely přizpůsobit cíle v oblasti uživatelského rozhraní. Proto jsme nevyužili programování shaderů grafických akcelerátorů nebo dalších externích knihoven pro grafický výstup a smířili se s vlastním jednoduchým a méně efektním řešením.
Síťová komunikace
Komunikace mezi jednotlivými klienty a serverem je zajištěna díky síťové vrstvě. Během vývoje se rozhodlo optimalizovat přenosy dat při lokální hře a nyní síťová vrstva rozlišuje mód síťová a mód lokální klient. Ostatní moduly a hlavně pak modul pravidel nerozlišuje, zda jsou klienti připojení lokálně nebo síťově, avšak zachází se všemi naprosto stejně. Toto přináší úsporu práce a snadnější přehlednost kódu. Na konci vývoje síťové vrstvy pak přibyla ještě možnost oznamování her v LAN a i na Internetu s cílem poskytnout uživatelům ještě větší komfort.
Správa zdrojů
Resource manager se zcela opírá o možnost načítat XML dokumenty. Během implementace se několikrát měnilo jejich kódování, což mělo za následek značnou úpravu dosavadního kódu. Výsledná forma je UTF-8 zajišťující snadné uchování například různojazyčných dat. Jelikož tento modul využívají všechny moduly ostatní, byla snaha naimplementovat tuto část co nejdříve, pokud možno s ovládáním na míru vhodným pro moduly Resource manager využívající.
Pravidla
Modul pravidel se od počátku potýkal se značným zpožděním oproti jiným částem projektu. Během vývoje tak musel občas slevit z původních velmi ambiciózních představ. Časová tíseň však nebyly jediným důvodem. Druhým byla snaha nekomplikovat uživatelské rozhraní nadbytkem informací a animací. Snaha mít pravidla co nejjasnější a nejlogičtější. Mnoho z původně vymyšlených prvků (rozvodnění řek po dešti, zatlačování jednotek, hrdinové a jejich samostatná dobrodružství, ...) pak nebylo realizováno především proto, že by jejich zavedení kromě práce navíc znamenalo zesložitění celé hry a v konečném důsledku jen zmatení uživatele.
Výsledná verze modulu pravidel ale přesto není nikterak triviální, implementuje v plné šíři pravidla pohybu, promyšlené výpočty soubojů, stavbu budov, výrobu a zdokonalování jednotek atd. Během vývoje byla pravidla rozšířena o model bonusů, tedy zlepšujících prvků (lepší zbroj, vyšší vytrvalost), kterými může hráč své jednotky vybavit. Motivací byla snaha zpestřit hru a ze základní sady jednotek tak získat mnohem vyšší variabilitu.
Z výkonnostního hlediska se jako největší brzda ukázalo volání a vyhodnocování skriptů v TCL. Jelikož však čas není ve hře rozhodujícím faktorem, zůstali jsme TCL věrni a hru urychlili zjednodušením některých funkcí. Jako kritický se ale ukázal výpočet ceny pohybu z hexu na hex, nejčastěji volaná metoda modulu WORLD, což dvojnásob platí během tahu umělé inteligence při budování strategického plánu. Z důvodů příliš pomalého provádění této metody v TCL byl její obsah realizován kompletně v C, což příslušné výpočty výrazně urychlilo.
Umělá inteligence
Vývoj umělé inteligence si kladl za cíl vyvinout co nejlepšího počítačového protihráče, jenž bude schopen využívat většinu prvků hry a vyvaruje se očividně chybných tahů. Cíl vytvoření počítačového protihráče, jenž bude schopen dlouhodobě přehrávat hráče lidského byl totiž po odhadu a zhodnocení možností vývojového týmu určen jako nereálný, na čemž trváme i dnes. Umělá inteligence počítačového protihráče je v komerčních projektech většinou vyvíjena až na konci vývoje a bývá často limitována nedostatkem času. Nejinak tomu bylo i v případě umělé inteligence v 8 Království. Protože představa o finální podobě hry byla dlouho mlhavá a mnoho pravidel se měnilo během vývoje, byly v rámci AI implementovány nejprve věci, které nebyly příliš spjaty s pravidly a umožňovaly nezávislý vývoj - konkrétně to byl modul pro vyhledávání cesty a modul Diplomacie. Koncem roku 2005 již hra začala mít jasná pravidla a i vývojáři měli o hře jednotnější názory, tudíž bylo možno implementovat části ohledně strategie počítačového hráče. Vývoj umělé inteligence se od té doby v podstatě až do konce potýkal s časovou tísní, nicméně podařilo se vyvinout umělého protihráče, jenž využívá drtivou většinu všech možností hry, je schopen organizovaně bránit své území, určit si dle diplomatických vztahů nepřítele a organizovaně na něj útočit, stavět budovy na vhodných místech a produkovat v nich nové jednotky, stavět mosty a expandovat a řešit další netriviální problémy. Je určitě mnoho oblastí, kde má AI očividné slabiny - zůstává tedy stále pouze zajímavým zpestřením hry a ne výzvou pro zkušeného hráče.
Přenositelnost
Celý projekt byl vyvíjen najednou na více platformách (Gentoo Linux, Windows 2000/XP) s použitím různých překladačů (Vistual Studio 6.0, Visul Studio 2003, gcc 3.3.x). Pro tvorbu aplikace samotné byly použity externí multiplatformí knihovny, které nemají na přenositelnost žádný omezující vliv. Editor map byl vyvinut v prostředí Borland C++ Builder. Je tudíž určen jen pro OS Windows. Editor využívá část zdrojového kódu pro prácí se Správou zdrojů, čímž byla ověřena jejich přenositelnost i na tento překladač. Projekt byl v závěru vývoje v betaverzi uvolněn pro veřejnost na Internetu. Očekává se odezva od uživatelů s konkrétnímy problémy při běhu na různých strojích a OS. Jejich vyřešení nám pomůže vytvořit lepší výsledný produkt.