Mobilní hra Block Runner Anotace Zadání projektu Návod na

Transkript

Mobilní hra Block Runner Anotace Zadání projektu Návod na
 Gymnázium, Praha 6, Arabská 16 Předmět programování, vyučující Tomáš Obdržálek Mobilní hra Block Runner ročníkový projekt David Novák, 1.E květen 2014 Anotace Cílem ročníkové práce bylo vytvořit hru, kde na hráče budou najíždět překážky, kterým se on bude muset vyhýbat nebo je sbírat. Hra byla vyvíjena pro operační systém mobilních telefonů Android KitKat (4.4) a je určena pro jednoho hráče. The purpose of this project was to create a game where the player must dodge obstacles that are moving towards him. This game was developed for a mobile operating system android KitKiat (4.4) and is primarly designed for singleplayer. Zadání projektu ● Tři typy překážek, které budou interkatovat s hráčem ○ Překážka A: hráč se jí bude muset vyhýbat. Pokud do hráče překážka najede, hra skončí. ○ Překážka B: hráč ji bude moct sbírat. Pokud ji hráč sebere, dostane skóre. ○ Překážka C: hráč ji bude moct zničit (tzn. zmáčknout na obrazovku, než do ní najede). Pokud před kolizí nezmáčkne na obrazovku, tak hra skončí. ● Generování překážek bude probíhat pomocí třídy Random ● Score hráče se bude počítat podle času, stráveného v jedné hře a podle překážek B, které sebere. Score se bude ukládat v telefonu. ● Jako textury budou použity barevné čtverce Návod na instalaci a spuštění Pro spuštění hry je potřeba zařízení s operačním systémem Android verze 2.2 a vyšší (plná funkčnost je ovšem zaručena jen pro verzi 4.4). Dále je potřeba mít na zařízení s Androidem nainstalováno jakéhokoli správce souborů (například Toal Commander, který lze zdarma stáhnout v google play store). Pro nainstalování aplikace postupujte podle následujících kroků: 1. Přesuňte instalační soubor apk do zařízení. Mobilní hra BlockRunner ­ dokumentace
1 2. Ve správci souborů otevřte adresář s instalačním souborem, onen soubor otevřte poklepáním. 3. Pokračujte dle pokynů systému android pro nainstalování aplikace. Mobilní hra BlockRunner ­ dokumentace
2 4. Po úspěšném nainstalování spusťte aplikaci poklepáním na její ikonu v přehledu aplikací. Programování na mobilní platformu Při programování na mobilní platformu se musí vzít v úvahu rozdínost každého zařízení. Každý programátor chce udělat aplikaci pro co největší okruh zařízení. Největší rozdíl, který se v tomto projektu řeší, je rozdílná velikost obrazovky. Velikost všech grafických objektů se proto počítá relativně k výšce a šířce displeje. Takto se dosáhne co nejpodobnějšího vizuálního zobrazení na všech zařízeních. Vykreslování herní scény Pro vykreslování herní scény byla zvolena třída SurfaceView, která umožňuje vykreslovat na obrazovku pomocí plátna (Canvas) v samostatném vlákně. Na plátno jsou postupně vykreslovány pixely, ze kterých je poté vytvořena bitmapa, která je zobrazována na obrazovce zařízení. V projektu byla použita metoda třídy Canvas drawRect()která
vykreslí na plátno obdélník. Obdélník je v metodě definován pěti parametry a to počet pixelů z leva obdélníku, zprava, zhora a zdola. Poté ještě barva. Následující metoda vykreslí zelený obdélník přes celou obrazovku: canvas .drawRect(0,0,0,0,Color.GREEN);. Toto vykreslování je poněkud nepraktické pro vykreslování hráče a překážek, proto byla vytvořena třída GObject, která umožnuje vykresování obdélníků definovaných jako souřadnice x a y (které Mobilní hra BlockRunner ­ dokumentace
3 určují místo středu obdelníku), výšky a šířky, také lze určit vrstvu. Třída umožňuje k objektu třídy GObjectpřichytávat
děti stejné třídy, objekt se poté stává jejich rodičem. Každý objekt může mít jen jednoho rodiče a neomezený počet dětí. Souřadnice 0,0 dětí je v levém dolním rohu rodiče. Děti se pohybují společně s rodiči. Na GObject lze volat doteky, které se následně zavolají na všechny děti. Děti jsou uloženy v kolekci, a jsou řazeny podle vrstvy tak, aby byly nejdříve vykreslovány ty v nižší vrstvě a poté ty ve vyšší, což bude mít za následek překrytí dětí v nižší vrstvě dětmi ve vyšší. Samotná třída GObjectnic
nevykresluje a představuje jen plochu na obrazovce. K vykreslování čtverců je použita třída Rectangle, která rozšiřuje třídu GObject. Ve vykreslování hraje důležitou roli také třída Scene, která rozšiřuje třídu GObject. Třída Scene slouží jako rodič všech objektů, které se mají vykreslovat na herní scénu, umožnuje nastavit barvu pozadí (background color) a volají se na ní všechni doteky. Proces vykreslování Ve vlákně, které vykresluje na obrazovku, je smyčka, ve které se nejdříve získá od SurfaceViewplátno,
na které se vykresluje. Následě se na objekt třídy Scenezavolá
metoda draw()které
se ono plátno předá. Úkol metody draw()je,
zavolat metody draw()na
všech dětech a zavolat metodu onDraw()na
aktuálním objektu, ve které samotné vykreslování probíhá. Když se metoda draw()vrátí,
plátno se předá tříde SurfaceView, která se postará o jeho zobrazení na obrazovku. Následně se na objektu třídy scene zavolá metoda actualize() (o té více níže). Není potřeba procházet smyčkou moc často, proto je jsou její průchody omezeny na 60 průchodů za vteřinu (z toho vyplívá, že je zobrazeno 60 snímků za vteřinu). Vlákno vždy na konci smyčky počká tak dlouho, aby celý jeho průchod trval šedesátinu vteřiny. Aktualizování herní scény Výpočty pro aktualizování jednoho snímku svojí náročností nevyžadují samostatné vlákno, proto se provádějí ve stejném vlákně jako vykreslování. Hned po předání plátna, se na objektu třídy Scene zavolá metoda actualize(), která zavolá tutéž metodu na všech dětech. K aktualizování objektů třídy GObject, byla vytvořena abstraktní třída UpdateHandler, která obsahuje metodu callUpdate() a abstraktní metodu onUpdate(). Metoda callUpdate()vypočítá
čas od posledního zavolání a předá ho metodě onUpdate(), která se používá k samotnému aktualzování. Takto lze aktualizovat herní scénu v závislosti na čase. Objekt třídy UpdateHandler se přichycuje k objektu třídy GObject, jehož metoda actualize() zavolá metodu callUpdate() všech přichycených objektů třídy UpdateHandler. Hráč Mobilní hra BlockRunner ­ dokumentace
4 Hráče ztvárňuje třída Player, která rozšiřuje třídu Rectangle. Hráč má zelenou barvu a může se svisle pohybovat mezi třemi polohami. Hráč má meč, kterým může máchnout. Hráče ovládá třída Controller. Meč Hráčův meč ztvárňuje třída Sword, která rozšiřuje třídu rectangle. Je to bílý obdelník, který se po určitý časový úsek zobrazí před hráčem a dokáže zničit jeden typ nepřítele. Ovládání hráče Hráče ovládá třída Controller, která rozšiřuje třídu GObject. Třída Controller na základě doteků ovládá hráče. Překážky (nepřátelé) Překážku ztvárňuje třída Enemy, která rozšiřuje třídu Rectangle. Nepřátele vytváří třída EnemiesFactory, která zajišťuje vytvoření nepřítele. Třída Enemy má dvě abstraktní metody collidesWithPlayer() a collidesWithSword(), Které jsou volány při kolizi s hráčem nebo s mečem. Ve hře se vyskytují tři typy nepřátel: červení ­ RedEnemy, žlutí ­ YellowEnemya
modří ­ BlueEnemy. Červení nepřátelé reagují jen na kolizi s hráčem. Pokud k ní dojde, ukončí se hra a vyskočí GameOver dialog. Žlutí nepřátelé při kolizi s hráčem přidají hráči score a sami zmizí. Modří reagují na kolizi s hráčem, ale i na kolizi s mečem. Pokud dojde ke kolizi s hráčem, hra se ukončí stejně jako při kolizi hráče s červeným nepřítelem. Pokud dojde ke kolizi s mečem, modrý nepřítel zmizí a přidá hráči score. Pohyb nepřátel Nepřátelé se posouvají naproti hráči. Pohybu nepřátel bylo dosáhnuto za pomocí třídy EnemiesMovingHandler, která rozšiřuje třídu UpdateHandler. Třída EnemiesMovingHandler hýbe všemi objekty třídy Enemy v množině nepřátel (HashSet). Takto jen stačí z objektu třídy HashSet odstranit nepřítele a třída EnemiesMovingHandler s ním nebude hýbat. Rychlost pohybování nepřátel se v průběhu hry zvětšuje. Kontrola kolizí Kontrola kolizí není realizována přes třídu UpdateHandler, protože ji není potřeba volat tak často. Také by mohla zpomalovat proces aktualizování, protože kontrola kolizí je výpočetně náročná. Kontrolu kolizí zajištuje třída CollisionChecker, která obsahuje vlákno, které ve smyčce kontroluje všechny nepřátele na obrazovce, zda nekolidují s hráčem nebo s jeho mečem. Pokud se zijstí kolize, zavolá se na příslušném objektu třídy Enemy příslušná metoda. Mobilní hra BlockRunner ­ dokumentace
5 Generování nepřátel Generování nepřátel probíhá ve tříde EnemiesManager. Třída EnemiesManagermá
za úkol generovat a přidávat nepřátele do hry. Třída EnemiesManager obsahuje vlákno, ve kterém probíhá generování a přidávání nepřátel. Modří a červení nepřátelé se přidávají náhodně na jednu ze tří pozic vždy, když předchozí nepřítel urazí jednu čtvrtinu herní plochy. Žlutý nepřítel se pod 50% pravděpodobností může přidat vždy, když předchozí červený nebo modrý nepřítel urazí jednu osminu obrazovky. Hraní a ovádání hry Hra se ovládá doteky na obrazovku, obrazovka je rozdělena do tří částí (viz. obrázek). Pro posouvání hráče slouží pravá strana obrazovky. Pro švihnutí mečem se stačí dotkout levé strany. Obrazovka je rozdělena v polovině. Hráč se nachází na pravé straně herní scény, proti němu najíždějí nepřátelé zleva. ● Modrému nepříteli se hráč musí vyhýbat. ● Žlutý objekt hráč musí sbírat. ● Modrému nepříteli hráč může ○ a) uhnout ○ b) najet do něj s vytaženým mečem. Pokud hráč nabourá do červeného nebo modrého nepřítele, hra skončí a zaznamená se hráčovo score. Závěr V rámci tohoto projektu byla vyvinuta hra, která je plně funkčí na mobilní platformě. Hra ovšem bude dále vyvíjena. Nasledující cíle jsou: přidání textur, hra více hráčů a vykreslování pomocí Mobilní hra BlockRunner ­ dokumentace
6 OpenGL. V rámci tohoto projektu byl také vyvinut systém vykreslování na plátno, kde stačí specifikovat souřadnice a rozměry a který není součástí základních knihoven Androidu. + Prohlášení Prohlašuji, že jsem jediným autorem tohoto projektu, všechny citace jsou řádně označené a všechna použitá literatura a další zdroje jsou v práci uvedené. Tímto dle zákona 121/2000 Sb. (tzv. Autorský zákon) ve znění pozdějších předpisů uděluji bezúplatně škole Gymnázium, Praha 6, Arabská 14 oprávnění k výkonu práva na rozmnožování díla (§ 13) a práva na sdělování díla veřejnosti (§ 18) na dobu časově neomezenou a bez omezení územního rozsahu. ______________________ Podpis Mobilní hra BlockRunner ­ dokumentace
7 

Podobné dokumenty

Embedded v[PleaseinsertPrerenderUnicode{Ă

Embedded v[PleaseinsertPrerenderUnicode{Ă Mash – knihovna pro použitı́ 3D modelů v Clutteru ClutterGtk – knihovna pro propojenı́ Clutteru a Gtk Cally – rozšı́řenı́ Clutteru o přı́stupnost

Více

Základy algoritmizace

Základy algoritmizace http://www.zachmanframeworkassociates.com/index.php/ebook. 8. FOWLER, M. Refaktoring -- Zlepšení existujícího kódu GRADA, 2003. ISBN 80-2470299-1.

Více

Multiplatformní GUI toolkity

Multiplatformní GUI toolkity Gtk- -, http://www.gtkmm.org ), C#/.NET (Gtk#/.NET, projekt Mono, http://gtk-sharp.sourceforge.net/ ), Javu, Perl, Python, Ruby, Common Lisp a dal¹í

Více

Stáhnout PDF s nápovědou( 10MB)

Stáhnout PDF s nápovědou( 10MB) © 2008 Adobe Systems Incorporated. Všechna práva vyhrazena. Copyright

Více

skripta-datoveStrukt..

skripta-datoveStrukt.. V knihovnách Javy je k dispozici skupina tříd a rozhraní, která je označována jako Collections Framework. Jsou součástí standardního API a jsou umístěny v balíčku java.util. Framework se skládá z n...

Více

Práce s kolekcemi – algoritmy a implementace ve zvoleném

Práce s kolekcemi – algoritmy a implementace ve zvoleném Porovnatelnost – důležitá  vlastnost,  kterou  potřebujeme  pro  uložení  do  některých  kontejnerů.    Datové   objekty  mohou  mít  porovnatelnost  implementovánu  prakticky  libovolným  způsobem...

Více

ESET File Security pro Microsoft Windows Server

ESET File Security pro Microsoft Windows Server Pro stáhnutí nejnovější verze dokumentu klikněte zde

Více

prezentace k Java puzzles

prezentace k Java puzzles int i1 = ((Integer)o1).intValue(); int i2 = ((Integer)o2).intValue(); return (i2 < i1 ? -1 : (i2 == i1 ? 0 : 1));

Více

Základní entity a jejich kresba

Základní entity a jejich kresba úsečkami. Lze ho nakreslit metodou drawPolygon(), která je přetížená. Existují dvě varianty: drawPolygon(int [x], int [y], int pocet_vrcholu) a drawPolygon(Polygon p). V první je polygon defnován p...

Více