Med denne opgave skal I sætte jer ind i kursets projekt
RoboRally
og forstå hvordan større software er bygget op. Derudover skal i komme i gang
med jeres RoboRally-software.
Til det får I udleveret et lille eksempelprojekt,
som I skal sætte jer ind i; det skal I vise i det I kommenterer selve softwaren
(med JavaDoc-kommentarer [JD:HowTo]) og i det I
tilføjer lidt funktionalitet.
For at sætte jer ind i kursets projekt, skal i danne en første taksonomi med spillets væsentlige begreber.
Som udgangspunkt til det kan I bruge spillereglerne:
RoboRally Rules.
Bemærk at denne opgave er en V-opgave og ikke skal afleveres. Men resultaterne skal
vises til underviseren (i grupper) næste uge (8. februar) og dette eksempel vil
I bygge videre på i kursets forløb.
Her er de forskellige trin for at klare opgaven:
- Hvis I ikke har gjort det endnu, installer Java og IntelliJ på jeres computere.
Java version skal være mindst Java1 15.
- Download zip-filen med det forberedte IntelliJ Projektet (http://www2.compute.dtu.dk/courses/02362/f21/opgaver/V01/kode/roborally-1.1.1.zip)
til jeres computer og pak det up på jeres på computer et sted hvor I gerne vil have jeres
IntelliJ projekter til dette kursus.
Start IntelliJ og åbn dette projekt i IntelliJ med at åbne pom.xml
(med "File->Open..."). Også prøv at bygge og starte projektet (hovedklassen er
StartRoboRally i pakken dk.dtu.compute.se.pisd.roborally ).
- Inspicer dette projekt og find ud hvor de forskellige komponenter ligger henne og
hvordan de spiller sammen (dette bliver også diskuteret lidt under forelæsningen).
Dokumenter alle pakker, of de vigtigste klasser og (offentlige/
public )
metoder med JavaDoc-kommentarer (se pakke designpatterns for
eksempler på sådanne kommentarer og også [JD:HowTo]).
- Lige nu kan man starte og stoppe et spil og lukke applikationen. Og når man starter
et nyt spil, dukker der en spilleplade med spillernes brikker op, og der er også nogle
felter til programmeringskort og knapper. Men når man trykker på spillepladen eller
knapperne, sker der ikke noget. Desuden er der nederst en statuslinje, som viser
hvis spillers tur det er lige nu.
Det skal i gøre om. Når brugeren klikker på et et felt, hvor der ikke står en
spiller (eller lidt mere nøjagtig en spillers robot), så skal den aktuelle spillers
robot flytte sig til dette felt; og bagefter skal det være den næste spillers tur.
I statuslinjen kan man indtil videre kun se hvis spillers tur det er. I skal
også tilføje lidt mere information på statuslinjen: Der skal også vises hvor mange
træk der har været i spillet.
Nedenfor bliver der forklaret lidt mere hvordan I kan løse de der to opgaver
- Første trin er at den aktuelle spiller flytter sig, når brugeren klikker på et felt
og feltet er tomt. Den software, som I fik udleveret, er bygget op allerede på den
mode, at når spilleren klikker på et felt, så bliver der kaldt en metode
moveCurrentPlayerToSpace i GameController ; men denne
metode gør ikke noget. Her skal I helt præcist programmere det som der står
i TODO kommentarfeltet ved at bruge model-klasserne Board ,
Player og Space (det bliver diskuteret lidt mere i
undervisningstimen). For at gøre det, skal man forstå hvilke informationer disse
model-klasser tilbyder og hvordan disse informatiner kan ændres.
Når I har implementeret metoden moveCurrentPlayerToSpace , skal I afprøve
om jeres løsning virker efter hensigten. Hvis ikke, brug måske debuggeren for at finde fejlen.
Fortsæt først med at programmer næste trin når denne funktion virker efter hensigten.
Faktisk er der en test-klasse GameControllerTest i projektet, som også tjekker om metoden
moveCurrentPlayerToSpace er implementeret korrekt. Prøv også om denne test kører
igennem; højreklik på klassen GameControllerTest i IntelliJ og vælg "Run GameControllerTest".
- Tilføj en counter til jeres spil (klasse
Board ) med en
getter og setter (husk at kalde notifyChange() når counter så ændrer sig).
Hensigten med denne counter er, at den skal tælle antal træk, så at denne antal kan
vises i statuslinjen.
Når I har implementeret denne counter, så kan I udvide koden som I har programmeret i metoden
moveCurrentPlayerToSpace i GameController så at counter
bliver tælt op hver gang en spiller flytter sig.
Til sidst skal I ændre metode getStatusMessage() i klassen Board ,
så at den returnerer en String , som repærsenterer ikke bare spillerens navn, men også
antal af træk som der var i spillet (ved at bruge counter ).
Afprøv, om jeres spil virker nu efter efter hensigten. Hvis counteren er lidt bagud, tjek om
I har glemt at tilføje notifyChange() i metoden setCounter() .
- Sæt jer ind i spillet og dens regler
RoboRally.
I kan finde regelsættet til spillet som PDF-fil her:
RoboRally Rules (PDF).
Opstil en taksonomi med spillets væsentlige begreber. Det kan man for eksempel
gøre med at markere alle vigtige begreber og handlinger i regelsættet (enten på papir
eller i PDF) og så danne en liste med de ord. Det anbefales at separere begreber (navneord)
fra handlinger (udsagnsord).
|