Laboration 8
Sista uppgiften på kursen går ut på att göra ett Tower Defence spel (väldig förenklat). Finns massor med exempel på nätet t.ex. http://www.flasharcade.com/tower-defence-games/play/azgard-tower-defense.html
Vår spel blir inte lika snyggt grafiskt (understatement), en skärmdump finns i filen screenshot.png
(frivilligt är att snygga till grafiken så mycket det går).
Beskrivning av spelet
Programmet skall låta ett “monster” följa en viss väg från ena sidan av fönstret till andra. Längs vägen kan man placera ett valfritt antal torn. Tornen har viss räckvidd och viss “eldkraft”. När monstret på sin vandring kommer inom räckhåll för något torn börjar tornet skjuta på monstret. Tornens sannolikhet för träff är 50%. Monstret startar med en viss positiv “hälsa”. Vartefter det träffas av tornen minskar hälsan (beroende på eldkraft). När monstrets hälsa är 0 dör det.
-
Om monstret lyckas ta sig hela vägen (förbi alla torn) utan att dö så förlorar spelaren (d.v.s. tornen var på fel plats).
-
Om monstret dör innan det kommer fram har spelaren vunnit.
Det är väldigt svårt att få med alla detaljer, om något är oklart får ni fråga.
Tekniska krav:
-
Programmet skall ha samma struktur som
GUIPig
och LCR
med GUI (modell för sig, GUI som anropar top-level).
-
Ingen in- eller utmatning, vi hårdkodar in väg, torn, etc.
-
Det skall finnas möjlighet till minst två olika väger som en monster kan ta sig till målet, minst två torn och ett monster (man får alltså ändra i koden och köra på nytt).
-
Monstret påbörjar sin vandring direkt då spelet börjar.
-
Det finns inga krav på att projektiler skall visas.
-
Speletplanen är uppbygd utifrån positioner. En position anger rad och kolumn. Alla objekt i spelet har en viss position (vid given tidpunkt).
-
Man skall kunna avläsa monstrets hälsa
-
Alla tester skall finnas i filen
Test.java
se vidare nedan.
-
För metoder (i modellen) som har förvillkor skall dessa anges. Metoderna skall hantera indata som bryter mot förvillkoren.
-
Då monstret dör avbryts spelet direkt.
-
Skapa ett interface till top-level-klassen. Låt alla variabler i GUI:et vara av interface-typen (gör detta sist).
Tips:
-
Utveckla på samma sätt som LCR spelet, först bottom-up, hitta alla klasser koda dessa, testa (i klassen
Test
)
-
Därefter, top-down, utgå från GUI. Vilka metoder behövs i top-level klassen, o.s.v.
-
Använd Manhattan distance för avstånd, se http://en.wikipedia.org/wiki/Taxicab_geometry
-
Tid simuleras m.h.a. diskreta tidssteg “tick”:s. Vid varje tick uppdateras modellen.
-
Använd en
java.swing.Timer()
för att driva “tick”:sen.
-
Det bör räcka med ca 4 klasser i modellen.