Meeskond:Rods
Rods
Meeskonna liikmed
- Rain Mäsak
- Oliver Armväärt (Osales ACM ICPC ja IEEEXTREME 8.0 programmeerimise võistlusel)
- Den-Daniel Dobrus - Projekti juht (Osales ACM ICPC ja IEEEXTREME 8.0 programmeerimise võistlusel)
- Sten Saliste (Osales ACM ICPC ja IEEEXTREME 8.0 programmeerimise võistlusel)
Projekti idee
Teha 2D mäng kasutades Unityt.
Mängu idee on teha rebastele selgeks kooli plaan ja üldine toimimine esimese semestri jooksul.
To-do
- Teha
- Tegemisel
- Tehtud
Idee [25.10.2014]
- DONE - Idee kirja panna
- DONE - Mängutüüp
- DONE - Baasfunktsionaalsus
- DONE - Mänguidee
- DONE - Esmane tööjaotus
- //Lükkub edasi 'Analüüsi' faasi// Valida välja õiged arendusmustrid (materjal: Game programming patterns)
- Töötada läbi erinevad mustrid
- Leida plusse ja miinuseid
- Valida sobivaimad mustrid
- Põhjendada valikuid
- DONE - Seadistada üles TFS
- DONE - Teha selgeks
- DONE - Kõik meeskonnaliikmed ühendada
- DONE - Õppejõud ühendada
Analüüs [01.11.2014]
- Rakenduse eesmärk
- Mida tavakasutaja sellega teha saab
- Problemaatilised kohad realiseerimisel
- Tööjaotus
- Nimekiri funktsionaalsusest - must have
- Nimekiri funktsionaalsusest - nice to have
Retsensioon[8.11.2014]
Koosolekud
I
Kõik kohal.
Rods v.0.0.1 Nimi tuleb arenduse käigus
2D - Pealtvaade, Unity, C#, TFS, MonoDevelop
Mänguidee:
- Mängu idee on teha rebastele selgeks kooli plaan ja üldine toimimine esimese semestri jooksul.
Baasfunktsionaalsus:
- Ringi liikumine
- Ülesannete lahendamine
- Maailmade(korruste) vahetamine
- Menüü, pausmenüü jne
- Punktiarvestus
- Achivments
- Auto salvestamine peale edukat sooritamist
Ained ja ülesanded:
- Java(Pöidla dialoog) - Nii, paar ülesannet.
- Füüsika(hahahaha) - Jukul on kahe kilone pomm, arvuta päikese mass.. eiei Jukul on kolme kilone pomm. Kas Juku ema oli brünett või blond? Panna haigelt raske ülesanne sinna vms.
- ITSPEA - Esimene viktoriin
- Matemaatiline analüüs - Kas käia kontsultatsioonis jne minigame'idega
- Makro - SKP arvutamise valem
- Sissejuhatus informaatikasse - Kes oli Turing
- Erialatutvustus - Vali välja IT firma.
Esmane tööjaotus
- Andmebaasid ja Unity - sõbraks - Sten 24.10
- Unity ja TFS + siis kõik liikmed TFSi - Oliver 24.10
- Arendusmustrid - Rain & Den - 24.10
Märksõnad, mis käisid läbi:
Kooli mäng , saad korruseid vahetada , siseneda klassidesse , lahendada ülesandeid , suitsetada , WC asukohad , söömine , pesemine , kapid , garderoob , akvaarium , lift , trepid , vending machine , küsimuse puhul saad pöörduda tuutor Tuxi poole, kes kooli peal ringi patseerib , Tux-mail ja ajaga tundidesse jõudmine , "Theres a cookie for you in the cafeteera" , "Theres a smart physics guy in the smoking area. Go find him!" , seda võib veel kasutada.
Arendusmustrid
Command(R)
Saab kasutada lugemaks kasutaja poolt sisestatut (nupuvajutused)
void InputHandler::handleInput() { if (isPressed(BUTTON_X)) jump(); else if (isPressed(BUTTON_Y)) fireGun(); else if (isPressed(BUTTON_A)) swapWeapon(); else if (isPressed(BUTTON_B)) lurchIneffectively(); }
Võimaldab lasta kasutajal muuta nuppude funktsiooni
- encapsulate a request in an object
- allows the parameterization of clients with different requests
- allows saving the requests in a queue
Undo and redo actions
http://sourcemaking.com/design_patterns/command/c-sharp-dot-net
Flyweight(R)
- hea kasutada graafika kujutamiseks kus on väga palju objekte, nagu näiteks mets, sest mets sisaldab sadu eraldiseisvaid osakesi (puid) ja terve metsa korraga kuvamine on liiga suur koormus graafikakaardile.
- andmed objektide kohta jagatakse kaheks: esimene osa on ühine kõigile.. näiteks puudele (tekstuur, geomeetria), teine osa käib iga puu kohta eraldi (jämedus, värv jne)
- kasutab enumeid
- kasutab switch/case
- mõeldud rohkem „heavy graphics“ mängude jaoks
http://en.wikipedia.org/wiki/Flyweight_pattern
Observer
- üks enimkasutatavaid mustreid
- achievement unlocked näide:
Kontrollime millal toimub meid huvitav sündmus: sillalt alla kukkumine. Selleks ei tuleks teha eraldi meetodit "unlockFalloffBridge()" vaid erinevad aspektid mängus väljendavad sündmusi.
Näiteks: meil on meetod mis tegeleb füüsikaga (keha kukkumine nt.) siis kui see meetod tuvastab keha kiire liikumise (kukkumise), saadab välja sellekohase teate (füüsika meetodit ei huvita, kas keegi loeb seda teadet või mitte): “Uh, I don’t know if anyone cares, but this thing just fell. Do with that as you will.”
Antud juhul võtab selle teate vastu achievement süsteem, mis kontrollib kas kukkuv keha oli peategelane ja kas see oli sild kust ta alla kukkus.
Siin näites ei pidanud füüsikaga tegelev kood achievementidega tegelema üldse, saatis ainult teate välja. Niimoodi on lihtne achievement süsteemi muuta või üldse eemaldada, ilma, et füüsika meetodit tuleks muuta. Selles näites on achievement süsteem "observer"
switch (event) { case EVENT_ENTITY_FELL: if (entity.isHero() && heroIsOnBridge_) { unlock(ACHIEVEMENT_FELL_OFF_BRIDGE);
Antud muster nõuab palju klasse
Muster on „heavyweight“
Lihtne ja töötab
Prototype(D)
Väga hea sarnaste objektide varieerimiseks.
Defineerid ühe alus objekti e. prototüübi ja varieerivatel objektidel delegeerid nad protüübini.
Hea koodi näide:
{ "name": "goblin grunt", "minHealth": 20, "maxHealth": 30, "resists": ["cold", "poison"], "weaknesses": ["fire", "light"] }
{ "name": "goblin wizard", "prototype": "goblin grunt", "spells": ["fire ball", "lightning bolt"] }
{ "name": "goblin archer", "prototype": "goblin grunt", "attacks": ["short bow"] }
Samas, kui alternatiiv(vale) oleks kaks viimast objekti nii defineerida:
{ "name": "goblin wizard", "minHealth": 20, "maxHealth": 30, "resists": ["cold", "poison"], "weaknesses": ["fire", "light"], "spells": ["fire ball", "lightning bolt"] }
{ "name": "goblin archer", "minHealth": 20, "maxHealth": 30, "resists": ["cold", "poison"], "weaknesses": ["fire", "light"], "attacks": ["short bow"] }
See the difference huh?
Singleton
Pointless.
Omab kahte põhilist eesmärki: omada teatud klassist ainult ühte eksemplari & globaalsed muutujad, millele saab kõikjalt ligi.
Mõlemat põhimõtet annab hõlpsasti asendada alternatiividega. Asendama peaks, sest Singeltonil on palju probleeme.
Ühte eksemplari saab tagada näiteks ühe booliga "käivitatud".
Vältimaks globaalseid muutujaid ja hoida ühe muutuja skoopi võimalikult väiksena saab kasutada mitmeid alternatiive, nt. get'ers jne.