Závěrečná práce studentského projektu Tvorba počítačové hry GameJN Evropský sociální fond Praha a EU Investujeme do vaší budoucnosti 2014 1
1. Obsah 1. Obsah... 2 2. Úvod..... 3 3. Jednotlivé programy.. 4 3.1 PyxelEdit..... 4 3.2 Unity3D... 6 3.3 Systém Dialogů... 8 4. Závěr... 12 4.1 Budoucí úpravy.. 12 5. Zdroje.. 13 6. Přílohy. 13 6.1 Prohlášení 13 6.2 Seznam úkolů. 13 6.3 Hra GameJN... 13 6.4 Aktuální verze hry. 13 2
2. Úvod V rámci projektu OPPA jsme vytvořili počítačovou hru s názvem GameJN. Jedná se o 2D hru s pohledem shora, adventuru nakreslenou v programu PyxelEdit od Daniela Kvarfordta. V tomto programu je moţné vymyslet a namalovat všechno, co je ke hře potřeba, od loga aţ po mapy a postavičky. Hlavní vývoj hry probíhal v programu Unity3D od společnosti Unity Technologies. Na programování jsme pouţili jazyk C# (zvaný také C- Sharp), který je jeden z nejpouţívanějších na světě. GameJN je hlavně cílena pro studenty střední školy, aby by měli studium zábavnější a něco se přitom naučili. Jako mapa byla zvolena budova Gymnázia Jana Nerudy, protoţe ji studenti znají, a dokonce i postavy profesorů jsou v ní podle skutečných profesorů vyučujících na Gymnáziu Jana Nerudy. To donutí studenta, aby v hraní pokračoval ze zvědavosti, jaký učitel se ve hře nachází. Hlavní hrací platforma je zatím PC. Příběh se odehrává v budově GJN, kde hlavní hrdina chce odjet na dovolenou, na coţ musí sehnat podpisy všech profesorů na Ţádost o uvolnění z výuky. Profesoři nedávají své autogramy ale zadarmo. Chtějí se ujistit, ţe student jejich látku ovládá. Kaţdá postava má svůj specifický dialog, díky kterému student pozná svého profesora. Aţ student nasbírá všechny podpisy, hra skončí a můţe odejít na dovolenou. 3
3. Jednotlivé programy a postupy V této části stručně představíme jednotlivé programy, které jsme při tvorbě hry vytvářeli, a také na jednoduché ukázce předvedeme principy programování. 3.1 PyxelEdit PyxelEdit je velice jednoduchý program, pomocí kterého se vytváří jednoduchá grafika ve stylu retro her, tzv. 8-bitová grafika. Vyuţívá se v ní čtverečků o jisté šířce a výšce (tradiční je 8x8, 16x16 a 32x32), na které uţivatel něco nakreslí a poté můţe čtverečky uţ jen skládat k sobě, čímţ získá výsledný obrázek, kaţdý objekt mu tedy stačí nakreslit jednou. Při tvorbě nového obrázku se musí první zvolit šířka a výška jednotlivých čtverečků a také jejich počet. Lze samozřejmě pouţívat libovolné barvy a program obsahuje spoustu nástrojů, které usnadňují tvorbu. 4
Kreslení postaviček uţ není tak sloţité jako u jiných programů. Dokonce je moţné na jedné mapě nakreslit jednu postavičku víckrát, ale v jiných pozicích. Z toho se pak jiţ jednoduše udělá výsledná animace. 5
3.2 Unity3D Unity3D (dále jen Unity) je program určený pro všechny, kteří chtějí jednoduše tvořit hry. Kaţdý, kdo má nějaké základy programování si můţe stáhnout plnohodnotnou verzi zadarmo. Pro profesionály je určena větší a sloţitější verze Unity Pro, která je ale jiţ placená. Unity umí tvořit hry i pro jiné platformy, neţ jen PC, jako jsou herní konzole nebo mobilní přístroje. Základ Unity je ten, ţe tvůrce hry na objekty přiřazuje různé komponenty. Jako příklad můţeme uvést například objekt hráč, která komponenty, jako jsou collidery, které mu zabraňují procházet zdmi, dalšími komponenty jsou skripty (krátké programy), které zařizují, ţe se pohybuje, kdyţ se zmáčknou tlačítka na klávesnici, apod. Hru si lze také rovnou vyzkoušet, aby tvůrce věděl, jak bude vypadat. Má také k dispozici Scénu, náhled, ve kterém můţe objekty libovolně přesouvat. Pouţívá ale také spoustu souborů, které vytvořil v jiných programech, jako je například grafika nebo skripty. Ty poté můţe upravovat v přiloţeném programu Xamarin Studio. 6
Celkově se nám program ke tvorbě hry velice hodil, protože jsme díky němu mohli hru tvořit relativně rychle a nemuseli jsme se zabývat úplnými základy. 7
3.3 Systém Dialogů: Do hry jsme vytvořili vlastní Systém Dialogů, který se dá pouţít jako pěkná ukázka programování. Základním stavebním kamenem systému je příkaz ShowDialog, který má takovouto strukturu: ShowDialog (true, Otázka, Odpověď 1, Odpověď 2, Odpověď 3 ); - Příkaz, kterým Systém Dialogů voláme - Proměnná, která určuje, jestli se má po tomto okně ihned zobrazit další (pokud zní true, zobrazí se; pokud false, tak ne) - Zde je (v úvozovkách) text, který má být zobrazen v hlavním okně (například otázka) - Volitelné texty, které se mají zobrazit na tlačítkách ve spodní částí okna, například moţné odpovědi (pokud se nepouţije ani jeden, systém automaticky vloţí jedno tlačítko s textem Pokračovat ). Tento příkaz tedy zobrazí takovéhle okno: Po kliknutí na jedno z tlačítek se okno zavře (protoţe jsme na začátku zvolili jako parametr false, jinak by se zobrazilo další okno) a systém si do proměnné uloţí, jakou odpověď hráč zvolil (v případě první odpovědi se uloţí číslo 1, druhé 2 a třetí 3). Poslední odpověď se dá zpětně zavolat funkcí LastAnswer(), díky čemuţ můţe Systém různě reagovat podle toho, jak hráč odpověděl. Příklad takového příkazu by mohl vypadat takto: if (LastAnswer() == 1) { ShowDialog (false, Správně! ); } 8
Pokud bychom ho přeloţili do obyčejné řeči, tak vlastně říká: Pokud se LastAnswer (poslední odpověď) rovná 1, zobraz Správně a po kliknutí na Pokračovat jiţ nezobrazuj další okno. Nebo, pokud bychom se v interpretaci dostali ještě dále, dostaneme: Pokud hráč naposledy zvolil první odpověď, zobraz Správně a pak jiţ nezobrazuj další okno. Výsledek vypadá takto. Protoţe jsme nevloţili ţádné moţné odpovědi, automaticky se zobrazilo tlačítko s nápisem Pokračovat. Postup v dialogu sledujeme pomocí proměnné talkingstatus. Na začátku se rovná 0, a pokaţdé, kdyţ se zobrazí nějaké okno, se o jedna zvýší. Toto je jiţ příklad reálného dialogu: if(talkingstatus == 0){ ShowDialog (true, Jakou barvu má slunce?, Ţlutou, Modrou, Červenou ); } if(talkingstatus == 1){ if(lastanswer() == 1){ ShowDialog (false, Správně, slunce je ţluté. ); } if(lastanswer() == 2){ ShowDialog (false, Špatně, slunce přece není modré, ale ţluté. ); } if(lastanswer() == 3){ ShowDialog (false, Špatněm slunce přeci není červené, ale ţluté. ); } 9
} Zde můţeme vidět, ţe Systém se hráče zeptá na otázku Jakou barvu má slunce? a dá tři moţné odpovědi: Ţlutou, Modrou a Červenou. Okno, které se zobrazí, vypadá takto: A podle toho, jakou odpověď si zvolil, tak mu zobrazí, jestli odpověděl správně, nebo špatně. Pokud zvolil Ţlutou, zobrazí se mu toto: 10
Pokud zvolil Modrou, zobrazí se mu toto: A pokud Červenou, zobrazí se toto: A tímto způsobem se zobrazují veškeré texty ve hře. Toto je ale jen ta část Systému Dialogů, se kterou přijde tvůrce hry do kontaktu ve chvíli, kdy zadává nové úkoly nebo upravuje stávající. K tomu, aby Systém Dialogů fungoval takto jednoduše, je potřeba dalších více jak 500 řádků kódu, které zde ale nebudeme popisovat, protoţe jejich srozumitelnost by byla pro osoby, které neprogramují, velice nízká. 11
4. Závěr Ukázali jsme, ţe na tvorbu her stačí vlastně jen několik jednoduchých programů, hodně času a ochota naučit se novým věcem. Moţnosti programování lehkých 2D her jsou velké, ale na větší hry se sloţitější grafikou je potřeba více lidí, času a peněz. Do budoucna máme v plánu hru ještě rozšířit, protoţe má budoucnost. Přidáme do týmu více lidí s programovacími schopnostmi a se zkušenostmi s umělou inteligencí. Hodně nás to naučilo, abychom si mohli představit, jak se dřív hry dělaly. Můţeme s jistotou tušit, jak se dělají hry s milionovým rozpočtem a s týmem, který má přes sto lidí. Máme v plánu v projektu pokračovat a je moţné, ţe propracovanější verze bude naší příští OPPA. 4.1 Budoucí úpravy Zde je seznam úprav, které by hru mohly v budoucnosti čekat: Lepší animace postav. Pohyby hlavního hrdiny a NPC budou detailnější a rychlejší. Větší databáze úkolů, které se budou zobrazovat náhodně. Umělá inteligence bude vyvinutější. To znamená, ţe nepřítel bude schopen honit studenta, i kdyţ bude mezi nimi překáţka. Navíc bude schopen si určit nejrychlejší moţnou cestu k němu. Otázky budou ve všech předmětech a ročnících početnější. Počet předmětů bude také navýšen. Potřeba zlepšit detaily postav a mapy. Je to časově náročné, ale v PyxelEditu moţné. Přídání zvukových efektů. 12
5. Zdroje Jako zdroje jsme pouţívali Manuál k Unity3D: http://docs.unity3d.com/manual/ Pak také některé otázky na fórech: http://www.answers.unity3d.com/ A také stránky programu PyxelEdit: http://www.pyxeledit.com/ 6. Přílohy Seznam příloh, které by měly k projektu být přiloţeny. Pokud některá z nich chybí, lze o ni zaţádat na email vojtech.karen@gmail.com. 6.1 Prohlášení soubor ve formátu pdf. 6.2 Seznam úkolů soubor ve formátu pdf. 6.3 Hra GameJN Hra ve verzi 1.1 Alpha pro Windows (archiv ve formátu rar). 6.4 Aktuální verze aktuální verze pro prohlíţeč bude vţdy dosaţitelná na odkazu: www.bit.ly/gamejnweb. 13