Hemsidan
Senaste nytt
Föreläsningar
Övningar
Laborationer
Instuderingsfrågor
Examination
Övriga resurser

Ansvarig:
Christer Carlsson

Uppdaterad:
2 Nov, 2015

CHALMERS - Data- och informationsteknik
Data- och informationsteknik


TDA550-Objektorienterad programvaruutveckling IT,fk




Informationen på dessa WWW-sidor hänför sig till
kurstillfället som går höstterminen 2015.



 
Laboration 1

Att använda ett ramverk för implementera Snake och liknande spel

I denna laboration skall vi, genom att använda oss av ett ramverk, studera hur vi snabbt kan konstruera nya applikationer, som annars skulle kräva betydligt längre tid att implementera.

Uppgiften är att skapa ett förströelsespel i Java genom att använda ett existerande ramverk (dvs ett paket av samarbetande klasser). Ramverket begränsar oss till spel som har följande egenskaper:

  • Spelplanen är en rektangulär matris av "spelobjekt", som kan ha olika utseende.

  • När spelet startar genomgår det en serie 'drag' även om användaren är passiv.

  • Användarens enda sätt att ändra förloppet av spelet är genom något kommando, som genereras av enkla knapptryckningar på tangentbordet.

Ett nytt spel kan enkelt implementeras med hjälp av ramverket genom att definiera en klass med de regler som gäller för det aktuella spelet. Exempel på detta är spelet Gold som finns implementerat i den bifogade koden för ramverket.

Börja genom att studera:

  • javadoc för paketet som innehåller ramverket.

  • Eclipse-projektet med källkod för paketet som innehåller ramverket.
    För att öppna projektet i Eclipse gör ni så här:

    • Spara den zippade filen till ditt konto
    • Packa upp filerna (dubbelklicka på GameFrameWork.ep.zip) och spara dem
    • Efter detta kan ni importera hela projektet i Eclipse genom
      File -> Import -> Existing Projects into Workspace.
    • Välj sedan GameFrameWork.ep (där ni sparat den) och klicka på "Ok".
    • Kryssa i "Copy projects into workspace"
    • Tryck "Finish".

Lite bakgrund till implementeringen av ramverket:

  • Bland annat används lyssnare och trådar.
    • Här är en kort förklaring till lyssnare av tangentbordet.
    • Vi kommer att behandla trådar senare i kursen. Om ni redan nu är intersserad av hur ramverket använder sig av parallella trådar, så finns lite information här.

  • Ramverket är utformat med några antaganden om plattformen och omgivningen som den exekveras i, t.ex. vad avser klasserna som implementerar den synliga bilden av spelet. Givet är en implementation som använder Swing. Att lägga till andra plattformar skulle dock inte vara alltför svårt.

Kom ihåg att det viktigaste för en programmerare är, att förstå hur man kan använda ett ramverk. I allmänhet är det inte nödvändigt att förstå hur ramverket är implementerat. För ramverk är är vanligt att ha en länk, Use, på API-sidorna. Dessa länkar är en bra startpunkt när man vill börja läsa in ett nytt ramverk eller en ny klass som ingår i ramverket (se javadoc för vårt ramverk).


Uppgifter:

Ni skall implementera ett spel, förslagsvis Snake, med användning av bifogat ramverk. Det är tillåtet att välja ett annat spel, men ni kan då, på grund av brister i ramverket, komma att råka ut för problem. I laboration 3 skall vi omarbeta ramverket för att åtgärda en del av dessa brister.

Väljer ni något annat spel än Snake skall ni därför först ha klartecken från en handledare.


Deluppgift 1: Första veckans inlämning
Förstå ramverket och visa att ni gör det

Sista inlämningsdag för deluppgift 1: måndag 9 nov kl 23:59

Den första veckans inlämningsuppgift är lite annorlunda, eftersom ni inte skall lämna in något körbart program. I stället skall ni lämna in svar på nedanstående frågor.

Den grundläggande uppgiften är att få en förståelse av det givna ramverket, så att ni kan förklara vad varje klass ansvarar för och hur de olika klasserna kommunicerar med varandra. Vidare är uppgiften, att planera hur ni löser resten av laborationen.

Först läser ni igenom paketets javadoc-dokumentation och dess kod, för att förstå hur allt hänger ihop. Detta är mycket viktigt, både för att lära sig Java (genom att läsa annans kod lär man sig mycket) och för att kunna ta ni skall kunna implementera ert eget spel. Fråga handledarna om ni kör fast.

En fil med svaren måste laddas in till Fire-systemet senast ovan angivna tidpunkt!! Svaren skall ligga i antingen i en .txt-fil eller en .pdf-fil.

Frågor att besvara:

  1. Vad är skillnaden på GoldModel och GameModel, och hur är de relaterade till varandra?
  2. Vilken metod utför själva ritandet av 'Gold coins' i spelet 'Gold game'?
  3. Vilken metod är det som anropar metoden som ritar ut 'Gold coins'?
  4. Vad är syftet med GameFactory och hur kan GameFactory utvidgas för att få med 'Snake game'? (Endast ett kort svar behövs.)
  5. Var återfinns beräkningen och kontrollen av de rörelser som 'Gold eaters' gör?
  6. Hur lagras ett spelbräde och i vilken klass?
  7. Beskriv arbetsflödet av programmet.
    Detta kan göras genom att skissa på hur kontrollen flödar genom olika klasser och metoder.

  8. Ge en plan för hur ni tänker fortsätta med deluppgift 2. Vilka klasser kommer ni att skriva och vad kan ni återanvända?

Ledtrådar:

  • Main.java är huvudklassen.
  • XxxView.java visar en grafisk presentation av spelets händelseförlopp.
  • XxxModel.java definierar spelets logik och och tar hand om utseende och känsla.
  • GameController.java tar hand om indata, uppdateringar etc.

Deluppgift 2: Andra veckans deluppgift
Implementera en modell för ett nytt spel

Sista inlämningsdag för deluppgift 2: torsdag 19 nov kl 23:59

Implementera en modell för Snake (eller något annant spel ni valt), som ärver egenskaperna från GameModel-klassen.

Tips och råd (för Snake)

  • Studera klassen GoldModel noga. Det kommer att vara till hjälp.
  • Skapa subklasser till GameTile för att få en snygg orm. Använd en speciell tile för huvudet.

  • Ormen har ett dynamiskt beteende, representera därför ormen med en dynamisk datastruktur! Men vad är lämpligast - List, Deque eller Queue? Titta i Javas API vilka operationer respektive datastruktur har innan ni gör ert val.

  • Ormen skall inte kunna backa.

  • Kontrollera att ormen inte krockar med sig själv.

  • Bara de delar av ormen som har förändrat sig behöver ritas ut.

  • Spelet kan avslutas på flera olika vis. Vilka? Förvissa er om att spelt avslutas korrekt för samtliga alternativ.

  • Använd javadoc för att dokumentera din kod. Se hur det är gjort i den givna koden.