onsdag den 21. april 2010
SCRUM-meeting
Næste møde forventer vi at afslutte vores kasseproblem og revurdere vores klassediagram i forhold til vores fornyede kode.
Omstrukturering i koden
Keep it real
Group 3
Godmode on (kodeproblemer og løsninger)
Vi har hermed fundet ud af, at de tilfældigt generede kasser kan skabe gameplaymæssige problemer, idet playeren kan blive fanget imellem kasserne når der påbegyndes en ny level. Samtidigt bliver vores level-design ikke særlig spændende hvis de tilfældigt oprettede kasser oprettes oven i hinanden i en stor klump.
c.beginFill(Math.random()*0xFFFFFF);
xLevelArray[0] = Math.random()*50+14
yLevelArray[0] = Math.random()*50+15
widthLevelArray[0] = Math.random()*70+30
heightLevelArray[0] = Math.random()*70+30
for (var i:int = 0; i < int =" 0;"> xLevelArray[l] && xLevelArray[i] <> yLevelArray[l] && yLevelArray[i] < yLevelArray[l]+heightLevelArray[l]){yLevelArray[i] = yLevelArray[l] + heightLevelArray[l] + 20}
}
c.drawRect(xLevelArray[i], yLevelArray[i], widthLevelArray[i], heightLevelArray[i])
}
Når man rammer et hjørne har tests endvidere vist, at kassen ikke helt ved hvor den skal sende playeren ud, og ender derfor med at lade playeren gå igennem kassen.
Let there be light(GUI)
GUI
Vi er nu i gang med kodningen og indtil videre har vi formået at skabe første udkast til vores level- og player-klasse.
I vores første iteration vil vi som sagt gerne have styr på vores player- og level-klasse. Vi vil gerne strukturere vores level-design, således at level spawner en player samtidigt med at den spawner banens fysiske objekter i form af kasser, genereret tilfældigt på banen. For at være tilfredse med vores første iteration, vil vi gerne have implementeret colission detection mellem player og kasserne, samt scenens rammer. Det kodemæssige perspektiv blev taget op til diskussion i gruppen. Det matematiske aspekt ved udregningen af colission detection viste sig at være en stor mundfuld. For at påbegynde udregningen tager vi udgangspunkt i scenen som et koordinatsystem, med en x og y akse. Kassens afgrænsning kan dermed beskrives som ses på figuren på billedet:
Hvis h og w er henholdsvis højden og bredden på en tilfældig kasse, kan hjørnerne koordinatsæt findes som vist på tegningen. Playerens midtpunkt har vi som Px, Py, og han har samtidigt radius 10 i koden som vi kalder Pr. Med disse informationer kan der opsættes if-sætninger der tjekker om spillerens koordinater kollidere med kassen koordinater. Og hvis dette er tilfældet bliver spilleren skubbet ud til kanten af kassen. Vi forestiller os ligeledes at kassen skal deles op i 4 for at spillet ved hvilken side spilleren skal rykkes ud til.
mandag den 19. april 2010
Klassediagram
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZ4F6nRcAOhbMARHn0gmeKW4k3KPmefH3di7a-zRlOqTRln5ylRZRikHrt7_MEKQlW7h6nWDjuriINUlSboi_KAuWJNiKvBXWa3dyIrPKmbUAr3MLvy9A1PAbQjmh2bB6DZJecQyP3KpB/s400/Klassediagram+1+iteration.jpg)
I vores klassediagram har vi indsat en Level-klasse. Under level-klassen har vi indsat variablen +ZombieAmount:Number. Det er meningen et denne variabel skal bestemme hvor mange zombier der er i banen, og dermed ligeledes at der kommer flere zombier jo højere level spilleren er i. Ydermere er ideen at vores level-klasse skal genere tilfældige baner i spillet hver gang der skiftes level. Dette har vi implementeret i vores klassediagram under disse variabler:
public var xLevelArray:Array;
public var yLevelArray:Array;
public var widthLevelArray:Array;
public var heightLevelArray:Array
Ideen med dette er at vi vil oprette 4 arrays der hver især indeholder et parameter for drawrect funktionen. Level-klassen henter så nogle tilfældige værdier fra hvert array, og drawmap tegner så ti tilfældige kasser derudfra, som så udgør banen.
Anden klasse i vores klassediagram er vores Player-klasse, herunder har vi valgt at indsætte følgende variabler:
-xCoordinate:Number
-yCoordinate:Number
+LifeCount:Number
+Name:string
+PlayerDeath()
Og disse funktioner:
+Move()
+Shoot()
Vi forestiller os herudfra at playerklassen skal indeholde styrefunktioner, i forhold til at playeren skal kunne bevæge sig, samt skyde(+Move() og +Shoot()). Derudover indeholder playeren også en LifeCount funktion(+LifeCount:Number), som holder styr på hvor mange liv playeren har tilbage, hertil forestiller vi os også funktionen PlayerDeath( +PlayerDeath()) der skal sørge for at playeren dør når han ikke har flere liv tilbage. Name funktionen(+Name:string) tænker vi skal gøre det muligt at brugeren kan give sin player et navn.
Den sidste klasse i vores klassediagram er Controller-klassen, der består af disse variabler og funktioner:
-_forward:Boolean
-_back:Boolean
-_left:Boolean
-_right:Boolean
+keyReleased()
+keyPressed()
+enterFrame()
Denne klasse er bygget op ud fra det princip at der er nogle Booleans, som bliver sat til true når der trykkes på en knap og så længe denne knap holdes inde. enterFrame() tjekker hele tiden om der trykkes på noget. Dette administreres af funktionerne keyPressed() og keyReleased(), der sørger for de rigtige værdier på vores booleans og dermed sikrer den rigtige bevægelse.
Sammenhængen mellem klasserne er som angivet på klassediagrammet. Controller-klassen står for at fortælle Player-klassen hvilke x- og y-koordinater spilleren skal have i hvert frame.
Level sørger for at få Player ind på scenen.
torsdag den 15. april 2010
Domain model
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPJDNNYbDQZWr9bs_yM_IznJXhzX09DbydbSl33AZsRBrIwg_jqbgrdgMVWVnlstWEqb6JNftIaNDiQ_nFoEEnOsLjIoZP_0M13kqZ18rBhiQ-OeGfGVtDOecrHgne_FXQmeEITEGjsLAD/s400/Domain+model.jpg)
mandag den 12. april 2010
Genesis
Der er endvidere 3 forskellige powerups, hvor vi tænker henholdsvis momentær udødelighed, point og bedre våben.
Spillet indeholder levels, der slutter når alle zombierne er døde. Næste level starter derefter med flere zombier end den foregående.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpRrr5Sj3KGCKI2PGPwh1xU9TjmbV5OtMwWaOjsblVzDXWktoMA_6BC3Ki6qXqijKQlHiGVYWhq_lx06MSsRufYok4UhFlHz_dzaX9BqohfgOf0WzNkQmNjPfhcdfXmcoz7Yj-k7AYk2R/s400/Use+case+1+uden+kode.jpg)
Opgavevalg
Grunden til dette valg er, at denne opgave lægger mest op til en kreativ proces, idet opgavebeskrivelsen er mindre fastlåst end de to andre. Vi påbegynder nu inceptionsfacen... so stay tuned for more action! Keep it real!
Gruppen består af:
Anders Lassen
Matti Bugge
Klaus Wrensted Jensen
Martin Bach Kristensen