Meeskond:Rods

From ICO wiki
Jump to navigationJump to search

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

Loeme mustreid ja kirjutame kokkuvõtteid, et teaksime, mida oma mängus kasutada.

Mustrid on võetud leheküljelt: www.gameprogrammingpatterns.com

Mustri nime taga olev täht viitab meeskonna liikmele, kes seda mustrit luges ja kokkuvõtet kirjutas.

Tuntud mustrid

Siin on välja toodud põhilised mustrid raamatust "Design Patterns: Elements of Reusable Object-Oriented Software" - by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.

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(R)

- ü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(D)

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.

State(D)