´ padoc ˇeska ´ Univerzita v Plzni Za ´ ch Ve ˇd Fakulta Aplikovany ´ poc ˇetn´ı techniky Katedra Informatiky a vy
Bakal´ aˇ rsk´ a pr´ ace
FAVagotchi Real-timeov´ a hra pro Windows Phone
Plzeˇ n, 2014
Frantiˇsek Kohout
1
Obsah ´ 1 Uvod 1.1 Historie hern´ıho pr˚ umyslu . . . . . . . . . . . . . . . . . . . .
6 7
2 C´ıle hry
9
3 N´ avrh aplikace 3.1 Sc´en´aˇr hry . . . . . . . . . . 3.1.1 Vstup do hry . . . . 3.1.2 Pravidla hry (studia) 3.2 Simulace ˇcasu ve hˇre . . . . 3.2.1 V´ ypoˇcet hern´ıho ˇcasu 3.3 Konec hry . . . . . . . . . . ˇ adn´ 3.3.1 R´ y konec . . . . 3.3.2 N´ahl´ y konec hry . . 4 Pouˇ zit´ e technologie 4.1 Microsoft XNA Framework 4.2 .NET XAML . . . . . . . 4.3 V´ ybˇer technologie . . . . . 4.4 LINQ a manipulace s daty 4.4.1 LINQ to SQL . . . 4.4.2 LINQ to XML . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
5 Program´ atorsk´ a dokumentace 5.1 Struktura aplikace . . . . . . . . . . . . . . . 5.2 Seznam tˇr´ıd a funkc´ı . . . . . . . . . . . . . . 5.2.1 tˇr´ıda App : Application . . . . . . . . . 5.2.2 tˇr´ıda core . . . . . . . . . . . . . . . . 5.2.3 tˇr´ıda SQLQuery . . . . . . . . . . . . . 5.2.4 tˇr´ıda SQLTables . . . . . . . . . . . . . 5.2.5 tˇr´ıda XMLQuery . . . . . . . . . . . . 5.2.6 tˇr´ıda gameTime . . . . . . . . . . . . . 5.2.7 tˇr´ıda life . . . . . . . . . . . . . . . . . 5.2.8 tˇr´ıda study . . . . . . . . . . . . . . . 5.2.9 tˇr´ıda move:PhoneApplicationPage . . . 5.2.10 tˇr´ıda mainPage:PhoneApplicationPage
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . . . . . .
. . . . . . . .
10 10 10 11 13 13 14 14 15
. . . . . .
16 16 17 18 18 20 22
. . . . . . . . . . . .
24 24 25 25 26 27 28 28 28 29 30 30 31
OBSAH
5.3 5.4 5.5 5.6
2
5.2.11 tˇr´ıda about:PhoneApplicationPage . 5.2.12 tˇr´ıda positionChecker . . . . . . . . . 5.2.13 tˇr´ıda Schedule:PhoneApplicationPage 5.2.14 tˇr´ıda exam:PhoneApplicationPage . . Informaˇcn´ı obrazovky . . . . . . . . . . . . . Mapov´e podklady . . . . . . . . . . . . . . . Zdrojov´a data SQL . . . . . . . . . . . . . . Zdrojov´a data XML . . . . . . . . . . . . .
6 Testov´ an´ı aplikace 6.1 V´ ybˇer zaˇr´ızen´ı . . . . . . . . . . . . . . . 6.1.1 Komunikace s re´aln´ ym zaˇr´ızen´ım 6.2 Testov´an´ı bˇehu aplikace . . . . . . . . . ˇ 6.2.1 Zivotospr´ ava . . . . . . . . . . . . 6.2.2 Testov´an´ı studijn´ıch podm´ınek . . 6.3 Dosavadn´ı u ´spˇechy . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
32 32 33 34 35 35 36 37
. . . . . .
38 38 39 40 40 41 41
7 Uˇ zivatelsk´ a dokumentace 42 7.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 7.2 Hardwarov´e a softwarov´e poˇzadavky . . . . . . . . . . . . . . 42 7.3 Ovl´ad´an´ı hry . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 8 Moˇ zn´ a rozˇ s´ıˇ ren´ı 8.1 Datov´a rozˇs´ıˇren´ı . . . . . . . . . . . 8.2 Grafika hry . . . . . . . . . . . . . 8.2.1 Zmˇena mapov´ ych podklad˚ u 8.3 Umˇel´a inteligence a ˇzivotospr´ava . . 8.4 Rozˇs´ıˇren´ı sc´en´aˇre a pˇr´ıbˇehu hry . . 8.5 V´ıce platforem . . . . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
45 45 46 46 47 47 47
9 Z´ avˇ er
48
Pouˇ zit´ a literatura a zdroje
49
Seznam obr´ azk˚ u
51
Seznam tabulek
52
Seznam algoritm˚ u
53
OBSAH
3
Pˇ r´ılohy 54 1. Instalaˇcn´ı pˇr´ıruˇcka . . . . . . . . . . . . . . . . . . . . . . . . . . 55 2. N´ahledy hry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Podˇ ekov´ an´ı R´ad bych podˇekoval pˇredevˇs´ım vedouc´ımu sv´e bakal´aˇrsk´e pr´ace Ing. Ladislavu Peˇsiˇckovi za nemal´e mnoˇzstv´ı poskytnut´ ych rad, postˇreh˚ u, n´apad˚ ua ˇcasu, kter´ y mi pˇri psan´ı t´eto pr´ace vˇenoval. D´ale dˇekuji sv´e rodinˇe a pˇr´atel˚ um, kteˇr´ı mi bˇehem cel´eho m´eho studia a n´asledn´eho psan´ı bakal´aˇrsk´e pr´ace poskytli podporu. Zejm´ena pak tˇem, kteˇr´ı mi pom´ahali moj´ı hru FAVagotchi testovat. M˚ uj velk´ y d´ık, patˇr´ı samozˇrejmˇe i vˇsem ˇclen˚ um Katedry informatiky za znalosti a konzultace, jeˇz mi v pr˚ ubˇehu m´eho bakal´aˇrsk´eho studia poskytovali.
ˇ Cestn´ e prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem svou bakal´aˇrskou pr´aci zpracoval samostatnˇe pod veden´ım vedouc´ıho bakal´aˇrsk´e pr´ace a ˇze jsem uvedl vˇsechny pouˇzit´e prameny a literaturu, ze kter´ ych jsem ˇcerpal. Jako autor pr´ace d´ale prohlaˇsuji, ˇze jsem v souvislosti s jej´ım vytvoˇren´ım neporuˇsil autorsk´a pr´ava tˇret´ıch osob.
V Plzni dne 7.5.2013
Abstrakt English The main goal of this bachelor thesis is to create and document development of a real-time desk game for platform Windows Phone 7 and higher which will simulate and describe real progress of a study on The Faculty of Applied Sciences in Pilsen. The name of the game is FAVagotchi. Application is developed in C# language alongside with XAML language and LINQ technology in development environment of Microsoft Visual Studio 2010 Professional and Microsoft .NET framework 4.0. Strictly for the development of mobile applications serve Windows Phone 7.1 SDK library. This whole bachelor thesis contains a description of all parts of development starting from draft, continuig with choosing technologies and finishing with programming and testing. testov´an´ı. In addition, this bachelor thesis serve as user and program documentation for the whole project of FAVagotchi.
ˇ Cesky Hlavn´ım c´ılem t´eto bakal´aˇrsk´e pr´ace je vytvoˇrit a zdokumentovat v´ yvoj realtimeov´e deskov´e hry pro platformu Windows Phone 7 a vyˇsˇs´ı, kter´a bude simulovat a popisovat re´aln´ y pr˚ ubˇeh studia na Fakultˇe Aplikovan´ ych vˇed v Plzni. Hra se jmenuje FAVagotchi. Aplikace je vyv´ıjena v jazyce C# spoleˇcnˇe s jazyky XAML a technologi´ı LINQ ve v´ yvojov´em prostˇred´ı Microsoft Visual Studio 2010 Professional a Microsoft .NET framework 4.0. Pro v´ yvoj ryze mobiln´ıch aplikac´ı pak slouˇz´ı knihovna Windows Phone 7.1 SDK. Cel´a pr´ace obsahuje popis vˇsech ˇc´ast´ı v´ yvoje od n´avrhu, pˇres v´ ybˇer technologi´ı aˇz po samotn´e programov´an´ı a testov´an´ı. Tato bakal´aˇrsk´a pr´ace nav´ıc slouˇz´ı jako uˇzivatelsk´a a program´atorsk´a dokumentace k cel´emu projektu FAVagotchi.
6
Kapitola 1 ´ Uvod Pˇredkl´adan´a bakal´aˇrsk´a pr´ace si klade za c´ıl sezn´amit ˇcten´aˇre s tv˚ urˇc´ım postupem v´ yvoje hry pro platformu Windows Phone 7 a vyˇsˇs´ı, kter´a bude simulovat a popisovat re´aln´ y pr˚ ubˇeh studia na Fakultˇe Aplikovan´ ych vˇed v Plzni. Nav´ıc m´a za c´ıl napomoci budouc´ım student˚ um k lepˇs´ı orientaci pr´avˇe na t´eto fakultˇe a z´aroveˇ n ji propagovat mezi ˇsirokou veˇrejnost´ı. Hru jsem pojmenoval Favagotchi. Cel´a pr´ace je rozˇclenˇena do pˇeti hlavn´ıch kapitol: V prvn´ı kapitole bych r´ad uvedl, proˇc jsem si vybral dan´e t´ema bakal´aˇrsk´e pr´ace a d´ale bych r´ad zm´ınil poˇzadovan´e c´ıle a propagaˇcn´ı charakter cel´e aplikace. Druh´a z kapitol se vˇenuje samotn´emu n´avrhu hry, jej´ımu sc´en´aˇri a popisu pravidel, jak ˇcasov´ ych (semestr´aln´ıch) ud´alost´ı tak i tˇem obecn´ ym v pr˚ ubˇehu hry. Pot´e vysvˇetl´ım z jak´e m´ıry bude sc´en´aˇr pˇr´ıbˇehu shodn´ y vzhledem k re´aln´emu pr˚ ubˇehu studia na fakultˇe. Aby byla zaruˇcena alespoˇ n pˇribliˇzn´a hratelnost, cel´ y pˇr´ıbˇeh se samozˇrejmˇe mus´ı vmˇestnat do nˇekolika m´alo re´aln´ ych dn´ı, po kter´e bude hra potenci´aln´ımu hr´aˇci zpˇr´ıjemˇ novat ˇzivot. Proto se tato kapitola bude t´ ykat hlavnˇe ˇcasov´ ych souvislost´ı ve hˇre. Tuto a n´asleduj´ıc´ı dvˇe kapitoly bakal´aˇrsk´e pr´ace lze povaˇzovat za program´atorskou dokumentaci. Tˇret´ı ˇca´st se zab´ yv´a pˇrev´aˇznˇe funkcionalitou aplikace, pouˇzit´ ymi technoˇ logiemi a jejich popisu. Reˇc bude o hern´ım XNA Frameworku od spoleˇcnosti Microsoft a technologi´ıch XAML, LINQ to SQL a LINQ to XML. N´asledovat bude ryze program´atorsk´a dokumentace, tedy grafick´e zn´azornˇen´ı projektu a v´ yˇcet tˇr´ıd a funkc´ı. Pˇredposledn´ı kapitola bude dokumentovat postup pˇri testov´an´ı a ladˇen´ı cel´eho projektu a jeho souˇca´st´ı. Protoˇze se jedn´a o aplikaci pro mobiln´ı telefon, nebude v t´eto kapitole chybˇet ani popis re´aln´eho zaˇr´ızen´ı na kter´em byla hra testov´ana, respektive i hr´ana. Budou rozebr´any testovac´ı prostˇredky, kter´ ymi jsem aplikaci obohatil, abych mohl otestovat urˇcit´e u ´seky a funkˇcn´ı z´aleˇzitosti hry, kter´e jsou od sebe ˇcasovˇe v´ıce vzd´alen´e. R´ad bych se v t´eto kapitole tak´e zm´ınil o vyv´ıjej´ıc´ı se politice Microsoftu v oblasti uveˇrejnˇen´ı aplikace v AppStore a samotn´e registraci zaˇr´ızen´ı pro testov´an´ı aplikace.
1.1 Historie hern´ıho pr˚ umyslu
7
Nebylo by spr´avn´e opomenout nedostatky aplikace a moˇzn´a rozˇs´ıˇren´ı. Tuto kapitolu jsem zaˇradil pr´avˇe na konec bakal´aˇrsk´e pr´ace. Aplikaci je moˇzn´e rozˇsiˇrovat v´ıce smˇery, zejm´ena pak obs´ahlost´ı dat, protoˇze vˇetˇsina text˚ u, pˇredmˇet˚ u a zkouˇskov´ ych ot´azek je reprezentov´ana pomoc´ı znaˇckovac´ıho jazyka XML.
1.1
Historie hern´ıho pr˚ umyslu
Poˇc´atky vzniku prvn´ıch poˇc´ıtaˇcov´ ych“ her jsou datov´any od roku 1947, ” kdy Thomas Goldsmith s Estlem Mannem vytvoˇrili hru na osmi katodov´ ych trubic´ıch, kter´a simulovala r´anu vystˇrelenou na c´ıl. Hovoˇr´ı se o domnˇence, ˇze se autoˇri zˇrejmˇe inspirovali radarov´ ymi displeji za druh´e svˇetov´e v´alky. Mezi dalˇs´ı pˇredch˚ udce dneˇsn´ıch her lze povaˇzovat klasick´e piˇskvorky vyvinut´e A.S.Douglasem, kter´e v roce 1952 umoˇzn ˇoval hr´at dnes jiˇz archaick´ y poˇc´ıtaˇc EDSAC. Avˇsak za vyn´alezce prvn´ıch videoher je povaˇzov´an William Higinbotham, kter´ y vytvoˇril hru simuluj´ıc´ı tenisov´ y z´apas z pohledu zboku. V t´eto hˇre tenisov´ y m´ıˇcek podl´eh´a gravitaci a mus´ı b´ yt odehr´an pˇres s´ıt’. Hru ovl´adali dva hr´aˇci dvˇema mohutn´ ymi ovladaˇci. V´ yvoj her ˇsel nezastavitelnˇe d´al pˇres ˇsedes´at´a l´eta aˇz do pˇr´ıtomnosti. Hry nejprve vyv´ıjeli jednotlivci v jejich voln´em ˇcase a jako bˇehov´e prostˇred´ı vˇetˇsinou vyuˇz´ıvali univerzitn´ı servery, kde tak mohly sv´e v´ ytvory testovat a ladit. Programov´an´ı ˇslo skrze komerˇcn´ı sf´ery, univerzity a r˚ uzn´e spolky, tak´e i pˇres gar´aˇze r˚ uzn´ ych nadˇsenc˚ u. Mezi nejvˇetˇs´ı korporace, kter´e samy produkovaly nebo odkupovaly hry od dalˇs´ıch tv˚ urc˚ u, je podle mˇe spoleˇcnost Atari, kterou v roce 1972 zaloˇzil Nolan Bushnel. O Bushnelovi se ˇr´ık´a, ˇze Atari zaloˇzil kv˚ uli sv´e nespokojenosti s t´ım, jak mal´e finanˇcn´ı ohodnocen´ı mu ostatn´ı v´ yrobci her nab´ızeli za j´ım dod´avan´e polotovary, jiˇz dnes legend´arn´ıch ark´adovek. V ´eˇre her pro norm´aln´ı smrteln´ıky, kteˇr´ı je mohli hr´at na dom´ac´ıch poˇc´ıtaˇc´ıch, se nejˇcastˇeji pouˇz´ıvali pˇr´ıstroje od firem, jako jsou DEC (dneˇsn´ı HP), Apple, Commodore, Tandy a dalˇs´ı. O v´ yvoji poˇc´ıtaˇcov´ ych ˇci konzolov´ ych her se jednoznaˇcnˇe ned´a ˇr´ıci, ˇze uˇz je vˇse vyvinuto nebo ˇze uˇz potenci´aln´ımu hr´aˇci nebude nab´ıdnuto nic nov´eho. Naopak, kaˇzd´ y rok v t´eto branˇzi v´ yrobci svˇet omr´aˇc´ı nˇeˇc´ım nev´ıdan´ ym, co si lid´e na pˇr´ıˇst´ıch 365 dn´ı v roce dozajista obl´ıb´ı a odvezou dom˚ u z reg´al˚ u poˇc´ıtaˇcov´ ych prodejen. V 90. l´etech, konkr´etnˇe v roce 1997 se po cel´em svˇetˇe zaˇcal rozv´ıjet nov´ y hern´ı trend. Odstartoval ho japonsk´ y tv˚ urce her Aki Maita spoleˇcnˇe s hraˇck´aˇrskou firmou Bandai. Na trh totiˇz vstoupilo tzv. Tamagoˇci, ve kter´em se uˇzivatel mus´ı starat o urˇcit´e zv´ıˇra´tko ˇci bytost. Obecnˇe se tomuto hern´ımu ´ stylu pˇrezd´ıv´a Virtual Pet Care“. Ukolem hr´aˇce Tamagoˇci bylo tuto bytost ”
1.1 Historie hern´ıho pr˚ umyslu
8
krmit, hr´at si s n´ı, plnit urˇcit´e u ´koly a celkovˇe j´ıt s v´ yvojem t´eto postavy na hern´ım displeji. Odmˇenou byla spokojenost pr´avˇe t´eto postavy, jej´ı fyzick´ y r˚ ust ˇci bonusy, kter´e mohl hr´aˇc z´ıskat pˇri pr˚ ubˇehu hran´ı hry. Tvar samotn´eho Tamagoˇci pˇripom´ın´a vaj´ıˇcko a ovl´ad´a se pouze tˇremi tlaˇc´ıtky, ˇctvrt´e miniaturn´ı tlaˇc´ıtko slouˇz´ı pro restart cel´eho hern´ıho procesu a znovunarozen´ı“ ” hern´ı postavy. Postupem ˇcasu bylo samozˇrejmˇe moˇzn´e hr´at Tamagoˇci i na r˚ uzn´ ych poˇc´ıtaˇcov´ ych emul´atorech, nebo pˇr´ımo jako hru vydanou pro urˇcit´a zaˇr´ızen´ı jak´ ymi jsou XBOX, stoln´ı PC, GameyBoy, chytr´e telefony a dalˇs´ı. Dnes, v dobˇe chytr´ ych telefon˚ u, kter´e pracuj´ı na nepˇrebern´em mnoˇzstv´ı verz´ı operaˇcn´ıch syst´em˚ u Android, Windows Phone nebo iOS je jasn´e, ˇze jen velmi mal´ y okruh lid´ı si opravdu koup´ı Tamagoˇci a bude ho aktivnˇe hr´at. Jako alternativa naproti tomuto probl´emu pˇrich´azej´ı hry pˇr´ımo do tˇechto telefon˚ u. Jako prvn´ı bych r´ad uvedl hru Tamagochi L.i.f.e. Ta byla uvedena na trh k 16. v´ yroˇc´ı hry Tamagoˇci jako jej´ı verze do mobilu. Oproti p˚ uvodn´ı verzi m´a samozˇrejmˇe hned nˇekolik vylepˇsen´ı – je barevn´a, ve vyˇsˇs´ım rozliˇsen´ı a m´ate na v´ ybˇer z v´ıce “mazl´ıˇck˚ u””. Sv´e u ´spˇechy nav´ıc m˚ uˇzete sd´ılet se sv´ ymi pˇra´teli na Facebooku. D´ale existuje mnoho dalˇs´ıch variant t´eto hry pro mobiln´ı telefony, ˇ c je o mimozemsk´em mazl´ıˇckovi avˇsak r´ad bych jeˇstˇe vyzdvihl jednu hru. Reˇ jm´enem Pou. Ta se stala hitem bˇehem roku 2012.
9
Kapitola 2 C´ıle hry Samotn´a podstata hry by nemusela b´ yt aˇz tak v jej´ım technick´em a hern´ım proveden´ı ve snaze pˇril´akat svoj´ı hratelnost´ı ˇsirokou veˇrejnost, ale sp´ıˇse v samotn´e myˇslence prezentace ˇskoly a jej´ıho pravideln´eho chodu. Kaˇzd´eho studenta stˇredn´ı ˇskoly ve v´ ybˇeru z nepˇrebern´eho mnoˇzstv´ı univerzit ˇ v Cesk´e republice ovlivˇ nuje cel´a ˇrada faktor˚ u. Prvn´ım z nich je jm´eno ˇskoly a fakt, jak si stoj´ı v porovn´an´ı s ostatn´ı konkurenc´ı. D´ale pak jej´ı zamˇeˇren´ı, n´aplˇ n studia a samozˇrejmˇe co o n´ı ˇr´ıkaj´ı pˇra´tel´e, kteˇr´ı na n´ı jiˇz studuj´ı, nebo ji pr´avˇe z nˇejak´eho d˚ uvodu ke studiu nezvolili. Do jist´e m´ıry ho ovlivn´ı i marketingov´a ˇcinnost a s´ıla propagace dan´e univerzity, o kterou se staraj´ı pr´avˇe univerzitn´ı pracovn´ıci a studenti. Dle m´eho n´azoru stˇredoˇskol´aka v tomto v´ ybˇeru tak´e velmi ovlivn´ı samotn´e pochopen´ı fungov´an´ı univerzity, intern´ıch pravidel a nejnutnˇejˇs´ı byrokracie. Hra obsahuje pomˇernˇe velik´e mnoˇzstv´ı informaˇcn´ıch text˚ u o fakultˇe, rozm´ıstˇen´ı r˚ uzn´ ych budov a tak´e autobusov´ ych zast´avek. Proto bych jako student fakulty aplikovan´ ych vˇed velmi r´ad v´ yvojem t´eto hry napomohl budouc´ım student˚ um k lepˇs´ı orientaci pr´avˇe na t´eto fakultˇe a z´aroveˇ n t´ımto zp˚ usobem svou fakultu, respektive celou Z´apadoˇceskou univerzitu propagoval v tom nejlepˇs´ım svˇetle.
10
Kapitola 3 N´ avrh aplikace Pˇri n´avrhu aplikace bylo nutn´e navrhnout sc´en´aˇr hry, logiku ˇcasov´eho prostˇred´ı a hlavnˇe obs´ahnout komplexnost dat v podobˇe seznamu a rozvrhu pˇredmˇet˚ u, zkouˇsov´ ych ot´azek a pˇredevˇs´ım text˚ u kter´e se ve hˇre vyskytuj´ı.
3.1 3.1.1
Sc´ en´ aˇ r hry Vstup do hry
Po spuˇstˇen´ı a naˇctˇen´ı hry FAVagotchi se hr´aˇc dostane do hlavn´ıho menu kde bude m´ıt na v´ ybˇer ze dvou tlaˇc´ıtek. Viz. obr´azek 3.1. Prvn´ım tlaˇc´ıtkem zapoˇcne FAV´ak˚ uv pˇr´ıbˇeh. Pokud se hr´aˇc rozhodne nˇeco si o hˇre pˇreˇc´ıst, tento u ´kon provede druh´ ym tlaˇc´ıtkem. Pokud by hra nebyla spuˇstˇena poprv´e, vsune se mezi tyto dvˇe moˇznosti jeˇstˇe tˇret´ı a tou je naˇcten´ı hry z rozehran´eho stavu, tedy v urˇcit´e dˇejov´e ˇc´asti hry. Pˇri jiˇz zmiˇ novan´em spuˇstˇen´ı pˇr´ıbˇehu, viz. obr´azky 3.2 a 3.3, se hr´aˇc ocitne pˇr´ımo na univerzitn´ım kampusu a je vtaˇzen do dˇeje, kter´ y zapoˇc´ın´a na poˇca´tku tˇr´ılet´eho bakal´aˇrsk´eho studia 1.ledna 2000. V tu chv´ıli se spust´ı hern´ı ˇcas a postava ve hˇre zapoˇc´ın´a sv˚ uj virtu´aln´ı ˇzivot, kter´ y je potˇreba udrˇzovat, pˇresnˇe jako je tomu v klasick´e hˇre Tamagotchi. Hern´ı strategie je prost´a, pohybovat postaviˇckou po virtu´aln´ım studijn´ım kampusu pomoc´ı dotekov´e obrazovky, plnit pravidla hry a u ´spˇeˇsnˇe hru dov´est do jej´ıho zd´arn´eho konce.
Obr´azek 3.1: Hlavn´ı nab´ıdka
3.1 Sc´en´aˇr hry
11
Obr´azek 3.2: Uv´ıtac´ı obrazovka
Obr´azek 3.3: Hern´ı prostˇred´ı - simulace vysokoˇskolsk´eho kampusu
3.1.2
Pravidla hry (studia)
Hned po zapoˇcet´ı hry zaˇcne hern´ı postaviˇcka hladovˇet, ˇz´ıznivˇet a pocit’uje nedostatek sp´anku. Mimo jin´e jsou toto hlavn´ı tˇri faktory, kter´e je potˇreba z´asahem hr´aˇce ovlivˇ novat a stimulovat. Ve hˇre jsou r˚ uznˇe po are´alu, stejnˇe jako je tomu v re´aln´em prostˇred´ı, um´ıstˇeny automaty, kav´arny a menza pro doplnˇen´ı j´ıdla i pit´ı. Pro zdrav´ y studijn´ı ˇzivot je potˇreba FAV´aka udrˇzet bdˇel´eho a odpoˇcat´eho, proto mus´ı hr´aˇc odch´azet pravidelnˇe z kampusu na kolej, kde m˚ uˇze jeho virtu´aln´ı svˇeˇrenec v klidu odpoˇc´ıvat do nov´eho studijn´ıho dne. Pro zd´arn´ y pr˚ uchod hrou aˇz do jej´ıho samotn´eho konce mus´ı b´ yt splnˇeno jeˇstˇe nˇekolik nezbytn´ ych pravidel. Posl´an´ım hry je samozˇrejmˇe propagovat fakultu v tom nejlepˇs´ım svˇetlˇe, ale pˇres to m´a hlavnˇe v´ yukov´ y charakter, proto je hr´aˇc povinen splˇ novat pravidla ˇskoln´ı doch´azky, a splnit vˇsechny zkouˇsky z pˇredmˇet˚ u, kter´e spadaj´ı do aktu´aln´ıho semestru. Virtu´aln´ı stu-
3.1 Sc´en´aˇr hry
12
dent by se mˇel u ´ˇcastnit vˇsech pˇredn´aˇsek z vybran´ ych pˇredmˇet˚ u v jeho rozvrhu a m´ıt i aktivn´ı u ´ˇcast na cviˇcen´ıch. Rozvrh pˇredmˇet˚ u je zn´azornˇen na obr´azku 3.4. Studijn´ı aktivita je zaznamen´av´ana v hern´ıch minut´ach pro pˇresnˇejˇs´ı v´ ypoˇcet ˇcasu str´aven´eho na tˇechto pˇredn´aˇsk´ach. Pokud tomu tak nebude a doch´azka klesne pod 50%, stane se mu n´aslednˇe u zkouˇsky to, co se pravdˇepodobnˇe stane kaˇzd´emu studentovi v t´eto situaci - obdrˇz´ı od zkouˇsej´ıc´ıho nedostateˇcnou. Ve hˇre je tato situace simulov´ana sadou velmi tˇeˇzk´ ych ot´azek, na kter´e bude d´ele vzpom´ınat i osoba znal´a v dan´e problematice. Pokud nastane situace opaˇcn´a, FAV´ak ˇr´adnˇe studuje a pln´ı v´ıce jak pades´ati procentn´ı doch´azku, dostane u zkouˇsky takov´e ot´azky, na kter´e by mˇel b´ yt schopen odpovˇedˇet i pr˚ umˇern´ y stˇredoˇskol´ak.
Obr´azek 3.4: Studijn´ı pl´an Jedin´e, o co bude hr´aˇc t´eto aplikace ”ochuzen”, je z´apoˇcet z kter´ehokoliv pˇredmˇetu. At’ uˇz formou semestr´aln´ı pr´ace, aktivity ˇci testu. Tento klasick´ y studijn´ı miln´ık do hry nebyl zakomponov´an z pochopiteln´eho d˚ uvodu. Nejen, ˇze by pro z´apoˇctov´e testy musel b´ yt vytvoˇren minim´alnˇe dvojn´asobek ot´azek, kter´e by musely b´ yt obsahovˇe i datovˇe stejnˇe obs´ahl´e jako zkouˇskov´e testy, ale tak´e by aplikace naprosto pˇres´ahla m´e ˇcasov´e moˇznosti. S t´ımto omezen´ım je tak´e spjata problematka rozvrhu pˇredmˇet˚ u. Na poˇca´tku anal´ yzy t´eto aplikace byla myˇslenka proveden´ı re´aln´e simulace vysokoˇskolsk´eho z´apisu a libovoln´eho v´ ybˇeru z re´aln´ ych pˇredmˇet˚ u na fakultˇe. Posl´eze bylo od t´eto myˇslenky upuˇstˇeno ze stejn´eho d˚ uvod˚ u jako je tomu u z´apoˇctu. Proto m´a hr´aˇc studijn´ı pl´an pevnˇe urˇcen dle re´aln´eho rozloˇzen´ı hlavn´ıch pˇredmˇet˚ u vych´azej´ıc´ıch ze studia oboru Inˇzen´ yrsk´a informatika pri fakultˇe aplikovan´ ych vˇed. V ˇc´ıslech to znamen´a 5 pˇredmˇet˚ u na semestr, s t´ım, ˇze u posledn´ıho roku studia pˇredmˇet˚ u pomˇernˇe ubyde.
3.2 Simulace ˇcasu ve hˇre
13
Vzhledem k pomˇernˇe velk´e obs´ahlosti dat a logiky v t´eto aplikaci byl v pˇredchoz´ıch odstavc´ıch sc´en´aˇr hry kompletnˇe uˇzivatelsky pops´an. Nyn´ı bude pops´ano, jak je to vlastnˇe s ˇcasem ve hˇre.
3.2
Simulace ˇ casu ve hˇ re
K tomu aby byla hra realtimov´a, tj. aby simulovala re´aln´ y pr˚ ubˇeh studia na vysok´e ˇskole, je zapotˇreb´ı vytvoˇrit simulovanou dˇejovou linku, aby mohla postava ve hˇre splˇ novat veˇsker´e aspekty re´aln´eho studenta. Vzhledem k hratelnosti cel´e hry FAVagotchi nelze simulovat ˇcas re´alnˇe, tzn. ˇze ˇcasov´ y soubˇeh ud´alost´ı mus´ı b´ yt nˇekolikan´asobnˇe zrychlen, aby se celkov´ y pr˚ ubˇeh ˇsesti bakal´aˇrsk´ ych semestr˚ u dal vmˇestnat do nˇekolika m´alo re´aln´ ych dn´ı, po kter´e bude uˇzivatel hru hr´at. Nav´ıc se ve hˇre neuvaˇzuj´ı ani v´ıkendov´e dny, proto hra na pˇrelomu p´atku a soboty skoˇc´ı rovnou na pondˇel´ı.
3.2.1
V´ ypoˇ cet hern´ıho ˇ casu
Hra nab´ız´ı dva hern´ı ˇcasov´e reˇzimy. Norm´ aln´ı: 10 re´ aln´ ych vteˇ rin, odpov´ıd´ a jedn´ e minutˇ e ve hˇ re Do tohoto reˇzimu se hern´ı postaviˇcka dost´av´a pˇri kaˇzd´e n´avˇstˇevˇe pˇredn´aˇsky, cviˇcen´ı, menzy, bufetu nebo automatu na pit´ı ˇci obˇcerstven´ı. Z tˇechto dvou hern´ıch m´od˚ u se jedn´a o pomalejˇs´ı ˇcasovou variantu. Viz. tabulka 3.1 Hern´ı ˇ cas 1s 1 min 1 hod 1 den 1 t´ yden 1 mˇes´ıc 1 rok
Re´ aln´ yˇ cas 160,666 s 10 s 10 min / 600 s 4 hod / 240 min 28 hod / 1680 min 120 hodin / 7200 min 1460 hod
Tabulka 3.1: Tabulka ˇcas˚ u pro norm´aln´ı hern´ı reˇzim
3.3 Konec hry
14
Zrychlen´ y: 1 re´ aln´ a vteˇ rina, odpov´ıd´ a jedn´ e minutˇ e ve hˇ re V tomto zrychlen´em reˇzimu se hra nach´az´ı jakmile je hr´aˇc mimo v´ yˇse zmiˇ novan´a m´ısta, pohybuje se po kampusu, nebo se nach´az´ı na koleji, kde nab´ır´a s´ıly do nov´eho dne. Viz. tabulka 3.2. Hern´ı ˇ cas 1s 1 min 1 hod 1 den 1 t´ yden 1 mˇes´ıc 1 rok
Re´ aln´ yˇ cas 16,666 s 1s 1 min / 60 s 24 min / 1440 s 2,8 hod / 168 min 12 hodin / 720 min 146 hod / 8760 min
Tabulka 3.2: Tabulka ˇcas˚ u pro zrychlen´ y hern´ı reˇzim
3.3
Konec hry
Kaˇzd´a hra m´a sv˚ uj zaˇca´tek a tak´e konec, proto nesm´ım zapomenout uv´est kdy hra konˇc´ı a zm´ınit zde nˇekolik pˇr´ıpad˚ u, kdy m˚ uˇze k t´eto situaci doj´ıt pˇredˇcasnˇe.
3.3.1
ˇ adn´ R´ y konec
Na toto m´ısto se hra dostane v pˇr´ıpadˇe, ˇze hr´aˇc splnil veˇsker´a pravidla hry a ˇra´dnˇe ukonˇcil studium, tj. splnil vˇsechny zkouˇsky, odevzdal z´avˇereˇcnou bakal´aˇrskou pr´aci a splnil st´atn´ı zkouˇsku. Nejedn´a se o ˇza´dn´ y zvrat ˇci neˇcekanou u ´d´alost, sp´ıˇse se jedn´a o vtipn´e podchycen´ı konce, na kter´em je hr´aˇc povinen hledat m´ıstnost, ve kter´e se odehr´av´a obhajoba bakal´aˇrsk´e pr´ace a st´atn´ı zkouˇska. Jakmile ji v dan´em ˇcasov´em rozmez´ı najde, hra informuje o ˇra´dn´em ukonˇcen´ı a pˇrejde zpˇet do hlavn´ıho menu.
3.3 Konec hry
3.3.2
15
N´ ahl´ y konec hry
K n´ahl´emu ukonˇcen´ı hry m˚ uˇze doj´ıt i pˇri nesplnˇen´ı z´akladn´ıch pravidel. ˇ Zivotospr´ ava: V pˇr´ıpadˇe, ˇze se uˇzivatel hˇre dostateˇcnˇe nevˇenuje, m˚ uˇze postaviˇcka zemˇr´ıt na dehydrataci ˇci vyhladovˇen´ı, pˇresnˇe jako je tomu u klasick´e hry Tamagotchi. Hra v tento moment konˇc´ı informaˇcn´ı obrazovkou s od˚ uvodnˇen´ım. Jakmile virut´aln´ı student neust´ale bd´ı a nedostane se mu pravideln´eho odpoˇcinku na koleji, hra konˇc´ı t´eˇz. V tomto pˇr´ıpadˇe dojde ukonˇcen´ı hry z nedostatku sp´anku. Studijn´ı podm´ınky: Hra bude na pˇrelomu kaˇzd´eho virtu´aln´ıho semestru kontrolovat stav studia. Pokud nejsou splnˇeny vˇsechny podm´ınky pro postup do dalˇs´ıho semestru, v pˇr´ıpadˇe aplikace FAVagotchi, splnˇeny zkouˇsky ze vˇsech pˇredmˇet˚ u vypsan´ ych na dan´ y p˚ ul rok, hra opˇet konˇc´ı pro nesplnˇen´ı z´akladn´ıch pravidel.
16
Kapitola 4 Pouˇ zit´ e technologie Cel´a aplikace je vyv´ıjena pro platformu Windows Phone 7 v jazyce C#. Jako IDE bylo pro v´ yvoj hry pouˇzito Microsoft Visual Studio 2010 Professional a Microsoft .NET framework 4.0. Pro v´ yvoj ryze mobiln´ıch aplikac´ı pak Windows Phone 7.1 SDK jako doplnˇek Visual Studia. Prvotn´ım u ´kolem bylo rozhodnout, zda se hra bude odv´ıjet ˇcistˇe na hern´ı platformˇe Microsoft XNA ( XNA Game Studio ) nebo bude vyv´ıjena za pomoci frameworku .NET a jeho souˇca´st´ı, jazykem XAML v kombinaci s klasick´ ymi C# funkcionalitami. Informace o tˇechto technologic´ıch jsem ˇcerpal z publikac´ı Programming Windows Phone 7 1 , Building Windows 8 Apps with C# and XAML 2 , Pro LINQ: Language Integrated Query in C# 2008 3 a veˇrejnˇe dostupn´ ych informac´ı pˇr´ımo na serveru www.microsoft.com 4
4.1
Microsoft XNA Framework
Dle dostupn´ ych informac´ı z knihy Programming Windows Phone 7 byla tato platforma vyvinuta spoleˇcnost´ı Microsoft pˇrev´aˇznˇe pro v´ yvoj 2D a 3D her nejen pro hern´ı platformu Windows Phone, ale tak´e pro platformy Xbox 360 ˇci Zune. Obsahuje tˇri hlavn´ı knihovny - Microsoft.Xna.Game, Microsoft.Xna.Pipeline, Microsoft.Xna.Framework. Hra FAVagotchi byla jiˇz od poˇca´tku zam´ yˇslena ve 2D grafice proto se nebudeme 3D problematikou v˚ ubec zab´ yvat. V XNA Frameworku 2D hra obvykle sest´av´a z grafick´eho pozad´ı a prvk˚ u zvan´ ych Sprites. Sprites jsou 2D grafick´e objekty manipulovan´e nez´avisle na zbytku sc´eny. Rovnˇeˇz lze vyuˇz´ıt i animovan´e Sprites, kde se jednotliv´e obr´azky mˇen´ı v z´avislosti na pˇreddefinovan´em ˇcasov´em intervalu, tyto zmˇeny 1
Programming Windows Phone 7 - Charles Petzold - ISBN: 978-0-7356-4335 Building Windows 8 Apps with C# and XAML (Microsoft Windows Development Series - Jeremy Likness - ISBN-13: 978-0321822161 3 Pro LINQ: Language Integrated Query in C# 2008 - Joseph C. Rattz, Jr. - ISBN: 978-1-59059-789-7 4 XAML for Windows Phone 8 http://msdn.microsoft.com/enus/library/windowsphone/develop/cc189036 2
4.2 .NET XAML
17
v ˇcase pot´e vytv´aˇrej´ı iluzi pohybu. Souˇradn´ y syst´em pˇri vytv´aˇren´ı 2D sc´eny m´a standardnˇe poˇca´tek (0,0) v lev´em horn´ım rohu obrazovky. Pro vykreslov´an´ı textu, tedy vytvoˇren´ı 2D obr´azku na z´akladˇe poˇzadovan´eho textu, slouˇz´ı objekt SpriteFont, reprezentuj´ıc´ı font definovan´ y prostˇrednictv´ım XML souboru s pˇr´ıponou .spritefont. Cel´ y v´ yvoj prob´ıh´a tedy sp´ıˇse v grafick´em reˇzimu. Je zapotˇreb´ı vytvoˇrit mnoho grafick´ ych komponent a mapov´ ych podklad˚ u, kter´e zajist´ı hratelnost hry.
4.2
.NET XAML
.NET XAML je znaˇckovac´ı jazyk podobn´ y klasick´emu HTML vyuˇz´ıvan´ yk popisu grafick´eho rozhran´ı v aplikac´ıch spoleˇcnosti Microsoft nov´e generace. Je vyv´ıjen v´ yhradnˇe Microsoftem a zaloˇzen´ y na XML. Pomoc´ı tohoto jazyka lze definovat grafickou strukturu jak webov´ ych, tak i desktopov´ ych ˇci mobiln´ıch aplikac´ı. Jedn´a se o aplikace kter´e pˇrev´aˇznˇe obsahuj´ı standardn´ı ovl´adac´ı prvky, jak´ ymi jsou napˇr´ıklad tlaˇc´ıtka, seznamy, textov´a a v´ ybˇerov´a pole a mnoho dalˇs´ıch. Jiˇz z popisu tohoto jazyka je zˇrejm´e, ˇze oproti XNA Frameworku se d´a XAML vyuˇz´ıt nejen pro hry ale i pro ˇsirˇs´ı spektrum aplikac´ı. Viz. k´od 4.1. K´od 4.1: Vyuˇzit´ı XAML prvku Storyboard pro animaci pohybu hern´ı postaviˇcky ve tˇr´ıdˇe “move”
<Storyboard x : Name="sb"> <SplineDoubleKeyFrame x : Name="whereY" /> <SplineDoubleKeyFrame x : Name="whereX" />
4.3 V´ ybˇer technologie
4.3
18
V´ ybˇ er technologie
Porovn´an´ım .NET XAML a XNA Framework nelze jednoznaˇcnˇe urˇcit, kter´a z tˇechto technologi´ı je obecnˇe lepˇs´ı pro v´ yvoj FAVagotchi. Lze je mezi sebou i libovolnˇe kombinovat, tzn. ˇze se nejedn´a o dvˇe oddˇelen´e technologie. Je ale tˇreba rozhodnout, kter´a z nich bude v cel´e aplikaci pˇrevaˇzovat. Cel´a hra je koncipov´ana sp´ıˇse v nauˇcn´em smyslu. Obsahuje vˇetˇs´ı mnoˇzstv´ı textov´ ych pol´ı a snaˇz´ı se sp´ıˇse simulovat a popsat pr˚ ubˇeh studia na Z´apadoˇcesk´e univerzitˇe. Graficky vypracovan´e animace a 2D grafika by jistˇe byly nespornou v´ yhodou t´eto hry ale z hlediska velk´e obs´ahlosti dat ve hˇre, u ´spory ˇcasu a nedostatku grafick´ ych podklad˚ u pro hru, jsem vybral druhou variantu, tedy technologii .NET XAML. Pokud zv´aˇz´ım r˚ uzn´a pro a proti, urˇcitˇe by se XNA Framework dal vyuˇz´ıt v grafick´ ych animac´ıch, jak´ ymi jsou napˇr´ıklad pohyb postaviˇcky ˇci pˇrep´ın´an´ı mapov´ ych podklad˚ u ve hˇre, ale vzhledem k pomˇernˇe sloˇzit´e implementaci t´eto kombinace dvou technologi´ı, jsem tuto moˇznost zavrhl.
4.4
LINQ a manipulace s daty
S pˇr´ıchodem .NET frameworku 3.5 byla zveˇrejnˇena fin´aln´ı verze projektu, kter´ y se na z´akladˇe informac´ı na serveru http://msdn.microsoft.com“ 5 d´a ” oznaˇcit za revoluci v pˇr´ıstupu k dat˚ um na platformˇe .NET. Jedn´a se o projekt LINQ. V .NET aplikac´ıch lze pracovat s relaˇcn´ımi ˇci hierarchick´ ymi daty a to hned nˇekolika zp˚ usoby. V pˇr´ıpadˇe dat, kter´a jsou uloˇzena v relaˇcn´ı datab´azi bylo moˇzn´e pˇristupovat skrze zn´am´e rozhran´ı ADO.NET, a to jak v pˇripojen´em tak odpojen´em reˇzimu. Pokud jsou data reprezentov´ana hierarchicky v popul´arn´ım form´atu XML, lze vyuˇz´ıvat typ˚ u z assembly System.Xml a pracovat s tˇemito daty bud’ pomoc´ı DOM nebo je zpracov´avat sekvenˇcnˇe. Tyto pˇr´ıstupy by se daly povaˇzovat za standardizovan´e do t´e chv´ıle, neˇz pˇriˇsla technologie LINQ, coˇz znamen´a Language Integrated Query. LINQ pˇrin´aˇs´ı pomoc´ı nov´e palety kl´ıˇcov´ ych slov podporu dotazov´an´ı pˇr´ımo do .NET programovac´ıho jazyku a to s sebou nese mnoho v´ yhod oproti v´ yˇse zm´ınˇen´ ym postup˚ um. Pomoc´ı t´eto technologie lze totiˇz pracovat takˇrka s libovoln´ ymi daty pomoc´ı jiˇz zm´ınˇen´ ych kl´ıˇcov´ ych slov podobnˇe jako je tomu u klasick´eho dotazov´an´ı v SQL aj. Zm´ınˇen´a kl´ıˇcov´a slova jsou uvedeny v tabulce 4.1.
5
msdn.microsoft.com/cs-cz/library/bb397926.aspx - Ofici´aln´ı dokumentace k technologii LINQ
4.4 LINQ a manipulace s daty Select SelectMany Join GroupBy Where OrderBy, OrderByDescending First, Last ElementAt Count Union, Intersect, Except Sum, Min, Max, Average Reverse Concat OfType
19 v´ ybˇer hodnoty kterou chceme pouˇz´ıt v´ ybˇer v´ıce hodnot najednou (napˇr. pole) spojen´ı v´ıce poskytovatel˚ u dat rozdˇelen´ı dat do v´ıce skupin podle urˇcit´eho kl´ıˇce omezen´ı v´ ybˇeru prvk˚ u podle specifikovan´e podm´ınky specifikace tˇr´ıdˇen´ı, umoˇzn ˇuje v´ ybˇer elementu podle kter´eho se m´a tˇr´ıdit v´ ybˇer prvn´ıho nebo posledn´ıho prvku z kolekce v´ ybˇer prvku podle udan´eho indexu poˇcet prvk˚ u v kolekci definice mnoˇzinov´ ych operac´ı sjednocen´ı, pr˚ unik a rozd´ıl vrac´ı souˇcet, minim´aln´ı, maxim´aln´ı ˇci pr˚ umˇernou hodnotu z dan´e kolekce otoˇc´ı poˇrad´ı prvk˚ u v kolekci spoj´ı dvˇe kolekce dohromady v´ ybˇer pouze tˇech prvk˚ u, kter´e jsou specifikovan´eho typu
Tabulka 4.1: Tabulka kl´ıˇcov´ ych slov LINQ LINQ je navrˇzena tak, ˇze je moˇzn´e vytv´aˇret jej´ı implementace pro jednotliv´e datov´e zdroje. Je to podobn´e jako v ADO.NET, kde je moˇzn´e implementac´ı rozhran´ı vytvoˇrit .NET provider pro specifick´ y typ datab´aze, avˇsak v LINQ tato rozˇsiˇritelnost nez˚ ust´av´a jenom u relaˇcn´ıch datab´az´ı a je mnohem abstraktnˇejˇs´ı. Spolu s .NET frameworkem 3.5 je dod´ano nˇekolik ofici´aln´ıch implementac´ı LINQ od Microsoftu, kter´e by mˇely pokr´ yt bˇeˇzn´e potˇreby pro tvorbu aplikac´ı pracuj´ıc´ıch s daty. Jedn´a se o implementace uveden´e v tabulce 4.2.
4.4 LINQ a manipulace s daty LINQ to Objects LINQ to SQL LINQ to XML LINQ to DataSet
20
Implementace LINQ pro standardn´ı kolekce nach´azej´ıc´ı se v pamˇeti Implementace LINQ pro Microsoft SQL Server 2000 a vyˇsˇs´ı Implementace LINQ pro pr´aci s XML daty Implementace LINQ pro pr´aci s ADO .NET datasety
Tabulka 4.2: Tabulka implementac´ı LINQ Na internetu jsou dostupn´e i dalˇs´ı implementace LINQu, jako je napˇr´ıklad LINQ to Amazon, kter´ y slouˇz´ı pro vyhled´av´an´ı knih v tomto internetov´em obchodˇe. Ve hˇre FAVagotchi jsou vˇsak vyuˇzity implementace LINQ to SQL a LINQ to XML.
4.4.1
LINQ to SQL
Pˇri v´ yvoji jak´ekoliv mobiln´ı aplikace nebo hry je d˚ uleˇzit´e myslet na data, kter´a je potˇreba uchovat po minimalizaci, deaktivaci ale i po ukonˇcen´ı procesu aplikace. Klasicky pro takovou situaci slouˇz´ı datab´aze, do kter´ ych se data mohou po dobu neˇcinnosti aplikace ukl´adat. Po d˚ ukladn´em p´atr´an´ı v literatuˇre Pro LINQ: Language Integrated Query in C# 2008 6 a ve svˇetˇe internetu se d´a naj´ıt hned nˇekolik realizac´ı datab´aze na platformˇe Windows Phone. V porovn´an´ı s LINQ to SQL se tyto dalˇs´ı realizace implementaˇcnˇe ani v´ ykonostnˇe dle m´eho n´azoru nedaj´ı ani srovn´avat. Moji volbu nav´ıc ovlivnil tak´e fakt, ˇze technologie LINQ se d´a aplikovat i na jazyk XML, proto jsem nev´ahal a zaˇcal o implementaci LINQ to SQL ˇcerpat dostupn´e informace. V aplikaci je ukl´ad´an´ı dat vyˇreˇseno pomoc´ı dvou hlavn´ıch tˇr´ıd SQLTables, reprezentuj´ıc´ı datab´azi a tabulky v n´ı obsaˇzen´e a SQLQuery, obsahuj´ıc´ı jednotliv´e opareace pr´avˇe pro tyto tabulky. Viz. uk´azky k´od˚ u 4.2, 4.3. a 4.4. K´od 4.2: Uk´azka tˇr´ıdy SQLTables pˇredstavuj´ıc´ı datab´azi a tˇr´ıdy gameData slouˇz´ıc´ı jako tabulka v t´eto datab´azi using System . Data . Linq ; using System . Data . Linq . Mapping ; public c l a s s SQLTables : DataContext { public SQLTables ( string c o n n e c t i o n S t r i n g ) 6
Pro LINQ: Language Integrated Query in C# 2008 - Joseph C. Rattz, Jr. - ISBN: 978-1-59059-789-7
4.4 LINQ a manipulace s daty
21
: base ( c o n n e c t i o n S t r i n g ) { } public Table
gameDatas ; } [ Table ] public c l a s s gameData { public gameData ( ) { } [ Column ( IsPrimaryKey = true , IsDbGenerated = true ) ] public int ID { g e t ; s e t ; } [ Column ( CanBeNull = f a l s e ) ] public string name { g e t ; s e t ; } [ Column ( CanBeNull = f a l s e ) ] public string data { g e t ; s e t ; } } K´od 4.3: Uk´azka z tˇr´ıdy SQLQuery reprezentuj´ıc´ı dotazy na datab´azi. Zde konkr´etnˇe z´apis a v´ ypis hern´ıch zdrojov´ ych dat public c l a s s SQLQuery { public SQLTables DB; public SQLQuery ( string c o n n e c t i o n S t r i n g ) { DB = new SQLTables ( c o n n e c t i o n S t r i n g ) ; i f (DB. D a t a b a s e E x i s t s ( ) == f a l s e ) DB. CreateDatabase ( ) ; } public void i n s e r t T o ( string name , string data ) { gameData ud = new gameData ( ) ; ud . name = name ; ud . data = data ; DB. gameDatas . InsertOnSubmit ( ud ) ; DB. SubmitChanges ( ) ; } public I L i s t s e l e c t A l l ( ) { IQueryable query ; query = from c in DB. gameDatas s e l e c t c ; I L i s t c o u n t r y L i s t = query . ToList ( ) ;
4.4 LINQ a manipulace s daty
22
return c o u n t r y L i s t ; } } K´od 4.4: Dotaz vkl´adaj´ıc´ı do tabulky gameData informaci o ˇcasov´em m´odu pˇri naˇc´ıt´an´ı hry m˚ uˇze vypadat napˇr´ıklad takto. App . SQL . i n s e r t T o ( " gameTimeMode " , "speed" ) ;
4.4.2
LINQ to XML
Jak bylo zm´ınˇeno v´ yˇse, LINQ se d´a vyuˇz´ıvat i pro manipulaci s daty ve form´atu XML. Abych mohl zpracov´avat tento form´at dat, byl jsem doposud nucen v m´ ych aplikac´ıch pouˇz´ıvat klasick´ y DOM nebo sekvenˇcn´ı pˇr´ıstup. LINQ to XML vˇsak umoˇzn ˇuje tato data zpracov´avat mnohem v´ıce efektivnˇeji a rychleji. Ve v´ ysledku tato manipulace s XML skrze implementaci LINQ vypad´a velmi podobnˇe jako pˇr´ıstup k SQL. Ve hˇre FAVagotchi se XML oproti SQL vyuˇz´ıv´a zejm´ena pro nemˇenn´a zdrojov´a data, jak´ ymi jsou zobrazovan´e texty ve hˇre (viz. k´ody 4.5, 4.6), n´azvy pˇredmˇet˚ u, rozvrhov´e akce ˇci testov´e ot´azky. Jedn´a se tedy sp´ıˇse o reˇzim ˇcten´ı dat, neˇz o reˇzim z´apisu a maz´an´ı jako je tomu u dynamick´ ych dat v SQL. K´od 4.5: Uk´azka z tˇr´ıdy XMLQuery reprezentuj´ıc´ı pˇr´ıstup k textov´emu gener´atoru using System . Xml ; using System . Xml . Linq ; public c l a s s XMLQuery { public XElement sen ; public XMLQuery( string sePath ) { s e n s = XElement . Load ( sePath ) ; } public string t e x t G e n e r a t o r ( string key , string t o R e p l a c e ) { Random r = new Random ( ) ;
4.4 LINQ a manipulace s daty
var query = from c in s e n s . Elements ( "sen" ) where c . Element ( "key" ) . Value == key s e l e c t c ; return query . Elements ( "text" ) . ToList ( ) [ r . Next ( 0 , query . Elements ( "text" ) . Count ( ) − 1 ) ] . Value . Replace ( "{ toReplace }" , t o R e p l a c e ) ; } } K´od 4.6: Soubor sentences.xml pro generov´an´ı vˇet ve hˇre <s e n t e n c e s > <sen> s1 ... t e x t > ... t e x t > s e n t e n c e s >
23
24
Kapitola 5 Program´ atorsk´ a dokumentace 5.1
Struktura aplikace
Graficky popisuje seznam tˇr´ıd a funkc´ı cel´e aplikace. Jedin´e, co se v tomto diagramu nenach´az´ı jsou funkce a tˇr´ıdy zajiˇst’uj´ıc´ı zobrazen´ı komponent a jsou automaticky generov´any prostˇrednictv´ım Visual Studia 2010. Zjednoduˇsenˇe lze ˇr´ıci, ˇze se v grafick´em zn´azornˇen´ı FAVagotchi vyskytuje pouze to, co bylo naprogramov´ano. Viz. obr´azek 5.1
třída App : Aplication třída core
třída SQLQuery třída XMLQuery
třída gameTime
třída life
třída study
data třída SQLTables exams.xml sentences.xml
třída [Table] gameData
třída [Table] duty
subjects.xml tasks.xml
třída [Table] result
třída move : PhoneApplicationPage třída mainPage : PhoneApplicationPage
třída about : PhoneApplicationPage
třída positionChecker třída infoScreen : UserControl třída gameOverScreen : UserControl
třída třída třída třída
areal : UserControl fav: UserControl fel : UserControl way : UserControl
třída placePresentationScreen : UserControl třída Schedule : PhoneApplicationPage třída exam : PhoneApplicationPage
Obr´azek 5.1: Grafick´e zn´azornˇen´ı seznamu tˇr´ıd
5.2 Seznam tˇr´ıd a funkc´ı
25
Jak je vidˇet na tomto grafick´em zn´azornˇen´ı struktury hry FAVagotchi, celou aplikaci zastˇreˇsuje tˇr´ıda App: Application, kter´a se star´a o chov´an´ı aplikace v z´avislosti na akc´ıch uˇzivatele a d´ale inicializuje tˇr´ıdy: gameTime simuluj´ıc´ı ˇcas ve hˇre, life - zajiˇst’uj´ıc´ı ˇzivotospr´avu a study - staraj´ıc´ı se o studijn´ı profil. Posledn´ı tˇr´ıdou, kter´a je inicializov´ana skrze App : Application pomoc´ı mainPage : PhoneApplicationPage je tˇr´ıda core. Zde se na pozad´ı aplikace inicializuj´ı glob´aln´ı promˇenn´e uvnitˇr v´ yˇse vyjmenovan´ ych doprovodn´ ych tˇr´ıd a prostˇrednictv´ım LINQ se postupnˇe inicializuj´ı SQL a XML zdrojov´a data. Jako struktura SQL datab´aze slouˇz´ı tˇr´ıda SQLTables a v n´ı obsaˇzen´e tˇr´ıdy: gameData - z´akladn´ı aplikaˇcn´ı data, duty - studijn´ı aktivita a result - v´ ysledky zkouˇsek. Na tuto datab´azi je moˇzno se dotazovat pomoc´ı tˇr´ıdy SQLQuery. XML zdrojov´e soubory jsou pak naˇc´ıt´any a hˇre zprostˇredkov´any skrze tˇr´ıdu XMLQuery. Jedn´a se o tyto soubory: exams.xml - rozpis zkouˇsek, sentences.xml - zdroj textov´ ych podklad˚ u pro hru, subjects.xml - seznam studijn´ıch pˇredmˇet˚ u spoleˇcnˇe s instrukcemi pro zaˇrazen´ı pˇredmˇet˚ u do studijn´ıho pl´anu, tasks.xml - zdroj testov´ ych ot´azek. Na z´akladˇe tˇechto zinicializovan´ ych dat se postupnˇe vyhodnocuj´ı ud´alosti v souvislosti s pohybem hern´ı postaviˇcky a ˇcasem, kter´e nast´avaj´ı ve tˇr´ıd´ach vyuˇz´ıvaj´ıc´ıch pr´avˇe “j´adro” core a bˇeˇz´ıc´ı pod instanc´ı tˇr´ıdy move : ApplicationPhonePage. Pod touto tˇr´ıdou se na z´akladˇe pozice postaviˇcky asynchronˇe na pozad´ı vol´a tˇr´ıda positionChecker, kter´a m´a na starosti rozpoznat kde se hr´aˇc pr´avˇe nach´az´ı. V t´eto souvislosti skrze tˇr´ıdu move mˇen´ı mapov´e podklady areal, fav, fel a way reprezentovan´e pomoc´ı UserControls a vyvol´av´a informaˇcn´ı obrazovky infoScreen, gameOverScreen, placePresentationScreen. Studijn´ı profil hr´aˇce je dostupn´ y skrze horn´ı uˇzivatelsk´e menu. Reprezentuje ho tˇr´ıda Schedule : PhoneApplicationPage. To nejd˚ uleˇzitejˇs´ı co vˇsak tˇr´ıda positionChecker a move zajiˇst’uj´ı, je obsluha zkouˇskov´eho testu reprezentovan´a tˇr´ıdou exam : PhoneApplicationPage.
5.2
Seznam tˇ r´ıd a funkc´ı
5.2.1
tˇ r´ıda App : Application
Tato tˇr´ıda definuje cel´e chov´an´ı aplikace v z´avislosti na akc´ıch uˇzivatele. D´ale inicializuje tˇri hlavn´ı tˇr´ıdy: gameTime, life a study. Inicializaˇcn´ı funkce kter´e v t´eto tˇr´ıde automaticky vytv´aˇr´ı Visual Studio a nebylo v nich proveden ˇza´dn´ y z´asah zde nebudou uvedeny.
5.2 Seznam tˇr´ıd a funkc´ı
26
void Application Launching() Inicializace XML a LINQ. void Application Activated() Zmˇena glob´aln´ı statick´e promˇenn´e gameWasDeactivated na hodnotu true void Application Deactivated() Minimalizace aplikace na telefonu. Vol´an´ı funkce core.saveGame() void Application Closing() Ukonˇcen´ı procesu aplikace v telefonu. Vol´an´ı funkce core.saveGame() void RootFrame NavigationFailed() Selh´an´ı navigaˇcn´ıho prostˇred´ı (odkaz na neexistuj´ıc´ı soubor ˇci obsah, nezn´am´a chyba). Vol´an´ı funkce core.saveGame() nav´ıc zobrazen´ı chybov´eho hl´aˇsen´ı. void Application UnhandledException() Nezn´am´a chyba. Vol´an´ı funkce core.saveGame() void BackgroundMusic() Pˇrehr´av´an´ı MIDI soubor˚ u na pozad´ı hry pomoc´ı GlobalMediaElement
5.2.2
tˇ r´ıda core
Hlavn´ı statick´a tˇr´ıda programu obsahuj´ıc´ı glob´aln´ı statick´e promˇenn´e. void startNewGame() Spouˇstˇen´ı nov´e hry, inicializace promˇenn´ ych, zaveden´ı nov´ ych dat do LINQ. void loadGame() Naˇcten´ı rozehran´e hry, inicializace promˇenn´ ych pomoc´ı dat naˇcten´ ych z LINQ, dopoˇc´ıt´an´ı hern´ıho ˇcasu ( odeˇcet ˇcasu zavˇren´ı aplikace od aktu´aln´ıho ˇcasu ), dopoˇcet ˇcasu v z´avislosti na posledn´ı pozici hr´aˇce, pˇred vypnut´ım hry ( v pˇr´ıpadˇe ˇze se hr´aˇc nach´azel na m´ıstˇe ve kter´em ˇcas ub´ıhal pomaleji napˇr. v menze, nebo na m´ıstˇe kde z´aleˇzelo na ˇcase, ku pˇr´ıkladu na pˇredn´aˇsce nebo zkouˇsce ). void gameOver(string why) Ukonˇcen´ı hry, smaz´an´ı dat z LINQ, zobrazen´ı info obrazovky. saveGame Uloˇzen´ı statick´ ych promˇenn´ ych dat do LINQ.
5.2 Seznam tˇr´ıd a funkc´ı
5.2.3
27
tˇ r´ıda SQLQuery
SQLQuery(string connectionString) Kontruktor tˇr´ıdy vytv´aˇrej´ıc´ı nebo inicializuj´ıc´ı datab´azi na z´akladˇe cesty k datov´emu souboru .sdf. void insertTo(string name, string data) Vkl´ad´an´ı dat do tabulky gameData IList selectAll() Vrac´ı celou tabulku gameData string Select(string what) Vrac´ı konkr´etn´ı prvek tabulky gameData na z´akladˇe hledan´eho kl´ıˇcov´eho slova. void Update(string what, string to) Editace z´aznamu v tabulce gameData dle kl´ıˇcov´eho slova a nahrazuj´ıc´ıho prvku. void TruncateGameData Vypr´azdnˇen´ı tabulky gameData void insertToSubjectsDuty(string subject, string dateTimeIn) Vkl´ad´an´ı poˇca´teˇcn´ıho ˇcasu pˇr´ıstupu na pˇredn´aˇsku nebo cviˇcen´ı dle zadan´eho pˇredmˇetu. void UpdateSubjectsDateTimeOut(string subject) Dokonˇcen´ı z´aznamu o studijn´ı aktivitˇe v tabulce duty na z´akladˇe aktu´aln´ıho ˇcasu a odeˇcten´ı ˇcasu pˇr´ıstupu na pˇredn´aˇsku nebo cviˇcen´ı, kter´ y je vloˇzen do tabulky skrze funkci void insertToSubjectsDuty . int getSumMinutes(string subject) Vrac´ı poˇcet minut str´aven´ ych na pˇredn´aˇsk´ach a cviˇcen´ıch dle zadan´eho pˇredmˇetu. IList selectAllSubjectsDuty() Vrac´ı celou tabulku duty void TruncateDutys() Vypr´azdnˇen´ı tabulky query void insertToResults Vkl´ad´an´ı z´aznamu o v´ ysledku zkouˇsky do tabuly result. void countExamTry(string subject) Vrac´ı poˇcet pokus˚ u o zkouˇsku dle zadan´eho pˇredmˇetu.
5.2 Seznam tˇr´ıd a funkc´ı
28
int countExamEnter(string subject, string timeTo) Vrac´ı poˇcet pˇr´ıstup˚ u na zkouˇsku dle zadan´eho pˇredmˇetu a ˇcasu zkouˇsky. void TruncateResults() Vypr´azdnˇen´ı tabulky result. void TruncateDatabase() Vypr´azdnˇen´ı vˇsech tabulek v datab´azi. void DeleteDB() Smaz´an´ı cel´e datab´aze.
5.2.4
tˇ r´ıda SQLTables
Obsahuje inicializaci tˇr´ıd gameData, dutys, results
5.2.5
tˇ r´ıda XMLQuery
XMLQeury(string sPath, string ePath, string tPath, string sePath) Kontruktor tˇr´ıdy inicializuj´ıc´ı glob´aln´ı promˇenn´e XElement subjects, exams, tasks, sentences na z´akladˇe cesty k datov´emu souboru .xml. string array getSubjectsBySchedule(string room) Vrac´ı pˇredmˇet dle zadan´e m´ıstnosti ve kter´e se odehr´av´a. string array getSubjectsBySortcut(string sc) Vrac´ı pˇredmˇet dle jeho zadan´e zkratky. string array getExam(string room) Vrac´ı term´ın zkouˇsky dle zadan´e m´ıstnosti ve kter´e se odehr´av´a. string textGenerator(string key, string toReplace) Vrac´ı n´ahodnˇe vybran´a textov´ y podklad na z´akladˇe zadan´eho kl´ıˇce. Sekvence toReplace slouˇz´ı pro pˇr´ıpad, ˇze bychom v dan´em XML chtˇeli dynamicky mˇenit text. Napˇr´ıklad ˇc´ıslo m´ıstnosti pro zkouˇsku ˇci n´azev pˇredmˇetu.
5.2.6
tˇ r´ıda gameTime
Obsahuje promˇenn´e nesouc´ı informace o hern´ım ˇcase a reˇzimu hry. void saveTimes() Uloˇzen´ı hern´ıho ˇcasu, reˇzimu a ˇcasu deaktivace aplikace do LINQ.
5.2 Seznam tˇr´ıd a funkc´ı
29
int getMyTime() Vrac´ı speci´aln´ı konverzi z ˇcasov´eho form´atu HH:MM na ˇc´ıseln´ y form´at typu integer, pouh´ ym spojen´ım HH+MM, v aplikace je tento u ´daj vyuˇzit pro sestavov´an´ı rozvrhov´ ych akc´ı. string getSemester() Vrac´ı aktu´aln´ı oznaˇcen´ı semestru ZS nebo LS. int getDay() Vrac´ı ˇc´ıslo dne v t´ ydnu, pondˇel´ı se bere jako 0. string getNameDay() Vrac´ı n´azev dne v ˇcesk´em jazyce. void setMode(string m) Nastavuje hern´ı reˇzim na SPEED nebo NORMAL. void stopTime() Zastav´ı ˇcas ve hˇre a nastav´ı hodnotu glob´aln´ı statick´e promˇenn´e isRunnable na false. void startTime() Spust´ı ˇcas ve hˇre a nastav´ı hodnotu glob´aln´ı statick´e promˇenn´e isRunnable na true. void incrTime() Inkrementace hern´ıho ˇcasu o minutu. Dekrementace ˇzivotospr´avy. V pˇr´ıpadˇe pˇreteˇcen´ı ˇcasu na Sobotu nebo Nedˇeli, inkrementuje o jeden nebo dva dny.
5.2.7
tˇ r´ıda life
Uchov´av´a a manipuluje s informacemi o ˇzivotospr´avˇe hern´ı postaviˇcky. void decrLifes() Odeˇc´ıt´a ˇz´ızeˇ n, hlad a vyvol´av´a konec hry v pˇr´ıpadˇe ˇze dojde k nulov´emu stavu jednoho z t´echto prvk˚ u ˇzivotospr´avy. void decrSleep() Odeˇc´ıt´a sp´anek a vyvol´av´a konec hry v pˇr´ıpadˇe jeho nulov´eho stavu. void setLifes(double w, double f, double s) Nastaven´ı ˇzivotospr´avy na danou u ´roveˇ n. double getWater() Vrac´ı stav u ´rovnˇe vody. double getFood() Vrac´ı stav u ´rovnˇe j´ıdla.
5.2 Seznam tˇr´ıd a funkc´ı
30
double getSleep() Vrac´ı u ´roveˇ n sp´anku. bool plusWater(double w) Pˇriˇc´ıt´a u ´roveˇ n vody. bool plusFood(double f ) Pˇriˇc´ıt´a u ´roveˇ n j´ıdla. bool plusSleep(double s) Pˇriˇc´ıt´a u ´roveˇ n sp´anku. void saveLifes() Uloˇzen´ı promˇenn´ ych spojen´ ych s ˇzivotospr´avou do LINQ.
5.2.8
tˇ r´ıda study
void checkStudy() Testuje zda byly splnˇeny podm´ınky studia pˇri pˇrechodu do nov´eho semestru. Pokud ne, vyvol´a stac game over pro nesplnˇen´ı podm´ınek studia.
5.2.9
tˇ r´ıda move:PhoneApplicationPage
move() Konstruktor tˇr´ıdy inicializuj´ıc´ı aplikaˇcn´ı komponenty, glob´aln´ı promˇenn´e a asynchron´ı vl´akna v podobˇe DispatcherTime komponent. Sv´ ymi funkcemi sp´ıˇse simuluje glob´aln´ıEvent listener, naslouchaj´ıc´ı vˇsem akc´ım uˇzivatele a hern´ı postavy na z´akladˇe jednotliv´ ych hern´ıch u ´kon˚ u. void PhoneApplicationPageLoaded(object sender, RoutedEventArgs e) Odstraˇ nuje zpˇetn´e navigaˇcn´ı vazby pˇri stisknut´ı tlaˇc´ıtka zpˇet na telefonu. Pˇri spuˇstˇen´ı hry d´ale nastavuje v´ ychoz´ı pozici postavy. void stopAllTimers() Zastav´ı vˇsechna aktivn´ı vl´akna. void changeMap(string map, bool move) Nastavuje a mˇen´ı mapov´ y podklad hry na z´akladˇe zadan´e promˇenn´e map. void checkPositionFunction() Asynchronˇe pracuj´ıc´ı funkce zjiˇst’uj´ıc´ı zda postava dorazila na zadan´e souˇradnice X a Y. Jakmile tato situace nastane, pomoc´ı glob´aln´ı promˇenn´e core.position vyhodnot´ı akci a provede.
5.2 Seznam tˇr´ıd a funkc´ı
31
void positionTimerToGetOut() Jakmile se postava dostane do jak´ekoli m´ıstnosti, menzy, zkouˇsky nebo automatu na j´ıdlo ˇci pit´ı, spouˇst´ı se tato asynchronˇe pracuj´ıc´ı funkce, kter´a neust´ale zjiˇst’uje zda postava nen´ı z tohoto m´ısta pryˇc aby opˇet mohla spustit bud’to jin´ y mapov´ y podklad, nebo vyhodnotit jinou akci. void eventCheckerFunc() Asynchronˇe obsluhuje zobrazov´an´ı hern´ıho ˇcasu, jednotek ˇzivotospr´avy a z´aroveˇ n slouˇz´ı jako eventListener pˇri vyvol´an´ı info obrazovky nebo gameOver stavu. void animateFunction() Animaˇcn´ı funkce obstaravaj´ıc´ı spravn´e vykreslen´ı, natoˇcen´ı postavy a stˇr´ıd´an´ı nohou ( lev´a - prav´a ) void moveObject(double kX, double kY, string target, string kom) Zajiˇst’uje samotn´ y v´ ypoˇcet pro pohyb postavy na obrazovce. Pomoc´ı klasick´eho Pythagorova vzorce dopoˇc´ıt´a smˇer pohybu a spust´ı animaˇcn´ı funkci animateFunction. sekvence funkc´ı void Tap Funkce zajiˇst’uj´ıc´ı vykon´an´ı pohybu, zmˇenu obrazovky ˇci konec hry na z´akladˇe dotyku na jeden z ovl´adac´ıch prvk˚ u rozm´ıstˇen´ ych na hern´ı ploˇse. void arrowAnimationFunc() Animace ukazatele po dotyku na urˇcit´ y ovl´adac´ı prvek. void markTarget(int x, int y) Nastaven´ı souˇradn´ıc ukazatele a spuˇstˇen´ı samotn´e animace.
5.2.10
tˇ r´ıda mainPage:PhoneApplicationPage
mainPage() Konstruktor tˇr´ıdy inicializuj´ıc´ı ovl´adac´ı komponenty hlavn´ıho menu. void loadGameClick() Vol´an´ım funkce core.loadGame() naˇcte potˇrebn´a data ke spuˇstˇen´ı rozehran´e hry, spust´ı hern´ı ˇcas a pˇresmˇeruje hr´aˇce do hlavn´ı hern´ı obrazovky zobrazen´e pomoc´ı tˇr´ıdy move. void newGameClick() Vol´an´ım funkce core.newGame() naˇcte potˇrebn´a data ke spuˇstˇen´ı nov´e hry, spust´ı hern´ı ˇcas a pˇresmˇeruje hr´aˇce do hladn´ı hern´ı obrazovky zobrazen´e pomoc´ı tˇr´ıdy move.
5.2 Seznam tˇr´ıd a funkc´ı
32
void PhoneApplicationPageLoaded() Odstraˇ nuje zpˇetn´e navigaˇcn´ı vazby pˇri stisknut´ı tlaˇc´ıtka zpˇet na telefonu. Nav´ıc zastav´ı hern´ı ˇcas. void aboutClick() Pˇresmˇerov´an´ı na obrazovku informuj´ıc´ı hr´aˇce o hˇre FAVagotchi.
5.2.11
tˇ r´ıda about:PhoneApplicationPage
about() Konstruktor tˇr´ıdy inicializuj´ıc´ı ovl´adac´ı komponenty str´anky o hˇre FAVagotchi. void PhoneApplicationPageLoaded(object sender, RoutedEventArgs e) Odstraˇ nuje zpˇetn´e navigaˇcn´ı vazby pˇri stisknut´ı tlaˇc´ıtka zpˇet na telefonu void backClick(object sender, RoutedEventArgs e) N´avrat ze str´anky o hˇre do hry.
5.2.12
tˇ r´ıda positionChecker
void startTimer(int interval) Spouˇst´ı asynchron´ı vl´akno ( timer ) positionTimerFunc se zadan´ ym ˇcasov´ ym intervalem v milisekund´ach. void check() Kontrola promˇenn´e core.targetPosition. Po vyhodnocen´ı promˇenn´e vyvol´a pˇr´ısluˇsnou funkci ve tˇr´ıdˇe positionChecker void menza() Postava se nach´az´ı v menze. Jakmile funkce probˇehne prvotn´ı podm´ınkou na ˇcas pˇr´ıstupu do menzy vyvol´a funkce informaˇcn´ı obrazovku o vstupu do menzy. D´ale napln´ı glob´aln´ı promˇennou core.position, vynuluje core.targetPosition a nastav´ı hern´ı ˇcas na norm´aln´ı reˇzim. void favBufet() Postava se nach´az´ı v bufetu budovy FAV. Napln´ı glob´aln´ı promˇennou core.position, vynuluje core.targetPosition, nastav´ı hern´ı ˇcas na norm´aln´ı reˇzim a spust´ı positionTimerFunc s intervalem 200ms. void felBufet() Postava se nach´az´ı v bufetu budovy FEL. Napln´ı glob´aln´ı promˇennou core.position, vynuluje core.targetPosition, nastav´ı hern´ı ˇcas na norm´aln´ı reˇzim a spust´ı positionTimerFunc s intervalem 200ms.
5.2 Seznam tˇr´ıd a funkc´ı
33
void foodMat() Postava se nach´az´ı u jednoho z automatu na j´ıdlo. Napln´ı glob´aln´ı promˇennou core.position, vynuluje core.targetPosition, nastav´ı hern´ı ˇcas na norm´aln´ı reˇzim a spust´ı positionTimerFunc s 200ms intervalem. void waterMat() Postava se nach´az´ı u jednoho z automatu na pit´ı. Napln´ı glob´aln´ı promˇennou core.position, vynuluje core.targetPosition, nastav´ı hern´ı ˇcas na norm´aln´ı reˇzim a spust´ı positionTimerFunc s 200ms intervalem. void sleep() Postava se nach´az´ı na koleji. Napln´ı glob´aln´ı promˇennou core.position, vynuluje core.targetPosition, nastav´ı hern´ı ˇcas na norm´aln´ı reˇzim a spust´ı positionTimerFunc s 200ms intervalem. void learningProgres() Postava se nach´az´ı v jednom ze tˇr´ı stav˚ u ( pˇredn´aˇska, cviˇcen´ı, zkouˇska ). Prob´ıh´a kontrola tˇechto stav˚ u a d´ale vyhodnocen´ı. Pak uˇz nast´av´a podobn´ y proces jako u pˇredchoz´ıch poziˇcn´ıch funkc´ı. Napln´ı glob´aln´ı promˇennou core.position, vynuluje core.targetPosition, nastav´ı hern´ı ˇcas na norm´aln´ı reˇzim a spust´ı positionTimerFunc s 200ms intervalem. void positionTimerFunc() Kontrola glob´aln´ı promˇenn´e core.position. Na z´akladˇe jej´ı hodnoty v nastaven´em intervalu vykon´av´a ˇcasovˇe z´avisl´e u ´lohy, kter´ ymi jsou pˇriˇc´ıt´an´ı prvk˚ u ˇzivotospr´avy (pit´ı, j´ıdlo, sp´anek), jestliˇze se postava nach´az´ı na m´ıstˇe kde tyto prvky lze doplnit a nebo pˇr´ıˇc´ıt´a studijn´ı aktivitu pokud je postava na pˇredn´aˇsce nebo cviˇcen´ı z nˇejak´eho pˇredmˇetu. void positionInterupt() Pˇreruˇsuje asynchronˇe pracuj´ıc´ı funkci positionTimerFunc a vyvol´a informaˇcn´ı obrazovku s pˇr´ısluˇsn´ ym textem. Pˇri pˇreruˇsen´ı procesu stravov´an´ı v menze si napˇr´ıklad postava postˇeˇzuje, ˇze se ani nestihla naj´ıst. void savePosition() Ukl´ad´a do SQL tabulky gameData informace o poloze postavy a aktu´aln´ı mapov´ y podklad.
5.2.13
tˇ r´ıda Schedule:PhoneApplicationPage
Schedule() Konstruktor tˇr´ıdy inicializuj´ıc´ı ovl´adac´ı komponenty studijn´ıho profilu. void createTable() Vytvoˇren´ı podkladu rozvrhu pro rozm´ıstˇen´ı pˇredmˇet˚ u.
5.2 Seznam tˇr´ıd a funkc´ı
34
void insertSubject(int day, string blocks, string type, string shortcut) Rozm´ıstˇen´ı pˇredmˇet˚ u do pˇredpˇripraven´eho podkladu. void subjectTap() Zobrazen´ı detailu pˇredmˇetu. void backToHome() N´avrat z detailu do rozvrhov´e akce studenta. void button5Click() Zobrazen´ı rozpisu zkouˇsek. void button6Click() Pˇrep´ın´an´ı semestr´aln´ıho obdob´ı v rozvrhu vpˇred. void button7Click() Pˇrep´ın´an´ı semestr´aln´ıho obdob´ı v rozvrhu vzad. void button8Click() Zobrazen´ı rozvrhu. void back() N´avrat ze studijn´ıho profilu do hry.
5.2.14
tˇ r´ıda exam:PhoneApplicationPage
exam() Konstruktor tˇr´ıdy inicializuj´ıc´ı ovl´adac´ı komponenty zkouˇskov´eho procesu.V´ ypoˇcet sloˇzitosti zkouˇsky na z´akladˇe studijn´ı aktivity. Inicializace pole ot´azek vypoˇcten´e u ´rovnˇe obt´ıˇznosti. void makeQuestion(int dir) Inicializace ovl´adac´ıch komponent, vyps´an´ı zkouˇskov´e ot´azky, moˇznost´ı a v´ ypoˇcet str´ankov´an´ı pro pˇrechod na dalˇs´ı ot´azku. void checkEndFunction() Asynchronˇe pracuj´ıc´ı funkce, hl´ıdaj´ıc´ı konec zkouˇsky dle stanoven´eho ˇcasov´eho limitu. Na konci limitu konˇc´ı zkouˇsku a vyzve k odevzd´an´ı testu. void button1Click() Po stisku tlaˇc´ıtka vyvol´a opuˇstˇen´ı zkouˇsky a info obrazovku s potvrzen´ım odchodu ze zkouˇsky hr´aˇcem. void zacitClick() Po stisku tlaˇc´ıtka vyvol´a zaˇc´atek zkouˇsky, spust´ı kontrolu konce zkouˇsky a naˇcte prvn´ı ot´azku skrze funkci makeQuestion void odevzdatClick() Po stisku tlaˇc´ıtka vyhodnot´ı a uloˇz´ı v´ ysledky zkouˇsky do SQL tabulky result.
5.3 Informaˇcn´ı obrazovky
35
void zustatClick() Zruˇs´ı volbu odchodu ze zkouˇsky. void nextClick() Pˇrechod na dalˇs´ı testovou ot´azku. void prevClick() Pˇrechod na pˇredchoz´ı testovou ot´azku. void checkAnswers() Zkontroluje vybranou ot´azku a zanese v´ ysledek do pole s v´ ysledky ot´azek. void opt1Tap() Vyvol´a funkci checkAnswers() void opt2Tap() Vyvol´a funkci checkAnswers() void opt3Tap() Vyvol´a funkci checkAnswers() void opt4Tap() Vyvol´a funkci checkAnswers() void PhoneApplicationPageLoaded() Odstraˇ nuje zpˇetn´e navigaˇcn´ı vazby pˇri stisknut´ı tlaˇc´ıtka zpˇet na telefonu
5.3
Informaˇ cn´ı obrazovky
tˇ r´ıda infoScreen:UserControl tˇ r´ıda gameOverScreen:UserControl tˇ r´ıda placePresentationScreen:UserControl tˇ r´ıda about:PhoneApplicationPage
5.4
Mapov´ e podklady
tˇ r´ıda areal:UserControl Mapov´ y podklad are´alu Bory. tˇ r´ıda fav:UserControl Mapov´ y podklad budovy FAV. tˇ r´ıda fel:UserControl Mapov´ y podklad budovy FEL. tˇ r´ıda way:UserControl Mapov´ y podklad cesty mezi are´alem Bory a kolejemi.
5.5 Zdrojov´a data SQL
5.5
36
Zdrojov´ a data SQL
tˇ r´ıda [Table] gameData Obsahuje hern´ı data, kter´a jsou pr˚ ubˇeˇznˇe ukl´ad´ana do SQL tabulek ze kter´ ych se pak prov´adˇeji v´ ypoˇcty ˇzivotospr´avy a studijn´ı aktivity pˇri naˇc´ıt´an´ı a pokraˇcov´an´ı ve hˇre. Jedn´a se o tyto data: ˇ spuˇstˇen´ı hry. startGameTime Cas gameTime Hern´ı ˇcas. ˇ ukonˇcen´ı hry. closeTime Cas ˇ gameTimeMode Casov´ y reˇzim. lastPosition Posledn´ı pozice postavy. lastPositionOutside Posledn´ı pozice postavy mimo vnitˇrn´ı prostory objekt˚ u. map Aktu´aln´ı mapov´ y podklad. life Water Stav pit´ı. life Food Stav potravy. life Sleep Stav sp´anku. ˇ odchodu z pˇredn´aˇsky nebo cviˇcen´ı. subjectDutyTimeOut Cas tˇ r´ıda [Table] duty Obsahuje z´aznamy studijn´ı aktivity tj. ˇcas str´aven´ y na pˇredn´aˇsk´ach a cviˇcen´ıch. tˇ r´ıda [Table] result Obsahuje v´ ysledky zkouˇskov´ ych test˚ u.
5.6 Zdrojov´a data XML
5.6
37
Zdrojov´ a data XML
exams.xml rozpis zkouˇsek pro dan´ y pˇredmˇet. sentences.xml reprezentace text˚ u ve hˇre pomoc´ı kl´ıˇce a n´asledn´eho textu dan´e vˇety. Jedn´a se prakticky o slovn´ı z´asobu postavy. subjects.xml seznam a struktura studijn´ıch pˇredmˇet˚ u. tasks.xml seznam testov´ ych ot´azek.
38
Kapitola 6 Testov´ an´ı aplikace Ned´ılnou souˇc´ast´ı v´ yvoje aplikac´ı i her je bez pochyby testov´an´ı. V pˇr´ıpadˇe hry FAVagotchi tomu nen´ı jinak. Hned po v´ ybˇeru technologi´ı, naprogramov´an´ı z´akladn´ı logiky a spuˇstˇen´ı aplikace na emul´atoru Windows Phone SDK, bylo potˇreba vybrat minim´alnˇe jedno re´aln´e zaˇr´ızen´ı, na kter´em by se hra dala otestovat. Hra tak´e obsahuje mnoho ˇcasov´ ych u ´sek˚ u a ud´alost´ı, ve kter´ ych se postupnˇe kontroluj´ı jednotliv´a pravidla pro zd´arn´ y pr˚ uchod hrou, tedy ˇzivotospr´ava a studijn´ı v´ ysledky. Pro u ´ˇcely tohoto testov´an´ı jsem do aplikace postupnˇe um´ıstil nˇekolik ovl´adac´ıch prvk˚ u, kter´e manipuluj´ı s ˇcasov´ ymi z´avislostmi.
6.1
V´ ybˇ er zaˇ r´ızen´ı
Vzhledem k velk´e nab´ıdce dneˇsn´ıch chytr´ ych telefon˚ u nen´ı zrvona jednoduch´e vybrat zaˇr´ızen´ı, na kter´em by se cel´ y projekt FAVagotchi dal otestovat. Bylo testov´an´ı na katedrou zap˚ ujˇcen´em zaˇr´ızen´ı HTC Mazaa, tento telefon je dod´av´an s operaˇcn´ım syst´emem Windows Phone 7.5 Mango. Dle ofici´aln´ıho prohl´aˇsen´ı v´ yrobce HTC nen´ı urˇcen k voln´emu prodeji, je k dost´an´ı pouze pro developersk´e u ´ˇcely a to v n´asleduj´ıc´ı konfiguraci v tabulce 6.1. Procesor RAM Intern´ı pamˇet’ Rozliˇsen´ı Operaˇcn´ı syst´em
1 GHz 576 MB RAM 8 GB TFT, 800 px x 480 px, 3.8 palc˚ u Windows Phone 7.5 Mango
Tabulka 6.1: Technick´e parametry HTC Mazaa
6.1 V´ ybˇer zaˇr´ızen´ı
39
Dalˇs´ı zaˇr´ızen´ı, na kter´em jsem mˇel moˇznost testovat hru FAVagotchi, poslouˇzil chytr´ y telefon Nokia Lumia 800 16GB Cyan, kter´ y mi poskytl kamar´ad t´emˇeˇr na dva mˇes´ıce v´ yvoje. Technick´e parametry telefonu viz. n´asleduj´ıc´ı tabulka 6.2 Procesor RAM Intern´ı pamˇet’ Displej Operaˇcn´ı syst´em
1,4 GHz 576 MB RAM 16 GB AMOLED, 800 x 480 px, 3.8 palc˚ u Windows Phone 7.5 Mango
Tabulka 6.2: Technick´e parametry Nokia Lumia 800 16GB Cyan
Obr´azek 6.1: HTC Mazaa a Nokia Lumia 800 16GB Cyan
6.1.1
Komunikace s re´ aln´ ym zaˇ r´ızen´ım
Aby bylo moˇzn´e testovat aplikaci na re´aln´em zaˇr´ızen´ı, je nutn´e prov´est ˇradu krok˚ u, kter´e tuto kompilaci z Visual Studia na Windows Phone zaˇr´ızen´ı umoˇzn´ı. Tyto kroky budou podrobnˇeji pops´any v pˇr´ıloze ˇc. 1 kapitole Instalaˇcn´ı pˇr´ıruˇcka. Oba dva testovan´e telefony na obr´azku 6.1 komunikuj´ı s poˇc´ıtaˇcem pomoc´ı micro USB kabelu. Po naˇcten´ı a instalaci hry do obou dvou telefon˚ u se hned na prvn´ı pokus zd´alo vˇse v poˇra´dku. Od emul´atoru Windows Phone se hra na tˇechto telefonech neliˇsila prakticky v niˇcem. Mapov´e podklady, animace pohybu
6.2 Testov´an´ı bˇehu aplikace
40
postaviˇcky ani v´ ypoˇcetn´ı rychlost aplikace se nijak v´ yraznˇe od emul´atoru nezmˇenily. Jedin´ ym viditeln´ ym rozd´ılem je mnohem snadnˇejˇs´ı dotykov´e ovl´ad´an´ı hry a mnohem vˇetˇs´ı rozliˇsen´ı neˇz na monitoru PC. Ve v´ ysledku hra na telefonu vypadala mnohem l´epe neˇz jsem oˇcek´aval. U obou zaˇr´ızen´ı je instalov´an operaˇcn´ı syst´em Windows Phone 7.5 Mango. Pro Windows Phone 8 aplikace nebyla podrobena dlouhodobˇejˇs´ımu testov´an´ı z d˚ uvodu dostupnosti t´eto platformy a jej´ı chov´an´ı tedy nemus´ı vyhovovat poˇzadavk˚ um sc´en´aˇre a v´ yvoje hry. Samozˇrejmˇe lze pˇredpokl´adat kompatibilitu s niˇzˇs´ımi verzemi OS.
6.2
Testov´ an´ı bˇ ehu aplikace
Osobnˇe bych zde r´ad uvedl, ˇze testov´an´ı aplikace tohoto typu je pomˇernˇe sloˇzit´e. Hra nen´ı ve stylu sb´ır´an´ı bod˚ u ˇci snaze postoupit do dalˇs´ı u ´rovnˇe. Proto je nutn´e testovat ud´alosti hlavnˇe simulovan´ ymi ˇcasov´ ymi posuny. Toto testov´an´ı bylo v r´amci v´ yvoje vˇsak nad moje s´ıly i ˇcasov´e moˇznosti, proto mi s n´ım skrze emul´ator pom´ahal u ´zk´ y okruh pˇra´tel. R´ad bych jim t´ımto velmi podˇekoval.
6.2.1
ˇ Zivotospr´ ava
Po uplynut´ı kaˇzd´e ˇcasov´e jednotky (v norm´aln´ım reˇzimu kaˇzd´ ych 10 re´aln´ ych vteˇrin, ve zrychlen´em jednu vteˇrinu), se odeˇc´ıt´a stav j´ıdla, pit´ı i sp´anku. Aby bylo moˇzn´e rychle a efektivnˇe testovat ud´alosti z´avisl´e na tomto odpoˇctu, je tˇreba s n´ım manipulovat, tuto manipulaci jsem zajistil um´ıstˇen´ım ovl´adac´ıch prvk˚ u, kter´e jsou ilustrov´any n´ıˇze na obr´azku 6.2.
Obr´azek 6.2: Manipulace odpoˇctu ˇzivotospr´avy
6.3 Dosavadn´ı u ´spˇechy
6.2.2
41
Testov´ an´ı studijn´ıch podm´ınek
Opˇet jako je tomu u testov´an´ı odpoˇctu ˇzivotospr´avy jsem na hern´ı obrazovku um´ıstil ovl´adac´ı prvky, kter´e mohou posunout hern´ı ˇcas o urˇcit´e u ´seky r˚ uzn´e d´elky. V z´avislosti na tˇechto ˇcasov´ ych posunech jsem pot´e mohl testovat stˇr´ıd´an´ı semestr˚ u, pˇreskoky v´ıkendov´ ych dn´ı, zaˇca´tek i konec hry, poˇca´tky pˇredn´aˇsek a zkouˇsek a napˇr´ıklad i studijn´ı aktivitu. Viz. obr´azek 6.3
Obr´azek 6.3: Posouv´an´ı hern´ıho ˇcasu
6.3
Dosavadn´ı u ´ spˇ echy
Hra byla pˇredstavena ˇsirok´e veˇrejnosti na dni otevˇren´ ych dvˇeˇr´ı Fakulty aplikovan´ ych vˇed dne 29. 1. 2014, kde se mohla pyˇsnit velikou oblibou jak u student˚ u zaj´ımacj´ıc´ıch se o studium v jednom z obor˚ u, kter´e fakulta nab´ız´ı, tak i u student˚ u, kteˇr´ı jiˇz na fakultˇe p˚ usob´ı. Mnoho dotaz˚ u a pˇripom´ınek si tak´e neodpustila i ˇrada univerzitn´ıch pracovn´ık˚ u, zaj´ımaj´ıc´ıch se zejm´ena o jazyk, ve kter´em je hra programov´ana a kde si mohou hru st´ahnout a zahr´at. Souˇc´ast´ı prezentace bylo i pˇredstaven´ı ofici´aln´ıho loga hry FAVagotchi 6.4.
Obr´azek 6.4: Logo hry FAVagotchi
42
Kapitola 7 Uˇ zivatelsk´ a dokumentace 7.1
Instalace
V tuto chv´ıli je hru moˇzn´e nainastalovat skrze v´ yvojov´e prostˇred´ı Microsoft Visual Studio 2010. Hra se d´a instalovat na emul´ator Windows Phone v poˇc´ıtaˇci, i na re´aln´e zaˇr´ızen´ı. Cel´ y tento instalaˇcn´ı proces je pops´an v pˇr´ıloze ˇc.1. V budoucnu by hra mˇela b´ yt publikov´ana v ofici´aln´ım AppStoru spoleˇcnosti Microsoft, kde bude veˇrejnˇe ke staˇzen´ı a instalaci pro Windows Phone zaˇr´ızen´ı.
7.2
Hardwarov´ e a softwarov´ e poˇ zadavky
Pro u ´spˇeˇsnou intalaci a spuˇstˇen´ı hry, nen´ı nutn´e vlastnit chytr´ y telefon s vysok´ ymi technick´ ymi parametry. Hra FAVagotchi je vytvoˇrena prim´arnˇe v jazyce C# a XAML a nen´ı nijak v´ yraznˇe n´aroˇcn´a na zaˇr´ızen´ı na kter´em je instalov´ana. Minim´aln´ı hardwarov´e a softwarov´e poˇzadavky v tabulce 7.1, jsou uvedeny v souvislosti s telefony, na kter´ ych byla aplikace testov´ana. Procesor RAM Displej Operaˇcn´ı syst´em
0,25 GHz 128 MB RAM alespoˇ n 800 x 480 px, 3.8 palc˚ u Windows Phone 7.5 Mango a vyˇsˇs´ı
Tabulka 7.1: Minim´aln´ı hardwarov´e a softwarov´e poˇzadavky
7.3 Ovl´ad´an´ı hry
7.3
43
Ovl´ ad´ an´ı hry
Vˇsechny ovl´adac´ı a informaˇcn´ı prvky hry jsou obsaˇzeny v info panelu v prav´em horn´ım rohu obrazovky. Viz. obr´azek 7.1.
Obr´azek 7.1: Hern´ı info panel
• 1. Indik´ator pit´ı - informuje o stavu tekutin, pokud postava tento stav pr˚ ubˇeˇznˇe nedoplˇ nuje v menze, bufetech, nebo nˇekter´em z automat˚ u, m˚ uˇze zemˇr´ıt na dehydrataci - hra konˇc´ı. • 2. Indik´ator potravy - m´a naprosto stejn´ y v´ yznam jako stav tekutin. Vˇzdy kdyˇz klesne na nulu, FAV´ak um´ır´a na vyhladovˇen´ı - hra konˇc´ı. • 3. Obsluha doprovodn´e hudby - spuˇstˇen´ı / vypnut´ı MIDI hudebn´ıho podkladu hry. • 4. Hern´ı ˇcas - informuje hr´aˇce o ˇcase ve hˇre, tento informaˇcn´ı prvek je velmi d˚ uleˇzit´ y pˇri hl´ıd´an´ı zaˇca´tku zkouˇsek, pˇredn´aˇsek a cviˇcen´ı. • 5. Hlavn´ı menu - po kliknut´ı na tento ovl´adac´ı prvek se hra uloˇz´ı a hr´aˇc je pˇresmˇerov´an do hlavn´ıho menu ze kter´eho lze pak snadno hru opustit.
7.3 Ovl´ad´an´ı hry
44
• 6. Studijn´ı profil - Hr´aˇc si zde m˚ uˇze prohl´ednout sv˚ uj rozvrhov´ y pl´an, kde se u kaˇzd´eho pˇredmˇetu m˚ uˇze dozvˇedˇet svou aktu´aln´ı doch´azku, sledovat vypsan´e term´ıny zkouˇsek pro dan´ y semestr a kontrolovat si v´ ysledky tˇechto zkouˇsek. • 7. Indik´ator sp´anku - stejnˇe jako je tomu u pit´ı a potravy, jakmile klesne u ´roveˇ n sp´anku na nulovou hodnotu, hra konˇc´ı z d˚ uvodu nedostatku sp´anku.
45
Kapitola 8 Moˇ zn´ a rozˇ s´ıˇ ren´ı Po n´avrhu i pˇri samotn´em v´ yvoji cel´e aplikace jsem pˇrem´ yˇslel, jak by se hra dala v budoucnu rozˇs´ıˇrit a vylepˇsit. V tuto chv´ıli je to moˇzn´e hned nˇekolika zp˚ usoby.
8.1
Datov´ a rozˇ s´ıˇ ren´ı
Ta spoˇc´ıvaj´ı pˇredevˇs´ım v obohacen´ı XML soubor˚ u o dalˇs´ı data. Ty lze rozˇs´ıˇrit dle n´asleduj´ıc´ı tabulky 8.1. XML / exams.xml
XML / sentences.xml
XML / tasks.xml
XML / subjects.xml
rozpis zkouˇsek pro dan´ y pˇredmˇet. Staˇc´ı pˇridat jen dalˇs´ı term´ın zkouˇsky v DOM struktuˇre a hra se automaticky pˇrizp˚ usob´ı a naˇcte term´ın zkouˇsky do studijn´ıho profilu. v tomto souboru je reprezentov´ana kaˇzd´a vˇeta ve hˇre pomoc´ı kl´ıˇce a n´asledn´eho textu dan´e vˇety. Slovn´ı z´asoba FAV´aka se d´a rozˇs´ıˇrit pouh´ ym pˇrid´an´ım dalˇs´ıho elementu text . testov´e ot´azky. Rozˇs´ıˇrit tyto ot´azky je moˇzn´e pouh´ ym pˇrid´an´ım z´apisu do stuktury XML souboru. Pro kaˇzdou ot´azku jsou k dispozici ˇctyˇri odpovˇedi. seznam a struktura studijn´ıch pˇredmˇet˚ u. Lze roˇs´ıˇrit o libovoln´ y poˇcet v dan´em tˇr´ı let´em rozsahu studia. Pˇri vkl´ad´an´ı dalˇs´ıch pˇredmˇet˚ u je vˇsak nutn´e hl´ıdat si koliduj´ıc´ı rozvrhov´e ˇcasy jednotliv´ ych pˇredmˇet˚ u. D´ale mus´ı b´ yt dodrˇzena datov´a souvislot s t´ımto pˇredmˇetem. Je proto nutn´e mu dodat term´ıny zkouˇsek a zkouˇskov´e ot´azky ve v´ yˇse vyjmenovan´ ych souborech.
Tabulka 8.1: Tabulka rozˇsiˇriteln´ ych zdrojov´ ych XML soubor˚ u
8.2 Grafika hry
8.2
46
Grafika hry
Grafick´e zpracovan´ı hry je v tuto chv´ıli na z´akladn´ı u ´rovni. Mapov´e podklady budov jsou zpracov´any velmi struˇcnˇe a jistˇe by se daly rozˇs´ıˇrit o re´aln´e grafick´e 2D prvky, kter´e by hru dozajista velmi obohatily. Podklady pro venkovn´ı prostory kampusu na Borech jsou zpracov´any o nˇeco l´epe. Na tyto prostory jsem pouˇzil leteckou fotku are´alu a pˇrevedl ji v grafick´em programu do barevn´eho n´aˇcrtu. Jednotliv´e budovy, do kter´ ych se pomoc´ı dotykov´eho displeje d´a hern´ı postaviˇcka poslat jsou prakticky v´ yˇrezy z t´eto leteck´e fotky pouˇzit´e jako pozad´ı jednotliv´ ych XAML element˚ u. Pro u ´pravu tˇechto mapov´ ych podklad˚ u a grafick´ ych prvk˚ u hry, je nutn´e prov´est nˇekolik krok˚ u, kter´e to umoˇzn´ı.
8.2.1
Zmˇ ena mapov´ ych podklad˚ u
• Splnit podm´ınky nutn´e ke kompilaci a naˇcten´ı projektu do Visual Studia 2010. Tyto podm´ınky a n´avod jsou pops´any v pˇr´ıloze 1. kapitole Instalaˇcn´ı pˇr´ıruˇcka. • V hlavn´ım koˇrenov´em adres´aˇri PhoneApp1 se ve sloˇzce maps nach´az´ı jednotliv´e mapov´e podklady. • Pokud chceme napˇr´ıklad zmˇenit mapov´ y podklad pro budovu FAV, vybereme tedy soubor fav.xaml. • D´ale do sloˇzky images importujeme obr´azek mapov´eho podkladu o minim´aln´ıch rozmˇerech 800px x 481px. • Pokud nechceme v souboru fav.xaml nic mˇenit a pouze vymˇenit tento mapov´ y podklad. Je tˇreba tento obr´azek nahr´at pod stejn´ ym n´azvem jako m´a jeho pˇredch˚ udce, tedy fav.png a nahradit ho. • V pˇr´ıpadˇe, ˇze chceme pˇredchoz´ı mapov´ y podklad zachovat, a hru pouze rozˇs´ıˇrit o nov´ y, je tˇreba zmˇenit cestu ke zdrojov´emu souboru. To provedeme z´asahem do zdrojov´eho k´odu XAML v souboru fav.xaml, u elementu mainGrid a jeho vlastnosti ImageBrush. Zde zmˇen´ıme ImageSource, tak, ˇze pˇrep´ıˇseme cestu k naˇsemu nov´emu mapov´emu podkladu. Napˇr´ıklad ImageSource=/PhoneApp1;component/images/novy-podklad.png ´ Uprava grafiky a vˇetˇsiny prvk˚ u aplikace je velmi jednoduch´a. Staˇc´ı pouze manipulovat s objekty ve zdrojov´ ych souborech s koncovkou .xaml. To znamen´a, ˇze m˚ uˇzeme libovolnˇe manipulovat s pozicemi r˚ uzn´ ych budov, pˇredn´aˇskov´ ych
8.3 Umˇel´a inteligence a ˇzivotospr´ava
47
m´ıstnost´ı a ovl´adac´ıch prvk˚ u aniˇz by to ohrozilo chov´an´ı a logiku aplikace. Samozˇrejmˇe mus´ı b´ yt tyto objekty zachov´any, v pˇr´ıpadˇe odstranˇen´ı nˇekter´eho z nich, nep˚ ujde aplikace ani zkompilovat a Visual Studio bude hl´asit chybu hned po smaz´an´ı tohoto objektu i pˇri samotn´e kompilaci.
8.3
Umˇ el´ a inteligence a ˇ zivotospr´ ava
Chov´an´ı studenta by se urˇcitˇe dalo obohatit o v´ıce simulac´ı lidsk´eho chov´an´ı, dodat mu n´alady a u ´navu. Dalˇs´ım prvkem hry, kter´ y se sp´ıˇse neveˇsel do samotn´eho n´avrhu, je gener´ator front a zdrˇzen´ı. Ten by generoval r˚ uzn´e ˇcasov´e prodlevy mezi akcemi hr´aˇce. Pˇri poledn´ım vstupu do menzy se napˇr´ıklad m˚ uˇze st´at, ˇze vznikne fronta na j´ıdlo a na jej´ım z´akladˇe FAV´ak nemus´ı stihnout n´asleduj´ıc´ı pˇredn´aˇsku, zkouˇsku apod. Co se t´ yk´a ˇzivotospr´avy, tu bych v budoucnu chtˇel rozˇs´ıˇrit napˇr´ıklad o n´ahled studentovy postavy a aktu´aln´ıho zdravotn´ıho stavu. Pokud se FAV´ak bude neust´ale stravovat v bufetu, bude se to muset odrazit na jeho zdrav´ı, postavˇe a pot´e i rychlejˇs´ım odpoˇctu prvk˚ u ˇzivotospr´avy.
8.4
Rozˇ s´ıˇ ren´ı sc´ en´ aˇ re a pˇ r´ıbˇ ehu hry
Cel´ y pˇr´ıbˇeh je navrˇzen v r´amci tˇr´ı let bakal´aˇrsk´eho studia, urˇcitˇe by mohl b´ yt rozˇs´ıˇren d´al vˇcetnˇe re´aln´eho z´apisu na poˇc´atku kaˇzd´eho studijn´ıho roku. Hra napˇr´ıklad pˇreskakuje v´ıkendy, to by se st´avat nemuselo a o v´ıkendu by hra mohla b´ yt doplnˇena o r˚ uzn´e u ´koly, sb´ır´an´ı bod˚ u, hran´ı miniher a dalˇs´ı, za kter´e by si hr´aˇc vyslouˇzil napˇr´ıklad moˇznost absence na zkouˇsce ˇci pˇredn´aˇsce. V roce 2015 se Fakulta aplikovan´ ych vˇed pˇrestˇehuje do nov´e budovy NTIS/CTPVV, ta by se mohla ve hˇre urˇcitˇe objevit tak´e.
8.5
V´ıce platforem
FAVagotchi je vyv´ıjeno prim´arnˇe pro Windows Phone. Z hlediska porovn´an´ı funkˇcnosti na vˇsech platform´ach bych si ji urˇcitˇe chtˇel zkusit naprogramovat napˇr´ıklad i na operaˇcn´ım syst´emu Android nebo iOS.
48
Kapitola 9 Z´ avˇ er C´ılem pr´ace bylo navrhnout sc´en´aˇr hry pro mobiln´ı zaˇr´ızen´ı odehr´avaj´ıc´ı se v simulovan´em ˇcase. Tato hra nav´ıc mˇela pˇredstavovat vybran´e ˇcinnosti studenta fakulty aplikovan´ ych vˇed a mimo i aktivn´ı u ´ˇcast na v´ yuce a kompletn´ı starost o ˇzivotospr´avu postavy. Navrˇzen´a hra byla realizov´ana a otestov´ana na platformˇe Windows Phone, tedy v jazce C# a d´ale byla zm´ınˇena jej´ı moˇzn´a rozˇs´ıˇren´ı v r˚ uzn´ ych podob´ach. Samotn´ y v´ yvoj hry byl velmi komplexn´ı. Svou komplexnost si cel´a pr´ace z´ıskala zejm´ena obs´ahlost´ı sc´en´aˇre a XML dat, kter´a byla do hry zanesena. Pro kaˇzd´ y pˇredmˇet bylo nutn´e vytvoˇrit alespoˇ n 6 ot´azek a vypsat alespoˇ n4 term´ıny na zkouˇsku z tohoto pˇredmˇetu. Pro v´ yvoj cel´eho projektu bylo zvoleno v´ yvojov´e prostˇred´ı Microsoft Visual Studio 2010. Souˇc´ast´ı testov´an´ı hry byl pouˇzit emul´ator Windows Phone dod´avan´ y s knihovnou Windows Phone SDK a dva re´aln´e mobiln´ı telefony. V r´amci tohoto testov´an´ı byla nav´ıc prozkoum´ana instalace hry na re´aln´e zaˇr´ızen´ı skrze Zune software a registrace telefonu pomoc´ı Windows Phone Developer Registration. Na z´avˇer bych r´ad uvedl, ˇze c´ıle deklarovan´e v zad´an´ı a na u ´vodu bakal´aˇrsk´e pr´ace byly splnˇeny. Hra byla pˇredstavena na dni otevˇren´ ych dveˇr´ı Fakulty aplikovan´ ych vˇed 2014, kde zaujala potenci´aln´ı studenty i studenty kteˇr´ı jiˇz na fakultˇe p˚ usob´ı. Byl bych velmi r´ad, kdyby pokraˇcov´an´ım t´eto pr´ace mohla b´ yt napˇr´ıklad realizace nˇekter´ ych navrˇzen´ ych rozˇs´ıˇren´ı ˇci v´ yvoj cel´e hry pro jinou platformu.
49
Literatura [1] Charles Petzold Programming Windows Phone 7 ISBN: 978-0-7356-4335 http://fav.galosoft.cz/favagotchi.html [2] Joseph C. Rattz, Jr. Pro LINQ: Language Integrated Query in C# 2008 ISBN: 978-1-59059-789-7 http://fav.galosoft.cz/favagotchi.html [3] Jeremy Likness Building Windows 8 Apps with C# and XAML (Microsoft Windows Development Series ISBN-13: 978-0321822161 [4] Adam Freeman, Matthew MacDonald, Mario Szpuszta ASP .NET 4 a C# 2010 - KNIHA 1 - tvorba dynamick´ ych str´ anek profesion´ alnˇ e ISBN: 978-80-7413-131-8 [5] Adam Freeman, Matthew MacDonald, Mario Szpuszta ASP .NET 4 a C# 2010 - KNIHA 2 - tvorba dynamick´ ych str´ anek profesion´ alnˇ e ISBN: 978-80-7413-131-5 [6] Andrew Troelsen Pro C# 5.0 and the .NET 4.5 Framework (Expert’s Voice in .NET) ISBN-13: 978-1430242338 [7] Windows Phone Dev Center DEV.WindowsPhone.com [on-line] https://dev.windowsphone.com [8] Microsoft Developer Network MSDN.Microsoft.com [on-line] https://msdn.microsoft.com
[9] Microsoft Developer Network Introduction to LINQ [on-line] http://msdn.microsoft.com/en-us/library/bb397897.aspx [10] Microsoft Developer Network XAML for Windows Phone 8 [on-line] http://msdn.microsoft.com/en-us/library/windowsphone/develop/cc189036 [11] Czech MSDN Blog Blogs.MSDN.com [on-line] http://blogs.msdn.com/b/vyvojari [12] Komunitn´ı server pro v´yvojaˇre Vyvojar.cz [on-line] http:/www.vyvojar.cz [13] Komunitn´ı server pro v´yvojaˇre StackOverflow.com [on-line] http://stackoverflow.com/questions/tagged/windows-phone-7 /
51
Seznam obr´ azk˚ u 3.1 3.2 3.3 3.4
Hlavn´ı nab´ıdka . . . . . . . . . . . . . . . . . . . . Uv´ıtac´ı obrazovka . . . . . . . . . . . . . . . . . . . Hern´ı prostˇred´ı - simulace vysokoˇskolsk´eho kampusu Studijn´ı pl´an . . . . . . . . . . . . . . . . . . . . .
5.1
Grafick´e zn´azornˇen´ı seznamu tˇr´ıd . . . . . . . . . . . . . . . . 24
6.1 6.2 6.3 6.4
HTC Mazaa a Nokia Lumia 800 16GB Cyan Manipulace odpoˇctu ˇzivotospr´avy . . . . . . Posouv´an´ı hern´ıho ˇcasu . . . . . . . . . . . . Logo hry FAVagotchi . . . . . . . . . . . . .
7.1
Hern´ı info panel . . . . . . . . . . . . . . . . . . . . . . . . . . 43
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
10 11 11 12
39 40 41 41
52
Seznam tabulek 3.1 3.2
Tabulka ˇcas˚ u pro norm´aln´ı hern´ı reˇzim . . . . . . . . . . . . . 13 Tabulka ˇcas˚ u pro zrychlen´ y hern´ı reˇzim . . . . . . . . . . . . . 14
4.1 4.2
Tabulka kl´ıˇcov´ ych slov LINQ . . . . . . . . . . . . . . . . . . . 19 Tabulka implementac´ı LINQ . . . . . . . . . . . . . . . . . . . 20
6.1 6.2
Technick´e parametry HTC Mazaa . . . . . . . . . . . . . . . . 38 Technick´e parametry Nokia Lumia 800 16GB Cyan . . . . . . 39
7.1
Minim´aln´ı hardwarov´e a softwarov´e poˇzadavky . . . . . . . . . 42
8.1
Tabulka rozˇsiˇriteln´ ych zdrojov´ ych XML soubor˚ u . . . . . . . . 45
53
Seznam algoritm˚ u 4.1 4.2 4.3 4.4 4.5 4.6
Vyuˇzit´ı XAML prvku Storyboard pro animaci pohybu hern´ı postaviˇcky ve tˇr´ıdˇe “move” . . . . . . . . . . . . . . . . . . . . Uk´azka tˇr´ıdy SQLTables pˇredstavuj´ıc´ı datab´azi a tˇr´ıdy gameData slouˇz´ıc´ı jako tabulka v t´eto datab´azi . . . . . . . . . . . Uk´azka z tˇr´ıdy SQLQuery reprezentuj´ıc´ı dotazy na datab´azi. Zde konkr´etnˇe z´apis a v´ ypis hern´ıch zdrojov´ ych dat . . . . . . Dotaz vkl´adaj´ıc´ı do tabulky gameData informaci o ˇcasov´em m´odu pˇri naˇc´ıt´an´ı hry m˚ uˇze vypadat napˇr´ıklad takto. . . . . . Uk´azka z tˇr´ıdy XMLQuery reprezentuj´ıc´ı pˇr´ıstup k textov´emu gener´atoru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Soubor sentences.xml pro generov´an´ı vˇet ve hˇre . . . . . . . .
17 20 21 22 22 23
54
Pˇ r´ılohy Pˇ r´ıloha 1. Instalaˇ cn´ı pˇ r´ıruˇ cka V t´eto pˇr´ıloze se ˇcten´aˇr dozv´ı, jak hru FAVagotchi otevˇr´ıt a spustit na emul´atoru Windows Phone, i na re´aln´em zaˇr´ızen´ı.
Pˇ r´ıloha 2. N´ ahledy hry Pˇr´ıloha obsahuje jednotliv´e n´ahledy na hru v r˚ uzn´ ych dˇejov´ ych u ´sec´ıch.
55
1. Instalaˇ cn´ı pˇ r´ıruˇ cka Prvn´ım krokem k samotn´e instalaci hry FAVagotchi je staˇzen´ı cel´eho projektu. Ten je volnˇe dostupn´ y na adrese http://fav.galosoft.cz/favagotchi.html, kde se mimo jin´e nach´az´ı i tato kompletn´ı dokumentace vˇcetnˇe pˇr´ıloh a veˇsker´e dostupn´e literatury t´ ykaj´ıc´ı se pouˇzit´ ych programovac´ıch jazyk˚ u a technologi´ı v tomto projektu. Na adrese http://dev.windowsphone.com/en-us/downloadsdk je k dost´an´ı cel´a ˇrada programov´ ych knihoven pro Windows Phone. Na konci tohoto seznamu je SDK 7.1, tato knihovna je podm´ınkou kompilace cel´eho projektu.Po staˇzen´ı a instalaci se do Visual Studia 2010 automaticky nat´ahne v´ yvojov´e prostˇred´ı pro Windows Phone. Projekt FAVagotchi lze otevˇr´ıt pomoc´ı spouˇstˇec´ıho souboru FAVagotchi.sln v hlavn´ı sloˇzce projektu. Ten spust´ı Visual Studio 2010 a naˇcte do nˇej veˇsker´e souˇc´asti projektu, kter´e jsou dostupn´e po spuˇstˇen´ı funkce Solution Explorer. N´asleduje samotn´a kompilace a spuˇstˇen´ı hry. Na v´ ybˇer je ze dvou moˇznost´ı. Emul´ator nebo re´aln´e zaˇr´ızen´ı. Tento v´ ybˇer lze prov´est v horn´ım panelu hned vedle zelen´e ikony spouˇstˇej´ıc´ı kompilaci. Viz. obr´azek 1.
Obr´azek 1: V´ ybˇer typu kompilace Pro kaˇzd´ y typ kompilace je nutn´e prov´est odliˇsn´e kroky, proto uˇz jsou n´asledn´e pokyny oddˇelen´e.
1.Instalaˇcn´ı pˇr´ıruˇcka
56
Windows Phone Emul´ ator Pro spuˇstˇen´ı hry na emul´atoru staˇc´ı ve v´ yˇse zmiˇ novan´em horn´ım panelu pouze vybrat jednu z moˇznost´ı Windows Phone emul´atoru. Tyto moˇznosti se liˇs´ı pouze ve virtualizaci velikosti RAM pamˇeti a verzi operaˇcn´ıho syst´emu. Po v´ ybˇeru varianty lze kompilaci projektu na emaul´ator spustit kl´avesovou zkratkou F5 nebo kliknut´ım na zelen´e tlaˇc´ıtko hned vedle tohoto v´ ybˇeru. Cel´a instalace prob´ıh´a na tomto emul´atoru naprosto shodnˇe s re´aln´ ym zaˇr´ızen´ım a netrv´a dlouho. S t´ımto emul´atorem nav´ıc lze manipulovat jako s re´aln´ ym zaˇr´ızen´ım, tj. instalovat do nˇej aplikace, proch´azet operaˇcn´ı syst´em apod. Tyto u ´kony lze prov´adˇet pouze do vypnut´ı emul´atoru nebo cel´eho PC. Po znovuspuˇstˇen´ı se toto virut´aln´ı zaˇr´ızen´ı chov´a totiˇz jako po n´avratu do tov´arn´ıho nastaven´ı.
Obr´azek 2: Windows Phone Emulator
1.Instalaˇcn´ı pˇr´ıruˇcka
57
Re´ aln´ e zaˇ r´ızen´ı Windows Phone Tento postup instalace hry je m´ırnˇe komplikovanˇejˇs´ı. Nejprve je nutn´e m´ıt u ´ˇcet na serveru Live.com, respektive na port´alu zab´ıvaj´ıc´ı se samotn´ ym v´ yvojem aplikac´ı pro platformu Windows Phone. Port´al Windows Phone Dev Center se nach´az´ı na adrese http://dev.windowsphone.com/en-us .
Obr´azek 3: Windows Phone Dev Center Po registraci na tomto port´alu je nutn´e m´ıt telefon vyhovuj´ıc´ı minim´aln´ım hardwarov´ ym a softwarov´ ym poˇzadavk˚ um, kter´e jsou uvedeny v Kapitole 6. - Uˇ zivatelsk´ a dokumentace . D´ale je nutn´e m´ıt instalovan´ y Zune Software, komunikuj´ıc´ı se zaˇr´ızen´ım a slouˇz´ıc´ı k synchronizaci dat a soubor˚ u mezi poˇc´ıteˇcem a telefonem. Tento program lze volnˇe st´ahnout na adrese https://www.windowsphone.com/cs-cz/how-to/wp7/zune-software . Jak vypad´a program Zune lze nahl´ednout v n´asleduj´ıc´ım obr´azku 4.
Obr´azek 4: Zune Software Po tˇechto z´akladn´ıch kroc´ıch je nutn´e prov´est samotnou registraci zaˇr´ızen´ı k developersk´emu u ´ˇctu Windows Phone Dev Center. Spoleˇcnˇe s knihovnou Windows Phone SDK 7.1 a emul´atorem Windows Phone se do poˇc´ıtaˇce nainstaluje sluˇzba Windows Phone Developer Registration. Pro rychlejˇs´ı pˇr´ıstup
2. N´ahledy hry
58
k t´eto sluˇzbe je urˇcitˇe lepˇs´ı si ji v poˇc´ıtaˇci naj´ıt pomoc´ı funkce Prohledat programy a soubory. Spoleˇcnˇe s touto sluˇzbou mus´ı b´ yt spuˇstˇen Zune Software, prostˇrednictv´ım kter´eho telefon s poˇc´ıteˇcem komunikuje. Cel´ y proces registrace zaˇr´ızen´ı probˇehne hned pot´e, co uˇzivatel vypln´ı sv´e pˇrihlaˇsovac´ı u ´daje, kter´e zadal pˇri registraci do Windows Phone Dev Center.
Obr´azek 5: Windows Phone Developer Registration Po tˇechto kroc´ıch by mˇel b´ yt chytr´ y telefon pˇripraven k instalaci FAVagotchi.
59
2. N´ ahledy hry
Obr´azek 1: Budova FAV
Obr´azek 2: Budova FEL
2. N´ahledy hry
60
Obr´azek 3: Pˇr´ıchod na zkouˇsku
Obr´azek 4: Uv´ıt´an´ı po pˇr´ıchodu do budovy
2. N´ahledy hry
61
´ Obr´azek 5: Uvodn´ ı obrazovka
Obr´azek 6: N´ahled zkouˇskov´e ot´azky