Kajarist
Kirjeldus
Tegemist on XNAs tehtud 2D pealt vaates RPG-elementidega mäguga. Tegelane, kelle nimi meie mängus on Germi, sattus Marsile ja avastab sealt mitmeid huvitavaid ja varieeruvaid ümbruskondi, mida läbides on eesmärk leida ning parandada oma kosmoselaeva, et sealt põgeneda. Maailmast on võimalik leida mitmeid erinevaid relvi ja ka boonuseid, mis teevad tegelase erinevatel viisidel kiiremaks või tugevamaks. Mängus on vaheldumisi oskused mitmest vaenlasest korraga möödapääseda kui ka mõtlemisülesanded, kuidas punktist A pääseda punkti B. Mõningatel tasanditel võivad esineda alad, millel käimine on libe või maaalune järjest puruneb, seega tuleb tegutseda kiiresti. Juhtida saab tegelast esialgu vaid nooltega, kuid nice to have osakonnas leiame ka muud viisid tegelast kontrollida( Hüpata, põigelda, roomata jms ). Esialgu piisab vaenlasel vaid sinule pihta minemisest, et sind haavata. Mida tasemeid edasi, seda rohkem võimalusi on tegelastel ja vaenlastel üksteist hävitada.
Mängu saab vajadusel seisata ning nice to have osa oleks ka mängu vahepealne salvestamine ja pärast jätkmine samast kohast. Nagu on ülesannete nõudes kirjas, lisame ka punktisüsteemi. Punkte saab mängija võimalikult kiire leveli läbimise eest, vaenlaste tapmise arvu pealt ning üleskorjatavate objekti eest. Samuti on mängijal võimalik kaotada punkte, kui ta saab haavata.
Nagu paljud teisedki taolised mängud, ei ole see mõeldud intensiivseks ja eesmärgirohkeks tegevuseks, vaid pigem mõeldud kui kiire ja huvitav meelelahutus. Suurim eesmärk on õpetada endile korralikku objekt orienteeritud lähenemist taolistele projektidele.
Leiame, et kõige problemaatilisem on projekti jooksul koodi ühildumine , sest meil puudub korralik repositoorium ning väga ebamugav on seni erinevate inimest koodi ühildada. Koodi funktsionaalsuse poolest aimame, et kõige keerulisemaks osutub veel mitte implementeeritud maailmade vahetus loogika. Mängu üks level koosneb 3x3 ruudustikust ning korraga on näha vaid 1x1 ruudustik. Maailma vahetades tekib täiesti uus ja omade elementidega 3x3 ruudustik. Seni on kõige rohkem takistusi esinenud väiksematel bugidel. Näiteks, kui peategelane satub üles vastu seina, siis oleks hea, kui kasutaja vajutab samal ajal üles ja paremale noolt, liigub tegelane paremale mööda seina edasi. Samuti kõik pisikontrollid(millal tohib tegelane kuskile liikuda, või millega kõigega tuleb arvestada, kui tekitame maailma uue interaktiivse objekti).
Mängu tarkvaraline arhitektuur koosneb peamiselt järgmistest elementidest:
- Mängu käivitav klass Game1, mis ühtlasi initsialiseerib ja laeb mängu ülejäänud osad;
- Mängu ühte levelit esindav maailmaobjekt World, mis hoiab endas leveli ruudistiku paane;
- Ühte paani (ruutu) esindav Tile;
- Kirjutasime objektide funktsionaalsused kokku klassi Object (IObject interface ja seda rakendav AbstractObject ning liikuvaid objekte siduv AbstractMovableObject);
- Objektid paanis, alates tulnukatest ja lõpetades kividega, kasutavad klasse AbstractObject ja AbstractMovableObject;
- Klassides paikneva koodihulga vähendamiseks loodud abiklass Utils;
- Peategelane Germi.
Pildi näiteid
Tööjaotus
- Raamistiku kujundamine, Interfaced, enamik programmi loogikast - Kristjan Veskimäe.
- Olemasolevaid abstraktseid klasse ja interface'e kasutades asjade kirjutamine, üles korjatavate asjade lisamine ja nende toimimine sh inventory, liikumis füüsika lisamine, user interface, testimine, üldine projekti juhtimine (Koosviibimiste korraldus ja kujundaja torkimine, et ta pidevalt sprite'e juurde joonistaks ), saada aru Kristjani koodist - Kalev Käpuk
- Olemasolevaid abstraktseid klasse ja interface'e kasutades asjade kirjutamine, intermission screenid ( main menu, pause jne ) , tegelaste vahelised dialoogid, erinevate levelite funktsioonid ja kujundus (kollide tekkimine, läbistamatute objektide paiknemine jms ), saada aru Kristjani koodist, testimine - Jaak Peldes
Must have
- Kood kirjutatud, mõeldes edasisele lihtsale arendusele. Maailmate ja objekti lisamiseks ei ole vaja palju vaeva näha.
- Combat system nii lähivõitluses kui ka tulistamisega.
- Erinevad interaktiivsed objektid, mida saab korjata, lõhkuda, liigutada vms.
- Vastaste algeline AI loogika.
- Enamik vastaseid, tegelasi ja objekte on animeeritud.
- Punktiloendur ja highscore.
- Mõned transition screenid.
Nice to have
- Minimap
- Animeeritud dialoogid.
- Sound effects
- Targemad AId
- Cheats
- Save feature
- Rohkem erinevaid võimalusi tegelast juhtida.
Log
29.Sept
- Esialgse idee tekkimine
3. Okt
- Esimene koosviibimine - Tutvusime XNA-ga, panime sprite ekraanil liikuma, tajudes ekraani piire. Tutvus Githubiga.
9. Okt
- Teine koosviibimine - Otsisime githubist kergemini õpitavaid vahendeid, ning sattusime SVNTurtoise peale koos Google Code-ga.
14. Okt
- Meeskond lisandus Kristjan Veskimäe. Saime kätte esimesed kujundaja joonistatud sprited.
14-19. Okt
- Iseseisev XNA õppimine.
20. Okt
- Kristjan lendab laivi koodiga, mis on Kalevile ja Jaagule justkui 8. maailmaime. Koodis on peategelane, 2 läbistamatut kivi, Kristjani joonistatud random liikumisega vaenlased, mis kokkupuutel Germiga ta tapavad. Kood on meie jaoks veel keeruline, sest kasutab kolme Interface-i ja mitut abstraktset klassi millega vahetu kokkupuude Kalevil ja Jaagul puudub.
22. Okt
- TTÜs vastab Kristjan küsimustele enda koodi kohta ja õpetab, kuidas antud koodi meeskonniti arendada. Selgitab arhitektuuri põhimõtteid ja mida meeles pidada koodi arendamisel.
28. Okt
- Jaak tuli töölt ära.
29. Okt
- Teine koosviibimine kolmekesti. Kalev on kirjutanud juurde esimese Germile kiirust lisava animeeritud Powerupi ja tekitas vaenlastele animatsiooni. Jaak viimistles koodi, pannes kokku kaks koodi osa, mis oleks ühiselt otstarbekam. Ennist olid liikumatud ja liikuvad objektid eraldi listides, kuid nüüd on maailmas vaid üks list objekte. Kuna koodi jagamise põhimõtted on meil veel viimistlemata, siis kristjan ühendas Jaagu ja Kalevi kirjutatud koodi osad ühte.
Samuti muutsime koosolekul natukene mängu esilagset ülesehitust ( vt. Mängu kirjeldus ) Edasine konkreetsem tööjaotus: Kristjan
- Teha lõplik koodi arhitektuur, ehk lisades maailmade vahetumise loogika.
Kalev
- Tekitada peategelasele algeline liikumise füüsika, et seisma jäämine ja startimine oleks sujuv, mitte äkiline. - Tekitada praegusele mustale ribale erinevate andmete tekstid ( Level: , Elud: jne )
Jaak
- Luua esimesed transistion screenid ( Näiteks mängu alguses tuleb text, mis seletab storyt, ning levelite vahepeal on samuti tekstilised/videolised üleminekut.
4. Nov
Jaak tutuvustas jurude lisatud intermission screeni esimest versiooni. Kalev tutvustas üleskorjatavate objektide uut funktsionaalsust ning esialgset UI-d. Kristjan tutvustas koopale lisatud uksi ja nende toimimist. Palju koodi on muutunud tänu intermission screeni lisamistele seega oli kõigil vaja end sellega kurssi viia. Koosviibimisel arendasime tasa ja targu endale ette nähtud ülesandeid.