Meeskond "Cool"
Projekti sisu
Projekti sisuks on meeskonnatöö tulemusena tekitada Xonix-i kloon, mis täidab vähemalt kodutöö juhendis märgitud miinimumnõudeid. 90ndate keskpaigas populaarsest mängust "Sexonix" inspireerituna tegime "Antisexonixi". Nimelt ei tule ala "puhtaks lõigates" nähtavale poolpaljad tibid, vaid koledad pildid on taustaks mängu alguses ja mängija peab võitmiseks rõvedused kinni katma:)
Liikmete kontaktid
Ivo Lõhmus - skype: dnepr650, mail: lohmus.ivo@gmail.com, 53436974
Indrek Kahu - skype: indrek.kahu, mail: indrek.kahu@mail.ee, 58150435
Tanel Staub - skype: , mail: tanelst87@hot.ee, 5106554
Tööjaotus
Ivo - projektijuht ja programmeerija. Meeskonnatöö koordineerimine, TF (Codeplex) ülesseadmine, dokumentatsiooni koostamine (wiki), Xbox puldi hankimine testimiseks jms. Esimesest versioonist peaaegu töötava versiooni tegemine (uus lähenemine - liikuvate kastide asemel kastide olekut muutev mänguväli).
Tanel - programmeerija. Esimese versiooni tegemine, palju bugiparandusi, taustapildid, Xboxi puldi tugi, jõudlusprobleemi lahendamine
Indrek - programmeerija. Punktiarvestus, levelid, elud, bugiparandused
Töökorraldus
Kuna kõik tiimi liikmed asuvad geograafiliselt eri linnades, siis vahepealseid kohtumisi enne esitamist ei toimu. Jooksvaks suhtluseks tekitasime skype grupi.
Algne plaan oli hoida koodi "kuskil FTPs" kuna korraga ilmselt arendust ei toimu. Koodi mugavaks jagamiseks ja versioonihalduseks valisime siiski VS Team Foundationi ja Codeplexi hostingukeskkonna. Antud projekti raames kasutame seda keskkonda vaid koodi hoidmiseks - tööülesandeid, dokumentatsiooni jms hoiame antud wikilehel. Viide koodile
Projektiplaan
Esialgselt kokkulepitud tähtajad:
- Tiimi moodustamine: 17.10.2010
- "töötav prototüüp" (ilma kujunuduse, punktiarvestuse, leveliteta): 24.10.2010
- töötav lahendus (mäng töötab, levelid, punktiarvestus jms olemas, dokumentatsioon korras, kood silutud): 31.10.2010
- puhver 31.10.2010-4.10.2010
- projekti esitamine: 5.10.2010
Projekti vahekokkuvõte 27.10.2010:
- oleme algsest plaanist natuke maas. Kõige rohkem tööd on teinud Tanel - valminud on (praktikumis tehtud ussimängu põhjal esimene prototüüp, mis on "koleda koodiga" (ühte klassi kirjutatud kõik) ja ei oska arvestada mahalõigatud osa. Pall põrkab, "lõikaja" joonistab saba ja palli põrkumine lõigatava joonega tuvastatakse. Suurimaks probleemiks on mahalõigatud ala arvestamine. Meie lahenduses ei ole hetkel mängu tausta jagatud kastideks/piksliteks - seega on üpris keeruline alasid arvutada. Teoorias vist saaks "sabajälje" osad eraldi vektoritena salvestada, peale mahalõikamist nendest vektoritest ehk ala kokku panna ja lisada need vektorid samasse massiivi, kus välisseinad.... Aga proovime siiski tausta jagada maatriksiks:)
- algsest projektiplaanist mahajäämine ei ole veel sisuliselt kriitiline, kuna meil on piisavalt puhvrit. Seoses muude, suurema prioriteediga projektidega (iskiklik elu, kohustused tööandja ees jne) projekt saanud liiga vähe tähelepanu, ent peagi see muutub:
- Indrekul on alates 1.11.2010 puhkus ja antud kodutöö saab endale väga kõrge prioriteedi.
- Ivo võtab 3.11-4-11.2010 töölt õppepuhkust, enamjaolt antud kodutöös oma eksistentsi õigustamiseks.
- Tanelil tundub niigi sujuvat :)
Projekti vahekokkuvõte 31.10.2010:
- olulised edasiminekud. Valminud on esimene töötav ja mängitav (kuid bugine ja aeglane) versioon. Mahajäämus sisuliselt tasatehtud :) Kõige häirivam probleem on aeglus ja kurja juureks on äralõigatud ala "floodfill". ;eetod onSees on väga ressursinõudlik (foreach tsükliga käib listi läbi ja kontrollib kas punkt on seal sees. Rekursiivne meetod vallutatud kutsub seda ka kohutavalt palju välja. Selle tulemusena on ala "vallutamise" lõpus ca sekundiline viide ja arvuti CPU kasutus 50% kanti:)
Projekti vahekokkuvõte 03.11.2010:
- Mäng valmis. Tanel lahendas jõudlusprobleemi - tekitas uue staatuse "ajutine" ja nüüd märgitakse äralõigatud ala kõigepealt ajutiseks. Nii ei küsita koordinaadi sisaldumist listist vaid otse mänguväljalt ruudu seisu. Indrek on lisanud levelid, punktid ja elud. Jäänud on wiki lehe uuendamine. Leppisime kokku, et kohtume 5.11.2010 12:00 ITK ruumides - vaatame koos üle kommentaarid, wiki lehe ja testime Xboxi puldi tuge.
Mängu ülesehitus, mõisted, klassid
Xonixi mängu põhimõtet ei ole ilmselt vajalik lahti kirjeldada. Seega keskendume meie xonixi-klooni lahenduse kirjeldamisele:
Mänguväli koosneb 10x10 pikslilistest ruudukestest. Vastavalt vajadusele muudetakse ruudukese olekut (ja värvi). Koodis kasutatavad mõisted:
- mänguväli - taustamaatriks ehk ruudustik
- koordinaat - taustaaatriksi ruudu asukoht
- hea pall - mängija poolt juhitav "lõikaja"
- saba - joon, mille jätab hea palli liigutamine mänguväljal
- serv - ala, mis on mänguvälja servas. heale pallile turvaline asukoht
- vallutatud - ala, mille hea pall on mänguväljalt edukalt "välja lõiganud"
Klassid:
- Game.cs Mängu peatsükkel.
- HalbPall.cs Hoiab halva palli koordinaati ja suunda
- kast.cs Loob kasti (taustamaatriksi ruudukese), muudab selle olekuid ja värve.
- Kastiolek.cs Hoiab kasti olekut (HEA_PALL, SABA, HALB_PALL, TAVALINE, VALLUTATUD, AJUTINE).
- Koordinaat.cs Hoiab ja liigutab kasti koordinaati
- Loogika.cs Mängu "äriloogika". Pallide liigutamine, alade arvestamine, kontrollid, levelid jne
- Manguvali.cs Hoiab ja joonistab taustamaatriksi.
Mängu loomisel tekkinud probleemid
Mõned probleemid, millega puutusime kokku projekti jooksul:
- Alustasime mängu tegemist praktikumi "snake" põhjal. Pallid said põrkama, ent ala mahalõikamist ei osanud teha.
- Randomi kasutamine mitme halva palli loomiseks oli alguses problemaatiline. Leveli alguses luuakse randomiga halvad pallid (algkoordinaat ja suund), ent samal loodi mitu palli ja kõik said samad väärtused. seega oli näiteks kolmandas levelis küll kolm palli, ent mängijale paistis ainult üks.
- Meetod onSees on väga ressursinõudlik. Kasutame seda kontrolliks kas punkt kuulub listi (kokkupõrked jne) - foreach tsükliga käiakse ükshaaval kogu list läbi. äriloogika võib seda väga palju välja kutsuda ja listis võib olla tuhandeid punkte.
Töökorralduslikud kokkulepped
- muutujate ja klasside nimesid nimetame nagu õppejõud praktikumides - Klassid suure algus tähega, muutujad "camelCase" jne.