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

Ansvarig:
Christer Carlsson

Uppdaterad:
14 Dec, 2012

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 2012.



 
Laboration 1

Att använda ett ramverk för Snake, Tetris och liknande

I den här laborationen skall vi, genom att flitigt använda oss av ramverk, studera hur vi snabbt kan bygga upp applikationer, som annars skulle kunna kräva en lång tid att göra.

Uppgiften är att skapa förströelsespel i Java, t.ex. Snake och Tetris. Vi 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 utveckligen av spelet är genom något kommando, som genereras av enkla knapptryckningar på tangentbordet.

Utformningen av applikationer inom de beskrivna ramarna, stöds av ett ramverk för denna typ av spel, dvs ett paket av samarbetande klasser. Ett nytt spel kan lätt implementeras genom att definiera en klass med reglerna för det angivna spelet. Utformning och implementering av ramverket är ett icke-trivialt arbete, varför ni skall få ett paket att starta med.

Börja genom att studera:

  • javadoc för paketet med tangentstyrda spel.
  • Eclipse-projektet med källkod för paketet med tangentstyrda spel. För att öppna projektet i Eclipse gör du så här:
    • Spara den zippade filen till ditt konto
    • Packa upp filerna (dubbelklicka på GameFrameWork.ep.zip) och spara dem
    • Efter detta kan du importera hela projektet i Eclipse genom
      File -> Import -> Existing Projects into Workspace.
    • Välj sedan GameFrameWork.ep (där du sparat den) och klicka på "Ok".
    • Kryssa i "Copy projects into workspace"
    • Tryck "Finish".
  • ett enkelt (men tråkigt!) exempel Här finns också ett exempel på hur snake-spelet kan se ut.

Lite bakgrund till implementeringen av paketet:

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 du redan nu är intersserad av hur spelramverket använder sig av parallella trådar, så finns lite information här.

Kom ihåg att det viktigaste för en programmerare är, att förstå hur man kan använda ramverket. Numera är det vanligt att en länk, how to use, finns på API-sidorna, som är en bra startpunkt, när man vill börja läsa in en ny klass eller ett nytt ramverk. I allmänhet är det inte nödvändigt att förstå hur den är implementerad.

Det paket vi skall använda, är utformat med ett litet antal antaganden om plattformen och omgivningen som den exekveras i, t.ex. klasserna som implementerar den synliga bilden av spelet. Givet är en implementation som använder Swing. Att lägga till andra plattformar skulle inte vara alltför svårt.


Uppgifter:


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

Sista inlämningsdag för deluppgift 1: tisdag 6 nov kl 22.00

Den första veckans inlämningsuppgift är lite annorlunda mot vad alla andra inlämningar kommer att vara. Du behöver inte lämna något körbart program. I stället skall du lämna in svar på nedanstående frågor, i form av en enkel textfil.

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

Först läser du 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 (läsa annans kod lär man sig mycket av) och för att kunna ta fram ditt eget spel. Fråga handledarna om du kör fast.

En fil med svaren måste laddas in till Fire-systemet senast ovan angivna tidpunkt!! Svaren skall ligga i en fil med ändelsen .txt 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 klass utför själva ritandet av 'Gold coins' i spelet 'Gold game' ?
  3. Vilken klass är det som anropar för detta ritande?
  4. Vad är syftet med GameFactory och hur kan den utvidgas för att få med Snake game? ( Endast ett kort svar behövs.)
  5. Var återfinns beräkningen och kontrollen av 'gold eaters' rörelser ?
  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 du tänker fortsätta med deluppgift 2. Vilka klasser kommer du att skriva och vad kan du återanvända.

Ledtrådar:

  • Main.java är huvudklassen.
  • XxxView.java visar de olika aspekterna av spelet.
  • XxxModel.java utformar spelet och tar hand om utseende och känsla.
  • GameController.java tar hand om indata, uppdateringar etc.

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

Sista inlämningsdag för deluppgift 2: torsdag 15 nov kl 22.00

Implementera en ny modell, Snake, som ärver egenskaperna från GameModel-klassen. Det kommer säkert att hjälpa att titta på det andra exemplet, GoldModel-klassen. (Om du vill får du göra några nya subklasser till GameTile, så att spelet ser snyggare ut. )


Valfri deluppgift (avancerad):
Gör om ditt spel som en Applet

Klassen AppletGame behöver troligen inte mer än c:a 10 rader kod.

Uppgiften är helt frivillig, men du kan prata med någon handledare om programmet och evetuellt skicka in det (via ordinarie email) till honom för kommentarer.