ˇ ´IRODOVEDECK ˇ ´ FAKULTA UNIVERZITY PALACKEHO ´ PR A KATEDRA INFORMATIKY
´ RSK ˇ ´ PRACE ´ BAKALA A
Strategick´a hra pro Android Air Wars
2015
Jakub Hol´y
Anotace Air Wars je real-time strategick´a hra pro operaˇcn´ı syst´em Android. Probereme si jej´ı v´yvoj a pouˇzit´e technologie (OpenGL ES, hern´ı framework). Uk´aˇzeme si z´aklad, kter´y je nutn´y pro programov´an´ı aplikac´ı na Android. Hra je zdarma dostupn´a v internetov´em obchodˇe Google Play.
Dˇekuji vedouc´ımu pr´ace RNDr. Arnoˇstu Veˇcerkovi za cenn´e rady a volnost pˇri tvorbˇe aplikace. Tak´e dˇekuji vˇsem bl´ızk´ ym za jejich nekoneˇcnou podporu.
Obsah ´ 1. Uvod 1.1. Historie Androidu . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Strategie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3. Archipelago . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Teoretick´ aˇ c´ ast 2.1. Dalvik . . . . . . . . . . . . . . . . . . . . . . . 2.2. Z´akladn´ı komponenty aplikace . . . . . . . . . . ˇ 2.3. Zivotn´ ı cyklus aktivity . . . . . . . . . . . . . . 2.4. Vykreslen´ı grafiky . . . . . . . . . . . . . . . . . 2.4.1. OpenGL ES . . . . . . . . . . . . . . . . 2.4.2. Vykreslen´ı pomoc´ı OpenGL ES (n´astin) 2.5. Hern´ı engine . . . . . . . . . . . . . . . . . . . . 2.6. Hern´ı framework . . . . . . . . . . . . . . . . . 2.6.1. Podpora r˚ uzn´ ych rozliˇsen´ı displej˚ u . . . 2.7. V´ yvoj Air Wars . . . . . . . . . . . . . . . . . . 2.8. Hern´ı mechanismy . . . . . . . . . . . . . . . . 2.9. Grafika . . . . . . . . . . . . . . . . . . . . . . . 2.10. Zvuky . . . . . . . . . . . . . . . . . . . . . . . 2.11. Testov´an´ı . . . . . . . . . . . . . . . . . . . . . 2.12. Pouˇzit´e algoritmy . . . . . . . . . . . . . . . . . 2.13. Publikov´an´ı aplikace . . . . . . . . . . . . . . .
7 7 8 8
. . . . . . . . . . . . . . . .
10 10 10 11 11 12 12 13 13 14 14 14 15 17 17 17 19
3. Program´ atorsk´ a dokumentace 3.1. Struktura projektu v Eclipse . . . . . . . . . . . . . . . . . . . . . 3.2. Tˇr´ıdy implementuj´ıc´ı abstraktn´ı tˇr´ıdu Screen . . . . . . . . . . . . 3.3. Ostatn´ı tˇr´ıdy . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 21 22 23
4. Uˇ zivatelsk´ a pˇ r´ıruˇ cka 4.1. Hlavn´ı menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Hern´ı obrazovka . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3. Tipy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25 25 26 27
Z´ avˇ er
28
Reference
29
5. Obsah pˇ riloˇ zen´ eho CD
30
4
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
Seznam obr´ azk˚ u 1. 2. 3. 4. 5. 6. 7. 8.
Uk´azka mise ze hry Archipelago. . . . . . . . . . . . . . . . . . . . Hlavn´ı z´akladna, z´akladna helikopt´er, z´akladna letadel. Podpora vlastn´ıch z´akladen. . . . . . . . . . . . . . . . . . . . . . . . . . . Atlas textur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Uk´azka v´ yvoj´aˇrsk´e konzole Google Play . . . . . . . . . . . . . . . Pˇrechod obrazovek. . . . . . . . . . . . . . . . . . . . . . . . . . . Hlavn´ı menu, Kampaˇ n, Bitva, O aplikaci. . . . . . . . . . . . . . . Rozehran´a hra s m´odem v´ yhern´ı bod. . . . . . . . . . . . . . . . . Hra je zastavena a je zobrazeno menu. . . . . . . . . . . . . . . .
5
9 15 16 20 23 26 26 27
Seznam tabulek 1.
Podpora OpenGL ES v OS Android. . . . . . . . . . . . . . . . .
6
12
1.
´ Uvod
S pˇr´ıchodem chytr´ ych telefon˚ u (smartphon˚ u) se rozrostla obliba her pro dotykov´e displeje. Tento jev d´ale pos´ılil pˇr´ıchod tablet˚ u a phablet˚ u 1 . Hry se tak staly souˇc´ast´ı vˇetˇsiny mobiln´ıch zaˇr´ızen´ı. Nalezneme pro nˇe aplikace zahrnuj´ıc´ı vˇsechny hern´ı ˇza´nry. Dneˇsn´ı zaˇr´ızen´ı jsou pln´a r˚ uzn´ ych senzor˚ u2 , kter´e mohou slouˇzit jako ovl´adac´ı prvek (napˇr. ovl´ad´an´ı kuliˇcky pomoc´ı n´aklonu zaˇr´ızen´ı). Nˇekter´e hry se mohou pyˇsnit i svou originalitou, napˇr. chyt´an´ı duch˚ u pomoc´ı fotoapar´atu. Uk´aˇzeme si v´ yvoj strategick´e hry Air Wars. Existuj´ı des´ıtky operaˇcn´ıch syst´em˚ u (OS) pro mobiln´ı zaˇr´ızen´ı, mezi nejpouˇz´ıvanˇejˇs´ı se ˇrad´ı Android, iOS, Windows Phone, Symbian, Blackberry. V souˇcasnosti je nejrozˇs´ıˇrenˇejˇs´ı OS Android a iOS. Android je open-source a iOS je uzavˇren´ y syst´em. Pro v´ yvoj aplikac´ı na iOS je potˇreba m´ıt v´ yvojov´e 3 prostˇred´ı (IDE ) Xcode, kter´e bˇeˇz´ı pouze v OS X. Zato v´ yvoj pro Android je moˇzn´ y v nˇekolika v´ yvojov´ ych prostˇred´ıch, kter´e se daj´ı spustit v r˚ uzn´ ych OS (Windows, Linux, OS X). Hra Air Wars byla vytvoˇrena pro OS Android.
1.1.
Historie Androidu
V roce 2005 odkoupila firma Google malou start-up spoleˇcnost Android Inc. vyv´ıjej´ıc´ı operaˇcn´ı syst´em Android. Android je open-source a je zaloˇzen na Linuxov´em j´adru, kter´ y v souˇcasnosti vyv´ıj´ı firma Google. Android je urˇcen pˇredevˇs´ım pro mobiln´ı zaˇr´ızen´ı s dotykov´ ym displejem jako jsou smartphony, PDA, tablety a navigace. D´ale je ale upraven´ y syst´em pouˇzit napˇr. v autech (Android Auto), televiz´ıch (Android TV), n´aramkov´ ych hodink´ach (Android Wear), hern´ıch konzol´ıch, digit´aln´ıch kamer´ach a jin´e elektronice. V roce 2007 bylo zaloˇzeno Open Headset Alliance (OHA), konsorcium velk´ yh spoleˇcnost´ı jako jsou Google, HTC, Sony, Intel, Samsung, Nvidia, Qualcomm a dalˇs´ıch. OHA m´a za u ´kol vyv´ıjet otevˇren´e standardy pro mobiln´ı zaˇr´ızen´ı, coˇz se projevilo ve vˇetˇs´ı kompatibilitˇe dostupn´ ych zaˇr´ızen´ı na trhu. Prvn´ı telefon s Android OS se dostal na trh v roce 2008. Google postupnˇe vyd´av´a Android aktualizace (naz´ yv´a je podle dezert˚ u), kter´e pˇrid´avaj´ı dalˇs´ı funkˇcnost do syst´emu. V t´emˇze roce byl spuˇstˇen internetov´ y obchod Android Market. V roce 2012 byl spojen s Android Music a pˇrejmenov´an na Google Play.
1 Phablet je zaˇr´ızen´ı kombinuj´ıc´ı prvky chytr´ ych telefon˚ u a tablet˚ u. M´a dotykov´ y displej su ´hlopˇr´ıˇckou mezi pˇeti a sedmi palci. 2 V mobiln´ıch zaˇr´ızen´ıch jsou ˇcast´e napˇr. akcelerometry, barometry, gyroskopy, proximity senzory atd. 3 Integrated development environment je software usnadˇ nuj´ıc´ı programov´an´ı aplikac´ı.
7
1.2.
Strategie
Strategick´e hry jsou obl´ıben´e pˇredevˇs´ım nutnost´ı taktick´eho myˇslen´ı a peˇcliv´eho pl´anov´an´ı postupu k dosaˇzen´ı v´ıtˇezstv´ı. C´ılem hry m˚ uˇze b´ yt poraˇzen´ı soupeˇre nebo splnˇen´ı urˇcit´ ych podm´ınek. Strategick´e hry dˇel´ıme do nˇekolika subˇz´anr˚ u: • Real-time strategie (RTS) – veˇsker´a ˇcinnost hr´aˇc˚ u prob´ıh´a v re´aln´em ˇcase. • Tahov´ e strategie (TBS) – hr´aˇci se stˇr´ıdaj´ı po taz´ıch tzv. ”u kormidla je vˇzdy pr´avˇe jeden hr´aˇc”. Klasick´ y pˇr´ıpad tahov´e hry jsou ˇsachy. • Tower defense – v dneˇsn´ı dobˇe jsou velmi popul´arn´ı, mohou kombinovat prvky RTS a TBS. Stav´ıte v nich obrann´e jednotky nebo budovy, kter´e mus´ı zastavit u ´tok soupeˇre. Pozor, tyto hry jsou velmi n´avykov´e! • Budovatelsk´ e strategie – m´ısto boje s nepˇr´ıtelem se hr´aˇc soustˇred´ı na budov´an´ı a ekonomiku. • 4X – eXplore: prozkoum´avat okol´ı na mapˇe, eXpand: rozˇs´ıˇrit svou vl´adu, eXploit: vyuˇzit´ı natˇeˇzen´ ych zdroj˚ u, eXterminate: zniˇcit ostatn´ı hr´aˇce. • Taktick´ e hry na hrdiny (TRPG) – spojuje prvky RPG her a strategick´ ych her. V Japonsku jsou zn´am´e jako ”Simulation RPGs”.
1.3.
Archipelago
Inspirac´ı pro Air Wars byla hra s n´azvem Archipelago (obr 1.). Vlastn´ıte v n´ı ostrovy generuj´ıc´ı letadla, kter´ ymi obsazujete dalˇs´ı ostrovy. M˚ uˇzete nastoupit aˇz proti tˇrem poˇc´ıtaˇcov´ ym soupeˇr˚ um a r˚ uznˇe vytv´aˇret t´ ymy. C´ılem hry je porazit soupeˇre zajmut´ım jejich ostrov˚ u. Hra je dostupn´a na Google Play a stoj´ı 58 Kˇc. Je tu i verze Lite, kter´a je zdarma, ale obsahuje jen jednu misi. Air Wars se hraje v rychlejˇs´ım tempu a m´a v´ıce hern´ıch m´od˚ u. Tak´e v´ıce jednotek a rozmanitˇejˇs´ı mapy. Archipelago zase m´a jednoduˇsˇs´ı hern´ı mechanismus a detekci koliz´ı letadel. Obˇema aplikac´ım vˇsak chyb´ı hra pro v´ıce lidsk´ ych hr´aˇc˚ u (multiplayer). Dalˇs´ı podobn´e hry jako Air Wars a Archipelago nebyly nalezeny.
8
Obr´azek 1. Uk´azka mise ze hry Archipelago.
9
2.
Teoretick´ aˇ c´ ast
Pro programov´an´ı aplikac´ı na Android je potˇreba nejdˇr´ıve st´ahnout a nainstalovat JDK (Java Development Kit), pot´e si vybrat vhodn´e v´ yvojov´e prostˇred´ı. Pro v´ yvoj Air Wars bylo pouˇzito IDE Eclipse, nicm´enˇe ofici´aln´ı IDE je Android Studio. Instalaˇcn´ı soubor pro Android Studio obsahuje potˇrebn´ y Android SDK4 a AVD5 manaˇzer. Pˇri pouˇzit´ı Eclipse se mus´ı SDK a AVD manaˇzer st´ahnout a nainstalovat zvl´aˇst’. AVD manaˇzer umoˇzn ˇuje nastaven´ı virtu´aln´ıch zaˇr´ızen´ı. Tato zaˇr´ızen´ı pouˇz´ıv´a Emul´ator, kter´ y slouˇz´ı ke spouˇstˇen´ı a ladˇen´ı aplikac´ı. Instalaˇcn´ı soubor aplikace m´a pˇr´ıponu .apk.
2.1.
Dalvik
Kaˇzd´a spuˇstˇen´a aplikace bˇeˇz´ı na Androidu ve sv´em vlastn´ım procesu a vlastn´ım virtu´aln´ım stroji Dalvik. Aplikace jsou bˇeˇznˇe ps´any v jazyce Java a kompilov´any do bajtk´odu6 , pot´e jsou pˇreloˇzeny do Dalvik bajtk´odu a uloˇzeny do souboru s pˇr´ıponou .dex (Dalvik EXecutable) a .odex (Optimized Dalvik EXecutable). Hra Air Wars byla vytvoˇrena pro Android od verze 2.2 (Froyo). V t´eto verzi byla pˇrid´ana just-in-time (JIT) kompilace do virtu´aln´ıho stroje Dalvik. Je to program, kter´ y pˇreloˇz´ı bajtk´od aplikace do nativn´ıho k´odu stroje, a t´ım zrychl´ı prov´adˇen´ı aplikac´ı na Androidu aˇz nˇekolikan´asobnˇe. Dalˇs´ı prvky, kter´e Android pˇridal do kaˇzd´e verze, najdete napˇr. na http://en.wikipedia.org/wiki/android_version_history. Niˇzˇs´ı verze Androidu v zaˇr´ızen´ıch t´emˇeˇr nenajdeme a Google Play podporuje zaˇr´ızen´ı s Androidem od verze 2.2.
2.2.
Z´ akladn´ı komponenty aplikace
Android´ı aplikace se m˚ uˇze skl´adat z n´asleduj´ıc´ıch komponent: • Activity (aktivita) – reprezentuje jednu obrazovku s uˇzivatelsk´ ym rozhran´ım. Aplikace m˚ uˇze m´ıt v´ıce aktivit. • Service – bˇeˇz´ı na pozad´ı a nem´a uˇzivatelsk´e rozhran´ı. Pouˇz´ıv´a se pro dlouhotrvaj´ıc´ı operace nebo pro prov´adˇen´ı vzd´alen´ ych proces˚ u. Napˇr. pouˇstˇen´ı hudby zat´ımco je uˇzivatel v jin´e aplikaci. • Content provider – umoˇzn ˇuje poskytnout data aplikace ostatn´ım aplikac´ım. 4 Android Software Development Kit je u ´pln´a sada vyv´ıjec´ıch n´astroj˚ u pro programov´an´ı aplikac´ı na Android. 5 Android Virtual Devices manaˇzer poskytuje grafick´e uˇzivatelsk´e rozhran´ı pro pr´ aci s virtu´ aln´ımi zaˇr´ızen´ımi. 6 Bajtk´ od je program, kter´ y se spouˇst´ı v bˇehov´em prostˇred´ı (mus´ı b´ yt nainstalov´ano na c´ılov´em syst´emu). D´ıky tomu je pˇrenositeln´ y na r˚ uzn´e platformy.
10
• Broadcast receiver – reaguje na pˇr´ıchoz´ı ozn´amen´ı jako napˇr. zapnut´ı displeje, zmˇen´ı se stav pˇripojen´ı k internetu atd. Z tˇechto komponent pouˇz´ıv´a Air Wars jen jednu aktivitu, kter´a vykresluje grafiku pomoc´ı OpenGL ES a star´a se o uˇzivatelovu interakci.
2.3.
ˇ Zivotn´ ı cyklus aktivity
Pˇri programov´an´ı aplikac´ı pro Android bychom mˇeli zn´at chov´an´ı aktivity v syst´emu. Toto chov´an´ı se na Androidu naz´ yv´a ˇzivotn´ı cyklus aktivity. Popisuje stavy a pˇrechody mezi tˇemito stavy, ve kter´ ych se aktivita nach´az´ı. Aktivita m˚ uˇze b´ yt v jednom ze tˇr´ı stav˚ u: • Running – tzv. top-level aktivita, zab´ır´a obrazovku a pˇr´ımo interaguje s uˇzivatelem. • Paused – v tomto stavu je tehdy, kdyˇz je aktivita st´ale viditeln´a, ale ˇca´steˇcnˇe pˇrekryt´a napˇr. dialogov´ ym oknem nebo pˇri uzamˇcen´ı obrazovky. Paused aktivita m˚ uˇze b´ yt kdykoliv ukonˇcena syst´emem napˇr. pro nedostatek operaˇcn´ı pamˇeti. • Stopped – tento stav nastane, pokud je aplikace zcela pˇrekryt´a jinou aktivitou a nen´ı vidˇet na obrazovce. Napˇr. kdyˇz uˇzivatel zm´aˇckne tlaˇc´ıtko dom˚ u. Syst´em m˚ uˇze aktivitu v tomto stavu kdykoliv ukonˇcit. Syst´em se m˚ uˇze rozhodount kdykoliv ukonˇcit aktivitu, kter´a je ve stavu paused nebo stopped. M˚ uˇze tak uˇcinit bud’ ”sluˇsnˇe”, zavol´an´ım ukonˇcovac´ı metody finished nebo ”nesluˇsnˇe”(bez notifikace) a v tichosti ukonˇcit jej´ı bˇeh. Aktivita m´a nˇekolik metod, kter´e m˚ uˇzeme pˇrepsat a dostat tak informaci o zmˇenˇe stavu aktivity.
2.4.
Vykreslen´ı grafiky
Jsou dva zp˚ usoby jak vykreslit grafiku na Androidu. Pomoc´ı Canvasu nebo OpenGL ES. Canvasem lze vykreslit jen 2D grafiku, nicm´enˇe jeho pouˇzit´ı je jednoduˇsˇs´ı neˇz OpenGL ES. Canvas je vhodn´ y, kdyˇz nen´ı potˇreba vysok´ y v´ ypoˇcetn´ı v´ ykon pro vykreslen´ı grafiky, napˇr. statick´e, zˇr´ıdka pohybuj´ıc´ı objekty (ˇsachy, puzzle atd.). Nev´ yhodou je, ˇze v´ ypoˇcet vykreslen´ı prob´ıh´a na procesoru a 7 GPU nen´ı pouˇzito. OS Android od verze 3.0 pˇredstavil hardwarovou akceleraci a pˇresunul ˇca´steˇcn´ y v´ ypoˇcet vykreslen´ı z procesoru na GPU. Mus´ı se vˇsak zapnout v syst´emu. V´ ypoˇcet OpenGL prob´ıh´a na GPU. 7
Graphical processing unit je grafick´ y ˇcip v zaˇr´ızen´ı.
11
2.4.1.
OpenGL ES
OpenGL je pr˚ umyslov´ y multiplatformn´ı API8 standard pro vykreslen´ı (renderov´an´ı) 2D a 3D grafiky, spravovan´ y konsorciem Architecture Review Board (ARB). V roce 2006 se ARB stala souˇc´ast´ı konsorcia Khronos Group, kter´e vyv´ıj´ı otevˇren´e API(vysvˇetlit) standardy. OpenGL ES je ˇca´st OpenGL API, kter´a je urˇcen´a pro vestavˇen´e syst´emy jako smartphony, tablety, hern´ı konzole, PDA. Je nˇekolik verz´ı OpenGL ES a podporu jednotliv´ ych verz´ı v 0S Androidu zn´azorˇ nuje tabulka 1.. Dalˇs´ı pˇridan´e ˇci odebran´e funkce m˚ uˇzete naj´ıt na Verze OpenGL ES 1.0 1.1 2.0 3.0 3.1
Podpora Androidu od verze 1.0 (Alpha) 1.6 (Donut) 2.0 (Eclair) 4.3 (Jelly Bean) 4.4.2 (KitKat)
Tabulka 1. Podpora OpenGL ES v OS Android.
str´ance: http://www.khronos.org/api/opengles/. V Air Wars je jednoduch´a 2D grafika, kter´a jde bez probl´em˚ u naprogramovat v OpenGL ES 1.0. 2.4.2.
Vykreslen´ı pomoc´ı OpenGL ES (n´ astin)
Pro vykreslen´ı grafiky mus´ıme implementovat tˇr´ıdu GLSurfaceView a rozhran´ı GLSurfaceView.Renderer. Tˇr´ıda GLSurfaceView je podtˇr´ıda tˇr´ıdy View, kter´a je ,zjednoduˇsenˇe ˇreˇceno, synonymem pro okno, do nˇehoˇz budeme vykreslovat. M´ame tedy okno, nyn´ı potˇrebujeme vykreslit grafiku. To udˇel´ame pomoc´ı rozhran´ı GLSurfaceView.Renderer, kter´e se vykon´av´a v oddˇelen´em vl´aknu. Obsahuje metodu onDrawFrame, kter´a se vol´a pro vykreslen´ı aktu´aln´ıho sn´ımku. Do t´eto metody budeme vkl´adat objekty pro vykreslen´ı. OpenGL ES vykresluje objekty, skl´adaj´ıc´ı se z vrchol˚ u, do ˇctvercov´eho rozliˇsen´ı. Zaˇr´ızen´ı ale vˇetˇsinou nemaj´ı pˇresn´e ˇctvercov´e rozliˇsen´ı, a proto mus´ıme nastavit transformaˇcn´ı matici. Pomoc´ı Projection matrix (projekˇcn´ı matice) transformuje OpenGL ES objekty z ˇctvercov´eho rozliˇsen´ı do rozliˇsen´ı zaˇr´ızen´ı. Objekty se vykresluj´ı pomoc´ı vrchol˚ u a kaˇzd´ y vrchol m´a souˇradnice ˇ x, y, z. OpenGL ES um´ı vykreslit troj´ uheln´ık. Ctverec vykresl´ıme spojen´ım dvou troj´ uheln´ık˚ u a definov´an´ım poˇrad´ı vykreslen´ı vrchol˚ u. To vˇse mus´ıme jeˇstˇe uloˇzit do pole tzv. bufferu, a pot´e nastavit buffer ve vykreslovac´ı metodˇe. M´ame vytvoˇren´e objekty a m˚ uˇzeme je ”pot´ahnout”texturou z obr´azku. 8
Application Programming Interface je sada podporgram˚ u, protokol˚ u a n´astroj˚ u pro programov´ an´ı aplikac´ı.
12
Srozumiteln´ y tutori´al pro vykreslen´ı jednoduch´ ych objekt˚ u najdete napˇr. na http://www3.ntu.edu.sg/home/ehchua/programming/android/.
2.5.
Hern´ı engine
Hern´ı engine (Game engine) je rozs´ahl´a sada n´astroj˚ u pro tvorbu videoher. Skl´ad´a se z ˇca´st´ı pro vykreslen´ı 2D a 3D grafiky, umˇelou inteligenci, v´ ypoˇcet fyziky, detekce koliz´ı, animace, zvuk, skriptov´an´ı, pr´ace se s´ıt´ı atd. Pro Android existuje cel´a ˇrada game engin˚ u. Mezi zn´am´e patˇr´ı napˇr.: • Unreal Engine je jeden z nejv´ ykonˇejˇs´ıch komerˇcn´ıch multiplatformn´ıch engin˚ u pro 2D i 3D hry. • Unity 3D je dalˇs´ı komerˇcn´ı multiplatformn´ı engine, kter´ y je ale dostupn´ y s omezen´ımi i v bezplatn´e variantˇe. • libGDX je open source engine pro 3D a 2D hry. • AndEgine je dalˇs´ı open source engine ale pouze pro 2D hry.
2.6.
Hern´ı framework
Hern´ı framework je velmi odlehˇcen´ y hern´ı engine. Program´ator m´a vˇetˇsinou plnou kontrolu nad k´odem. Pro Air Wars byl pouˇzit framework z knihy Beginning Android 4 Games Development [1]. V knize je framework podrobnˇe pops´an (t´emˇeˇr ˇra´dek pro ˇra´dku). Framework je pod licenc´ı GPL verze 3, kter´a umoˇzn ˇuje bezplatn´e pouˇzit´ı. Framework um´ı pracovat se zvukem, s obr´azky, vykreslit 2D grafiku pomoc´ı OpenGL ES, pracuje s hern´ımi objekty, detekuje uˇzivatelsk´e vstupy, obsahuje z´akladn´ı matematick´e objekty a dalˇs´ı praktick´e n´astroje jako ˇc´ıtaˇc fps 9 . Framework se skl´ad´a ze ˇctyˇr adres´aˇr˚ u: • framework/ – obsahuje vˇetˇsinou jen rozhran´ı (definuje pouze n´azvy, parametry metod a atribut˚ u) jako Audio, Input, Color, Sound, Music, kter´e jsou pouˇzity v dalˇs´ı tˇr´ıd´ach. D´ale obsahuje d˚ uleˇzitou abstraktn´ı tˇr´ıdu Screen, kterou pouˇz´ıvaj´ı vˇsechny tˇr´ıdy obsahuj´ıc´ı metody pro vykreslen´ı grafiky na obrazovku a metody pro reakci na uˇzivatelsk´e vstupy. • gameFramework/ – vˇetˇsina tˇr´ıd tu implementuje rozhran´ı z adres´aˇre framework/. Napˇr. tˇr´ıda AndroidMusic implementuje rozhran´ı Music a pracuje s objektem MediaPlayer, kter´ y slouˇz´ı pro pouˇstˇen´ı hudby a videa. D´ale tu je tˇr´ıda prauj´ıc´ı s grafikou a soubory. Je tu i nejd˚ uleˇzitˇejˇs´ı abstraktn´ı tˇr´ıda GLGame, kter´a ˇr´ıd´ı chod cel´eho frameworku. Jsou tu tak´e tˇr´ıdy pro pr´aci s uˇzivatelsk´ ym vstupem. 9
Frame per second = poˇcet vykreslen´ ych sn´ımk˚ u za sekundu
13
• glFramework/ – obsahuje tˇr´ıdy pro pr´aci s OpenGL ES. Jsou tu tˇr´ıdy pro animaci, vykreslen´ı grafiky, pr´aci s p´ısmem, detekci kolize, pr´aci s texturami a tak´e fps ˇc´ıtaˇc. • math/ – obsahuje tˇr´ıdu reprezentuj´ıc´ı objekty kruhu a ˇctverce. Tyto objekty jsou pouˇz´ıv´any pro zjiˇstˇen´ı kolize, dotyk˚ u na objekty atd. D´ale je tu tˇr´ıda reprezentuj´ıc´ı vektor a obsahuje metody pracuj´ıc´ı s vektory. Pro pouˇzit´ı frameworku mus´ıme vytvoˇrit tˇr´ıd˚ u implementuj´ıc´ı abstraktn´ı tˇr´ıdu GLGame. Tato tˇr´ıda potˇrebuje nastavit, pomoc´ı metody getStartScreen, tˇr´ıdu implementuj´ıc´ı abstraktn´ı tˇr´ıdu Screen. Ta je jako prvn´ı zobrazena, po spuˇstˇen´ı aplikace ze syst´emu. 2.6.1.
Podpora r˚ uzn´ ych rozliˇ sen´ı displej˚ u
Ve frameworku existuje tˇr´ıda Camera2D, kter´a m´a za u ´kol pˇrizp˚ usobit aplikaci k r˚ uzn´ ym rozliˇsen´ım displej˚ u zaˇr´ızen´ı. Pouˇz´ıv´a k tomu metodu glOrthof. Tato metoda um´ı zobrazit pˇresnˇe definovanou velikost rozliˇsen´ı. Dalˇs´ı metoda glViewportf um´ı transformovat (afinn´ı transformace) rozliˇsen´ı zaˇr´ızen´ı do rozliˇsen´ı nastaven´e metodou glOrthof. Stejnˇe tak se pˇrevedou souˇradnice dotyk˚ u uˇzivatele.
2.7.
V´ yvoj Air Wars
V´ yvoj hry spoˇc´ıval hlavnˇe ve vym´ yˇslen´ı pravidel, grafiky, ovl´ad´an´ı a hern´ıch mechanism˚ u. Pouˇzit´ı zm´ınˇen´eho hern´ıho frameworku velmi usnadnilo programov´an´ı t´eto hry. D˚ uraz byl kladen pˇredevˇs´ım na jednoduchost ovl´ad´an´ı a hern´ıch mechanism˚ u. Nejdˇr´ıve bylo naprogramov´ano hlavn´ı menu a pot´e hrac´ı obrazovka, na kter´e se testovalo ovl´ad´an´ı a pohyb jednotek. Pot´e byly postupnˇe pˇrid´av´any dalˇs´ı obrazovky. Grafika se tak´e postupnˇe vylepˇsovala. Zvuky se do hry pˇridaly jako posledn´ı. Air Wars je RTS hra pro Android, kter´a lehce procviˇc´ı mysl strat´ega. Pro dokonˇcen´ı kampanˇe mus´ı hr´aˇc splnit 12 mis´ı. D´ale tu m´a moˇznost procviˇcovat sv´e schopnosti v sekci pro n´ahodn´e generov´an´ı bitev dle poˇctu nepˇr´atel a zvolen´eho hern´ıho m´odu. Hra obsahuje n´apovˇedu a tak´e moˇznost zmˇenu jazyka hry na anglickou nebo ˇceskou. Obsaˇzena je i kr´atk´a pˇr´ıbˇehov´a linie.
2.8.
Hern´ı mechanismy
Hr´aˇc m˚ uˇze nastoupit aˇz proti tˇrem poˇc´ıtaˇcov´ ym hr´aˇc˚ um. Ti jsou oznaˇceni ˇcervenou, zelenou nebo ˇzlutou barvou. Lidsk´ y hr´aˇc je vˇzdy oznaˇcen modrou barvou. Hr´aˇc zaˇc´ın´a s hlavn´ı z´akladnou (existuj´ı 3 druhy z´akladen obr. 2.), protihr´aˇci mohou zaˇc´ınat s v´ıce z´akladnami. Na mapˇe jsou i neutr´aln´ı z´akladny, kter´e m˚ uˇzou b´ yt zajmuty hr´aˇci. Kaˇzd´a z´akladna generuje poˇcet jednotek. Vˇetˇs´ı
14
z´akladny generuj´ı jednotky rychleji. Ve hˇre jsou dva druhy jednotek, letadla a helikopt´ery. Letadla se pohybuj´ı dvakr´at rychleji neˇz helikopt´ery a jsou tak vhodn´e pro rychl´e u ´toky nebo podporu slabˇs´ıch z´akladen. Jednotky z neutr´aln´ı z´akladny se k hr´aˇci pˇripoj´ı, pokud hr´aˇc u ´toˇc´ı s vˇetˇs´ım poˇctem jednotek, neˇz je na neutr´aln´ı z´akladnˇe. ´ V Air Wars jsou dva hern´ı m´ody, Zniˇ cen´ı a V´ yhern´ı body. Ukolem, m´odu zniˇcen´ı, je zajmout vˇsechny nepˇr´atelsk´e z´akladny. C´ılem, m´odu v´ yhern´ı body, je naˇcerpat potˇrebn´e mnoˇzstv´ı barel˚ u ropy z v´ yhern´ıch bod˚ u nebo zajmout vˇsechny z´akladny protihr´aˇc˚ u.
Obr´azek 2. Hlavn´ı z´akladna, z´akladna helikopt´er, z´akladna letadel. Podpora vlastn´ıch z´akladen. Pro zajmut´ı z´akladny je potˇreba zniˇcit vˇsechny jednotky na z´akladnˇe. Pˇri kaˇzd´em u ´toku nebo pˇresunu jednotek se vˇzdy odeˇcte polovina jednotek na z´akladnˇe. Hr´aˇc m˚ uˇze pˇresouvat jednotky mezi sv´ ymi z´akladnami, avˇsak z´akladny letadel lze podporovat pouze letadly a z´akladny helikopt´er pouze helikopt´erami. Zastaven´ı generov´an´ı jednotek na deset sekund v hlavn´ı z´akladnˇe nastane tehdy, pokud byly zniˇceny vˇsechny letadla nebo helikopt´ery na z´akladnˇe.
2.9.
Grafika
Veˇsker´a grafika, pouˇzit´a v Air Wars, byla vytvoˇrena ve freeware program Paint.NET. Nˇekter´e obr´azky byly st´ahnuty z webu http://pixabay.com/cs/ a n´aslednˇe upraveny. Staˇzen´e obr´azky jsou pod licenc´ı CC0, kter´a umoˇzn ˇuje i komerˇcn´ı uˇzit´ı a nen´ı nutn´e uv´adˇet zdroj. Hra je ve skuteˇcnosti vykreslena v rozliˇsen´ı 800x444 a nikoli 800x480 pixel˚ u, jak je ps´ano v uˇzivatelsk´e pˇriruˇcce (4.). Je to kv˚ uli syst´emov´e liˇstˇe Androidu, kter´a m´a rozliˇsen´ı 800x36 pixel˚ u. Hra obsahuje pouze dva obr´azky velikosti 2048x2048 tzv. atlasy textur (obr. 3.). Soubory jsou ve form´atu .png (podporuje pr˚ uhlednost). Atlas textur je uloˇzen v promˇenn´e pomoc´ı tˇr´ıdy Texture ve tˇr´ıdˇe Assets. Je tu jeˇstˇe tˇr´ıda TextureRegion, pomoc´ı kter´e se uloˇz´ı do promˇenn´ ych jednotliv´e textury z atlasu textur. Tyto promˇenn´e se pˇr´ımo pouˇz´ıv´aj´ı pro vykreslen´ı v metodˇe present. V t´eto metodˇe 15
je potˇreba, jeˇstˇe pˇred pouˇzit´ım textur, naˇc´ıst atlas textur pomoc´ı tˇr´ıdy SpriteBatcher a metody beginBatch. Metoda drawSprite nastav´ı objekt (ˇctverec) a pˇripoj´ı k nˇemu texturu. Tato metoda m´a argumenty souˇradnice x, y, velikost ˇs´ıˇrka, v´ yˇska, konkr´etn´ı textura. Tohle vˇse se uloˇz´ı do bufferu. Pot´e se mus´ı zavolat metoda endBatch, kter´a buffer poˇsle do GPU na vykreslen´ı. Tyto metody se pouˇz´ıvaj´ı napˇr. takto: batcher.beginBatch(Assets.backgrounds); batcher.drawSprite(400, 222, 800, 444, Assets.mainMenuBackground); batcher.drawSprite(400, 390, 350, 70, Assets.titleAbout); batcher.endBatch(); Proˇc se vlastnˇe pouˇz´ıvaj´ı atlasy textur? Naˇc´ıt´an´ı obr´azk˚ u je v´ ypoˇcetnˇe drah´ y proces, a proto je lepˇs´ı naˇc´ıst napˇr. jeden velk´ y obr´azek neˇz v´ıce menˇs´ıch. Atlasy textur by mˇely m´ıt velikost, kter´a je mocninou dvojky. Nejjednoduˇsˇs´ı zp˚ usob, pro vykreslen´ı textu, je pouˇz´ıt texturu. K tomuto u ´ˇcelu slouˇz´ı v hern´ım frameworku tˇr´ıda Font. Kaˇzd´e p´ısmenko vykresluje jako texturu. Nicm´enˇe to vypad´a dosti ”kostrbatˇe”, protoˇze vˇetˇsina p´ısmen nen´ı od sebe vzd´alena stejnˇe. Tˇr´ıda Font byla proto pouˇzita jen pro vykreslen´ı ˇc´ıslic. Vˇsechen text byl vytvoˇren v programu Paint.NET a pracuje se s n´ım jako s pr˚ uhledn´ ym obr´azkem. Bylo vytvoˇreno kolem 220 obr´azk˚ u, kter´e jsou uloˇzeny v atlasech textur.
Obr´azek 3. Atlas textur.
16
2.10.
Zvuky
O hudbu se staraj´ı dva soubory music a battleMusic. Tyto soubory byly staˇzeny z webu http://www.newgrounds.com/. Soubory jsou pod licenc´ı CC3, kter´a umoˇzn ˇuje pouze nekomerˇcn´ı uˇzit´ı a poˇzaduje vystavit jm´eno skuteˇcn´eho autora. Soubor click pro zvuk tlaˇc´ıtka byl vytvoˇren pomoc´ı programu sfxr. Program sfxr je gener´ator jednoduch´ ych zvukov´ ych efekt˚ u. Je pod licenc´ı MIT a najdete jej na adrese http://www.drpetter.se/project_sfxr.html. Vˇsechny tˇri soubory jsou ve form´atu .ogg. Naˇc´ıtaj´ı se ve tˇr´ıdˇe Assets pomoc´ı rozhran´ı Music a Sound. Rozhran´ı Music slouˇz´ı pro dlouhotrvaj´ıc´ı zvuky, napˇr. hudba ve hˇre. Rozhran´ı Sound je urˇcena pro kr´atk´e zvuky, napˇr. kliknut´ı na tlaˇc´ıtko. Pracuje se s nimi, napˇr. takto: Music gameMusic; gameMusic = game.getAudio().newMusic("music.ogg"); gameMusic.setLooping(true); //nastaven´ ı nepˇ retrˇ zit´ eho hran´ ı gameMusic.setVolume(0.3f); //zmˇ ena hlasitosti gameMusic.play(); //spuˇ stˇ en´ ı muziky gameMusic.pause(); //pauznut´ ı muziky Sound clickSound; clickSound = game.getAudio().newSound("click.ogg"); clickSound.play(0.7f); //spuˇ stˇ en´ ı zvuku s~danou hlasitost´ ı
2.11.
Testov´ an´ı
Testov´an´ı aplikace prob´ıhalo vˇetˇsinou na fyzick´em zaˇr´ızen´ı, protoˇze emul´ator je neskuteˇcnˇe pomal´ y. V diskuz´ıch na internetu lid´e doporuˇcovali r˚ uzn´e rady pro jeho zrychlen´ı, ale ˇza´dn´e nezrychlily emul´ator natolik, aby mohl b´ yt norm´alnˇe pouˇz´ıv´an. Fps ˇc´ıtaˇc zobrazoval pouhopouh´e 1 aˇz 3 sn´ımky. Mimochodem, Dalvik m´a hranici na 60 fps. Emul´ator byl pouˇzit jen p´arkr´at pro ladˇen´ı aplikace. Testov´an´ı prob´ıhalo na 7”tabletu s Androidem 4.0.3, jednoj´adrov´ ym procesorem ARMv7 1GHz, 512 MB ram, GPU Mali-400 MP, 800x480 rozliˇsen´ı displeje. Na zaˇr´ızen´ı se fps nidky nedostaly pod 55 sn´ımk˚ u, vˇetˇsinou se drˇzely kolem 58.
2.12.
Pouˇ zit´ e algoritmy
Algoritmus pro generov´an´ı n´ahodn´ ych rozloˇzen´ı z´akladen na mapˇe. Mapa je rozdˇelena na 18 pol´ıˇcek. Chceme n´ahodnˇe poloˇzit z´akladnu do jednoho pol´ıˇcka. Vygenerujeme si n´ahodn´e ˇc´ıslo rand v rozsahu od 0 do 17, kter´e bude reprezentovat pozici. Poloˇz´ıme z´akladnu na pozici rand. Mus´ıme si nˇekde v´est z´aznam, kter´a pol´ıˇcka jsou st´ale voln´a, abychom nevloˇzili dvˇe z´akladny na stejn´e m´ısto. Vytvoˇr´ıme si pole filled o velikosti 18, kter´e bude reprezentovat volnou nebo okupovanou pozici. Vˇzdy kdyˇz vloˇz´ıme z´akladnu na pozici rand zmˇen´ıme v poli 17
filled[rand] hodnotu. Mus´ıme testovat zdali po vygenerov´an´ı ˇc´ısla rand je tato pozice voln´a. Takto m˚ uˇzeme vloˇzit vˇsechny z´akladny. Pˇr´ıklad, chceme vloˇzit z´akladny do vˇsech pol´ıˇcek. S rostouc´ım poˇctem okupovan´ ych pol´ıˇcek se gener´ator n´ahodn´ ych ˇc´ısel nebude ”trefovat”na voln´a pol´ıˇcka a bude muset b´ yt vol´an ˇcastˇeji. To znamen´a, ˇze budeme muset volat gener´ator v´ıce neˇz 18 kr´at. To je neˇza´douc´ı. Existuje elegantnˇejˇs´ı ˇreˇsen´ı. Vytvoˇr´ıme si seznam freePos s ˇc´ısly od 0 do 17, kter´e budou reprezentovat voln´e pozice. Vygenerujeme si n´ahodn´e ˇc´ıslo rand od 0 do velikost seznamu freePos, kter´e bude indexem do seznamu freePos. Z´akladnu tedy vloˇz´ıme na pozici, kterou z´ısk´ame ze seznamu freePos a indexu rand. Po vloˇzen´ı z´akladny mus´ıme odstranit poloˇzku v seznamu s indexem rand. T´ım p´adem bude gener´ator n´ahodn´ ych ˇc´ısel vol´an jen 18 kr´at. int rand,size; List
freePos = new List(); for(int i=0;i<18;i++){ freePos.add(i); } for(int i=0;i<18;i++){ size = freePos.size() - 1; rand = randomGenerator(0,size); insertBase(freePos.get(rand));
//napln´ ıme seznam freePos
//n´ ahodn´ e c ˇı ´slo 0 aˇ z size //insertBase(num) vloˇ z´ ı //z´ akladnu na pozici num
freePos.remove(rand); } Algoritmus pro poˇc´ıtaˇcov´eho hr´aˇce. Hlavn´ı ide je takov´a, ˇze hr´aˇc m´a nˇekolik moˇznost´ı napˇr. u ´tok na neutr´aln´ı z´akladny, u ´tok na soupeˇrovy z´akladny, podporu vlastn´ı nejslabˇs´ı z´akladny, u ´tok na neutr´aln´ı v´ yhern´ı bod, podpora v´ yhern´ıho bodu atd. Za nˇejakou dobu se hr´aˇc rozhodne prov´est zm´ınˇenou moˇznost. Poˇc´ıtaˇcov´ ym hr´aˇc˚ um je pˇridˇelena role. Jsou 3 role, u ´toˇcn´ık, neutr´aln´ı a obr´ance. ´ cn´ık m´a vˇetˇs´ı ˇsanci, ˇze se rozhodne u Utoˇ ´toˇcit, neˇz hr´aˇci neutr´aln´ı nebo obr´ance. T´ım p´adem bude u ´toˇcn´ık ˇcastˇeji u ´toˇcit neˇz br´anit. Neutr´aln´ı hr´aˇc m´a stejnou ˇsanci, zda se rozhodne u ´toˇcit nebo br´anit. Obr´ance tedy ve vˇetˇsinˇe pˇr´ıpad˚ u vol´ı obranu. Kaˇzd´a moˇznost m´a tak´e alternativn´ı moˇznost. To znamen´a, ˇze pokud nelze prov´est prvn´ı moˇznost, zvol´ı se druh´a moˇznost. Pokud ani druhou moˇznost nelze prov´est, rozhodne se ˇza´dnou moˇznost neprov´adˇet. D´ale je tu ovlivnˇen´ı pomoc´ı v´ yhern´ıch bod˚ u. Pokud je nˇekter´ y hr´aˇc bl´ızko v´ıtˇezstv´ı, napˇr. zb´ yv´a jednomu hr´aˇci posledn´ıch 30 barel˚ u k v´ıtˇezstv´ı, tak se ostatn´ı hr´aˇci budou snaˇzit z´ıskat protihr´aˇcovi v´ yhern´ı body. D´elka mezi rozhodnut´ımi nen´ı konstantn´ı. Poˇc´ıtaˇcov´ı hr´aˇci se opakovanˇe rozhoduj´ı mezi 3 aˇz 7 sekundami. Hr´aˇc se rozhodne prov´est moˇznost a pot´e bude 3 aˇz 7 sekund ˇcekat (pˇrem´ yˇslet), neˇz se rozhodne prov´est dalˇs´ı moˇznost. Po v´ ybˇeru moˇznosti nen´ı br´an do u ´vahy budouc´ı v´ yvoj hry, jako napˇr. u Minimaxu. Proto toto rozhodov´an´ı poˇc´ıtaˇcov´ ych hr´aˇc˚ u nen´ı tolik v´ ypoˇcetnˇe n´aroˇcn´e a nen´ı potˇreba ho vkl´adat do samostatn´eho vl´akna. 18
Algoritmus pro testov´an´ı konce bitvy. Do pole activePlayers se ukl´ad´aj´ı hodnoty true nebo false, podle toho zdali hr´aˇc jeˇstˇe hraje nebo nikoliv. Pole m´a velikost 4 a lidsk´ y hr´aˇc je na indexu 0. Pomoc´ı metody checkActivePlayers se toto pole projde a nastav´ı. Lisk´ y hr´aˇc je vyˇrazen, pokud nem´a ˇz´adn´e z´akladny, ani ˇz´adn´e jednotky na pˇresunu. Pˇri hern´ım m´odu v´ yhern´ı body se jeˇstˇe kontroluje stav pole holdingVPTimes velikosti 4, coˇz je pole reprezentuj´ıc´ı hodnoty naplnˇen´ ych barel˚ u. Kdyˇz je jedna z hodnot menˇs´ı neˇz 1, bitva se ukonˇc´ı.
2.13.
Publikov´ an´ı aplikace
Google Play je nejvˇetˇs´ı distribuˇcn´ı obchod aplikac´ı k OS Android, mimo to nab´ız´ı i filmy, hudbu a elektronick´e knihy. Mezi dalˇs´ı obchody patˇr´ı Amazon AppStore, Slide ME, Samsung Apps a dalˇs´ı. Pro publikov´an´ı her na Google Play existuje tzv. v´ yvoj´aˇrsk´a konzole Google Play (developer console Google Play). Po zaregistrov´an´ı a zaplacen´ı jednor´azov´eho poplatku 25 dolar˚ u V´as ˇcek´a moˇznost publikov´an´ı aplikac´ı zdarma. Pro prod´av´an´ı aplikac´ı si mus´ıte jeˇstˇe vytvoˇrit u ´ˇcet obchodn´ıka. Abyste mohli publikovat aplikaci, mus´ıte ji tak´e spr´avnˇe podepsat. Pˇri v´ yvoji(ladˇen´ı) aplikace V´am ji podepisuje Android SDK, a proto ji m˚ uˇzete spouˇstˇet v emul´atoru nebo instalovat na zaˇr´ızen´ı. Nicm´enˇe ji mus´ıte podepsat V´ami vytvoˇren´ ym kl´ıˇcem, pokud ji chcete publikovat v Google Play. Vyexportujete aplikaci s Vaˇs´ım podepsan´ ym kl´ıˇcem a pot´e ji m˚ uˇzete nahr´at na Google Play. Pˇred samotn´ ym publikov´an´ı hry mus´ıte jeˇstˇe vybrat jm´eno, napsat popis, vytvoˇrit a nahr´at ikonu velkou 512x512 pixel˚ u a tak´e obr´azek oznaˇcen jako hlavn´ı grafika velk´ y 1024x500 pixel˚ u. D´ale zvol´ıte typ, kategorii a hodnocen´ı obsahu, kter´e je odrazem c´ılov´e skupiny uˇzivatel˚ u. Jeˇstˇe mus´ıte zadat do jak´ ych zem´ı se m´a hra distribuovat. Nyn´ı m˚ uˇzete koneˇcnˇe publikovat svou aplikaci. Kdyby jste chtˇeli aplikaci aktualizovat, mus´ıte v souboru AndroidManifest.xml zv´ yˇsit ˇc´ıslo u android:versionCode (staˇc´ı o jedniˇcku). Tohle mus´ıte udˇelat pˇri kaˇzd´e aktualizaci, jinak V´am nep˚ ujde nahr´at nov´ y soubor .apk. V´ yvoj´aˇrsk´a konzole nab´ız´ı moˇznosti, jak hru pˇredpˇripravit pro publikov´an´ı pomoc´ı alfa a beta testov´an´ı. Pˇri vyhled´av´an´ı aplikac´ı na Google Play se V´am zobraz´ı jen ty aplikace, kter´e jsou s Vaˇs´ım zaˇr´ızen´ım kompatibiln´ı. To se pozn´a podle obsahu v souboru AndroidManifest.xml. Zda se aplikace zobraz´ı na pˇredn´ıch pozic´ıch ve v´ ysledku vyhled´av´an´ı, z´avis´ı na poˇctu staˇzen´ı, recenz´ı a hlavnˇe hodnocen´ı. Air Wars lze nainstalovat ze str´anky na Google Play: https://play.google.com/store/apps/details?id=com.strategy.air_wars.
19
Obr´azek 4. Uk´azka v´ yvoj´aˇrsk´e konzole Google Play
20
3.
Program´ atorsk´ a dokumentace
Bylo naprogramov´ano 19 tˇr´ıd a vˇsechny jsou uloˇzeny v adres´aˇri game/. Z toho je 12 tˇr´ıd urˇceno pro vykreslen´ı obrazovek, 1 tˇr´ıda implementuj´ıc´ı poˇc´ıtaˇcov´eho hr´aˇce, 1 tˇr´ıda uchov´avaj´ıc´ı textury a zvukov´e soubory, 2 tˇr´ıdy pro hern´ı objekty, 1 tˇr´ıd pro uchov´av´an´ı a ukl´ad´an´ı nastaven´ı, 1 tˇr´ıda implementuj´ıc´ı logiku hry. Hern´ı framework pracuje pouze s jednou aktivitou, to m´a za n´asledek, ˇze se aplikace, po stisku syst´emov´eho tlaˇc´ıtka zpˇet, ukonˇc´ı. Aby syst´emov´e tlaˇc´ıtko zpˇet pracovalo korektnˇe s obrazovkami, musela b´ yt pˇreps´ana metoda onBackPressed. Po pˇreps´an´ı obsahuje pˇr´ıkaz switch, ve kter´em se kontroluje promˇenn´a actualScreen (tuto promˇennou mˇen´ı kaˇzd´a novˇe vytvoˇren´a obrazovka) ve tˇr´ıdˇe Settings a podle hodnoty t´eto promˇenn´e se prov´ad´ı akce, vˇetˇsinou pˇrechod na jinou obrazovku.
3.1.
Struktura projektu v Eclipse
Android´ı projekt v Eclipse m´a n´asleduj´ıc´ı poloˇzky: • src/ – obsahuje adres´aˇre framework/, game/, gameFramework/, glFramework/, math/. V nich jsou uloˇzeny veˇsker´e zdrojov´e soubory v Javˇe. • gen/ – obsahuje automaticky generovan´e soubory v Javˇe. Nemˇely by b´ yt modifikov´any. • assets/ – zde jsou um´ıstˇeny veˇsker´e dodateˇcn´e soubory jako obr´azky, hudebn´ı soubory, konfiguraˇcn´ı soubory atd. Obsahuje allitems.png, backgrounds.png, battlemusic.ogg, music.ogg, click.ogg. • bin/ – obsahuje kompilovan´e soubory, pˇripraven´e pro instalaci aplikace na zaˇr´ızen´ı. • res/ – zde jsou uloˇzeny dalˇs´ı soubory nutn´e pro bˇeh aplikace. Napˇr. ikonky pro r˚ uzn´a rozliˇsen´ı, lokalizaˇcn´ı soubory, soubory s definovan´ ymi ˇretˇezci, xml soubory s rozloˇzen´ım prvk˚ u uˇzivatelsk´eho rozhran´ı. • AndroidManifest.xml – popisuje aplikaci. Definuje jak´e aktivity jsou pouˇz´ıv´any, minim´aln´ı verze syst´emu pro bˇeh aplikace, nutn´a syst´emov´a povolen´ı (napˇr. pˇr´ıstup k sd kartˇe nebo pˇr´ıstup k s´ıti). Pro ladˇen´ı je potˇreba nastavit promˇennou android:debuggable=”true”. Pˇri publikov´an´ı nezapomeˇ nte tuto poloˇzku smazat.
21
3.2.
Tˇ r´ıdy implementuj´ıc´ı abstraktn´ı tˇ r´ıdu Screen
Kaˇzd´a tˇr´ıda implementuj´ıc´ı abstraktn´ı tˇr´ıdu Screen mus´ı definovat metody update, present, pause, resume, dispose. Metoda update je urˇcena ke sledov´an´ı uˇzivatelov´ ych vstup˚ u a aktualizaci dˇen´ı ˇci nastaven´ı hry, metoda present je urˇcena pro vykreslen´ı grafiky a metody pause, resume, dispose jsou urˇceny pro akce pˇri zmˇen´ach stavu ˇzivotn´ıho cyklu aktivity. Kaˇzd´a tˇr´ıda obsahuje nastaven´ı kamery, pracuje s uˇzivatelov´ ymi vstupy a objekt SpriteBatcher, kter´ y m´a na starosti vykreslen´ı grafiky. T´emˇeˇr vˇsechny tˇr´ıdy obsahuj´ı nadpisy, nˇejak´a tlaˇc´ıtka a maj´ı vykreslen´ y obr´azek na pozad´ı, kromˇe tˇr´ıdy SplashScreen. N´asleduje 12 tˇr´ıd a jejich struˇcn´ y popis: • AboutScreen – obsahuje u ´daje o aplikaci a tlaˇc´ıtko pro zmˇenu jazyka hry. • BattleScreen – obsahuje tlaˇc´ıtka pro zmˇenu poˇctu nepˇra´tel, m´odu hry, v´ ybˇer mapy, pro pokraˇcov´an´ı uloˇzen´e hry a tlaˇc´ıtko pro zaˇc´atek nov´e hry. • CampaignScreen – obsahuje tlaˇc´ıtko pro pˇrechod na obrazovku StoryScreen1, v´ ybˇer mise, pokraˇcov´an´ı v uloˇzen´e hˇre a tlaˇc´ıtko pro zaˇca´tek nov´e hry. D´ale obsahuje informace o misi a po dokonˇcen´ı kamapanˇe pˇribyde dalˇs´ı tlaˇc´ıtko pro pˇrechod na obrazovku CompletedCampaignScreen. • CompletedCampaignScreen – obsahuje obr´azek, text a tlaˇc´ıtko pro pˇrechod na obrazovku CampaignScreen. • GameScreen – je hlavn´ı hrac´ı okno a je ze vˇsech tˇr´ıd nejkomplikovanˇejˇs´ı. Zobrazuje z´akladny, v´ yhern´ı body, letadla, helikopt´ery a dalˇs´ı. Obrazovka m˚ uˇze b´ yt v jednom ze dvou stav˚ u, pauznut´a nebo nepauznut´a. V pauznut´em stavu se zobraz´ı nab´ıdka tlaˇc´ıtek a v tom druh´em se manipuluje se z´akladnami. Jako jedin´a vytv´aˇr´ı instanci tˇr´ıdy Control. • HelpScreen1 – obsahuje text, obr´azky n´apovˇedy a tlaˇc´ıtko pro pˇrechod na obrazovku HelpScreen2. • HelpScreen2 – obsahuje druhou ˇca´st n´apovˇedy a tlaˇc´ıtko pro pˇrechod na obrazovku HelpScreen3. • HelpScreen3 – obsahuje tˇret´ı ˇca´st n´apovˇedy a tlaˇc´ıtko pro pˇrechod na obrazovku MainMenuScreen nebo GameScreen. • MainMenuScreen – je hlavn´ı menu hry a obsahuje logo, tlaˇc´ıtka pro pˇrechod na obrazovky CampaignScreen, BattleScreen, HelpScreen1, AboutScreen a animovan´e tlaˇc´ıtko pro zapnut´ı nebo vypnut´ı zvuk˚ u ve hˇre. • SplashScreen – se zobraz´ı jako prvn´ı obrazovka po spuˇstˇen´ı aplikace Air Wars ze syst´emu. Trv´a 4 sekundy a obsahuje posuvn´e ˇca´sti n´apisu Air Wars. 22
• StoryScreen1 – obsahuje text pˇr´ıbˇehov´e linie a tlaˇc´ıtko pro pˇrechod na obrazovku StoryScreen2. • StoryScreen2 – obsahuje druhou ˇc´ast textu pˇr´ıbˇehov´e linie a tlaˇc´ıtko pro pˇrechod na obrazovku CampaignScreen.
Obr´azek 5. Pˇrechod obrazovek.
3.3.
Ostatn´ı tˇ r´ıdy
• Aircraft a Base – tyto tˇr´ıdy slouˇz´ı jako objekty, se ketr´ ymi se manipuluje na obrazovce GameScreen. Obsahuj´ı atributy jako souˇradnice, poˇcet jednotek, velikost, ˇc´ıslo hr´aˇce aj. Obˇe tˇr´ıdy obsahuj´ı metodu update, kter´a aktualizuje souˇradnice u tˇr´ıdy Aircraft a poˇcet jednotek u tˇr´ıdy Base. Tˇr´ıda Aircraft d´ale obsahuje metody end a routeEnd pro testov´an´ı dosaˇzen´ı c´ılov´ ych souˇradnic. Tˇr´ıda Base d´ale obsahuje metody pro pˇr´ılet helikopt´er nebo letadel na z´akladnu, v´ ybˇeru ˇca´st´ı z´akladny aj. • Control – uchov´av´a seznamy letadel, helikopt´er, z´akladen, v´ yhern´ıch bod˚ u, aktivn´ıch hr´aˇc˚ u. S tˇemito seznamy se manipulujeme na obrazovce GameScreen. D´ale obsahuje metody pro ukl´ad´an´ı her, naˇc´ıt´an´ı uloˇzen´ ych her, kontrolu konce bitvy, d´av´a pˇr´ıkazy k aktualizaci jednotek a z´akladen, pos´ıl´an´ı jednotek na nepˇra´telsk´e nebo vlastn´ı z´akladny aj. • Settings – je statick´a tˇr´ıda, kter´a m´a za u ´kol uchov´avat nastaven´ı hry dlouhodobˇe i kr´atkodobˇe. Obsahuje tedy metody pro uloˇzen´ı, naˇcten´ı 23
atribut˚ u ze souboru. Uchov´av´a napˇr. jazyk hry, otevˇren´e mise v kampani, zapnut´ı zvuk˚ u atd. • Ai – je tˇr´ıda simuluj´ıc´ı poˇc´ıtaˇcov´eho hr´aˇce. Pro sv˚ uj v´ ypoˇcet pouˇz´ıv´a seznamy ze tˇr´ıdy Control, kter´e si rozdˇel´ı do dalˇs´ıch specifiˇctˇejˇs´ıch seznam˚ u napˇr. neutr´aln´ı z´akladny, z´akladny drˇzen´e nepˇr´ately atd. • Assets – je statick´a tˇr´ıda, kter´a ukl´ad´a veˇsker´e pouˇzit´e obr´azky a zvuky. Atlas textur je obr´azek sloˇzen´ y z pˇresnˇe um´ıstˇen´ ych mˇenˇs´ıch obr´azk˚ u (tzv. textury). Textury se uchov´avaj´ı v promˇenn´ ych, kter´e se pot´e pouˇzij´ı pro vykreslen´ı. Vˇsechny jm´ena atribut˚ u a metod byly naz´ yv´any podle jejich u ´ˇcelu. Zdrojov´e soubory obsahuj´ı i popis atribut˚ u a sloˇzitˇejˇs´ıch metod.
24
4.
Uˇ zivatelsk´ a pˇ r´ıruˇ cka Syst´emov´e poˇzadavky: • Verze Android 2.2 nebo vyˇsˇs´ı • Pˇristup k sd kartˇe • Pˇr´ıstup k uzamˇcen´ı obrazovky
Jazyk hry se automaticky nastav´ı dle jazyku syst´emu Android. Pokud m´ame syst´em Android v ˇceˇstinˇe, nastav´ı se jazyk hry na ˇceˇstinu. Jinak se nastav´ı na angliˇctinu. Nastaven´ı a rozehran´e bitvy se ukl´adaj´ı do soubor˚ u .airwars, .airwarsc, .airwarsb. Tyto soubory se ukl´adaj´ı do koˇrenov´eho adres´aˇre bud’ na sd kartu (prioritnˇe) nebo do intern´ı pamˇeti pˇr´ıstroje. Pro pohodln´e ovl´ad´an´ı se Air Wars hraje v landscape10 m´odu. Hra byla vytvoˇrena pro rozliˇsen´ı 800x480 pixel˚ u, tedy s pomˇerem stran 5:3. Na zaˇr´ızen´ıch s r˚ uzn´ ym rozliˇsen´ım se m˚ uˇze hra m´ırnˇe rozt´ahnout ˇci z´ uˇzit.
4.1.
Hlavn´ı menu
Pˇred naˇcten´ım hlavn´ıho menu (obr. 6.) se zobraz´ı 4 sekundov´a uv´ıtac´ı obrazovka tzv. splash screen. Hlavn´ı menu obsahuje tlaˇc´ıtko pro vypnut´ı nebo zapnut´ı zvuk˚ u a 4 poloˇzky: • Kampaˇ n – Obsahuje pˇr´ıbˇehovou linii a 12 m´ıs´ı. Lze pokraˇcovat v posledn´ı rozehran´e hˇre. • Bitva – Umoˇzn ˇuje hru s n´ahodn´ ym rozestavn´ım z´akladen, dan´ ym poˇctem nepˇr´atel a hern´ım m´odem. Lze pokraˇcovat v posledn´ı rozehran´e hˇre. • N´ apovˇ eda – Skl´ad´a se ze 3 obrazovek: u ´tok, podpora a hern´ı m´ody. • O aplikaci – Obsahuje informace o hudbˇe a moˇznost zmˇenu jazyka hry.
10
landscape/portrait m´ od = vodorovn´e/svisl´e natoˇcen´ı displeje
25
Obr´azek 6. Hlavn´ı menu, Kampaˇ n, Bitva, O aplikaci.
4.2.
Hern´ı obrazovka
Hern´ı obrazovka (obr 7.) se skl´ad´a z 18 pol´ı. Na kaˇzd´em pol´ıˇcku m˚ uˇze b´ yt ˇ ısla jedna z´akladna nebo v´ yhern´ı bod. Lidsk´ y hr´aˇc m´a vˇzdy modrou barvu. C´ na horn´ım okraji obrazovky signalizuj´ı poˇcet naplnˇen´ ych barel˚ u ropy. Barely se postupnˇe odeˇc´ıtaj´ı a vyhr´av´a hr´aˇc, kter´ y dos´ahne na 0 jako prvn´ı. Pˇri sisknut´ı syst´emov´eho tlaˇc´ıtka zpˇet se zobraz´ı menu a hra se zastav´ı (obr 8.). Hr´aˇc m´a na v´ ybˇer pokraˇcovat, zobrazit n´apovˇedu nebo j´ıt zpˇet do kampanˇe nebo bitvy. Hra se automaticky uloˇz´ı pokud jsou zvoleny posledn´ı dvˇe moˇznosti. Ovl´ad´an´ı se snaˇz´ı b´ yt co nejv´ıce intuitivn´ı. Pro v´ıcen´asobn´e vybr´an´ı z´akladen je potˇreba pˇridrˇzet prst a posunovat s n´ım pˇres vˇsechny z´akladny, kter´e chcete vybrat. Prst m˚ uˇzete pustit na pr´azdn´em pol´ıˇcku nebo na nepˇr´atelsk´e z´akladnˇe, na kterou chcete u ´toˇcit.
Obr´azek 7. Rozehran´a hra s m´odem v´ yhern´ı bod.
26
Obr´azek 8. Hra je zastavena a je zobrazeno menu.
4.3.
Tipy
V hern´ım m´odu zniˇcen´ı je dobr´e nejdˇr´ıve obsazovat neutr´aln´ı z´akladny. Kdyˇz za´ utoˇc´ıte s vˇetˇs´ım poˇctem jednotek, neˇz je na neutr´aln´ı z´akladnˇe, jednotky na nautr´aln´ı z´akladnˇe se k v´am pˇripoj´ı. Myslete na to a u ´toˇcte vˇzdy s vˇetˇs´ım poˇctem. Kdyˇz je soupeˇr˚ u v´ıce neˇz jeden, tyto neutr´aln´ı z´akladny se obsazuj´ı velmi rychle a je tedy potˇreba b´ yt neust´ale ve stˇrehu. Tak´e pamatujte na to, ˇze vˇetˇs´ı z´akladny generuj´ı jednotky rychleji. Pˇrij´ıt tedy o hlavn´ı z´akladnu je ˇcasto, pro n´asleduj´ıc´ı pr˚ ubˇeh hry, osudov´e. D´ale je dobr´e m´ıt pˇrehled o celkov´ ych poˇctech jednotek kaˇzd´eho soupeˇre, i kdyˇz je to pˇri rychl´em tempu hry docela obt´ıˇzn´e sledovat. Poˇc´ıtaˇcov´ y hr´aˇci totiˇz vˇetˇsinou u ´toˇc´ı na nejslabˇs´ıho soupeˇre. Pro hern´ı m´od v´ yhern´ı body plat´ı tak´e v´ yˇse zm´ınˇen´e tipy. Nav´ıc do hry pˇrid´av´a moˇznost ukonˇcit hru z´ısk´an´ım 120 naplnˇen´ ych barel˚ u. Kaˇzdou sekundu je naplnˇen barel pˇri drˇzen´ı jednoho v´ yhern´ıho bodu. Kaˇzd´ y v´ yhern´ı bod zaˇc´ın´a jako nautr´aln´ı a ukazuje poˇcet obrann´ ych jednotek. Pˇred obsazen´ım mus´ı b´ yt obran´e jednotky zniˇceny. Nemohou se tedy pˇridat k hr´aˇci jak je tomu u neutr´aln´ıch ˇ ım v´ıce v´ z´akladen. C´ yhern´ıch bod˚ u vlastn´ıte, t´ım rychleji pln´ıte barely. Je tedy d˚ uleˇzit´e si hl´ıdat poˇcet naplnˇen´ ych barel˚ u u kaˇzd´eho soupeˇre. Klidnˇe m˚ uˇzete pˇrij´ıt o vˇsechny z´akladny, ale kdyˇz vlastn´ıte alespoˇ n jeden v´ yhern´ı bod s dostateˇcn´ ym poˇctem obrann´ ych jednotek a nezb´ yv´a mnoho barel˚ u k naplnˇen´ı, m˚ uˇzete dos´ahnout v´ıtˇezstv´ı.
27
Z´ avˇ er Air Wars je 2D rts hra pro jednoho hr´aˇce. Pouˇz´ıv´a efektivn´ı hern´ı framework, pomoc´ı nˇehoˇz vykresluje 2D grafiku, pouˇst´ı hudbu, reaguje na uˇzivatelovy vstupy a korektnˇe se chov´a v syst´emu Android. Hra obsahuje n´apovˇedu a hern´ı mechanismy jsou natolik jednoduch´e, ˇze je hra vhodn´a pro kaˇzdou vˇekovou skupinu. Pro snadnou dostupnost je hra publikov´ana na Google Play. Hˇre by sluˇsela nov´a moˇznost hry pro v´ıce lidsk´ ych hr´aˇc˚ u, tˇreba pˇres bluetooth nebo lok´aln´ı s´ıt’. Pokroˇcilejˇs´ı inteligence poˇc´ıtaˇcov´eho hr´aˇce. Delˇs´ı kampaˇ n, nov´e mapy a hern´ı m´ody. V´ıce zvuk˚ u by tak´e neuˇskodilo.
28
Reference [1] Zechner, Mario. Green, Robert. Begining Adnroid 4 Games Development. Apress, New York, 2011. [2] The developer’s guides. Guide for developing android application. [online], http://developer.android.com/develop/index.html. [3] Gargenta, Marko. Learning Android. O’Reilly Media, Sebastopol, 2011. [4] Jackson, Wallace. Android Apps for Absolute Beginners. Apress, New York, 2011 [5] Komatineni, Satyo. MacLean, Dave. Pro Android 4. Apress, New York, 2012
29
5.
Obsah pˇ riloˇ zen´ eho CD Struˇcn´ y popis obsahu pˇriloˇzen´eho CD:
bin/ Obsahuje instalaˇcn´ı soubor AirWars.apk. doc/ Obsahuje dokumentaci v PDF form´atu doku.pdf, origin´aln´ı soubor doku.tex a vˇsechny obr´azky pouˇzit´e v dokumentaci. src/ Obsahuje celou strukturu projektu z v´ yvojov´eho prostˇred´ı Eclipse. readme.txt Instrukce pro instalaci a spuˇstˇen´ı aplikace Air Wars, vˇcetnˇe poˇzadavk˚ u pro jeho provoz.
30