DTU 
 

 

02362: Projekt i software-udvikling (f22)

Opgave V1: Projektforståelse, softwarearkitektur og opstart af RoboRally-softwareprojektet
 
 

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:

  1. Hvis I ikke har gjort det endnu, installer Java og IntelliJ på jeres computere. Java version skal være mindst Java1 15.

     

  2. 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).

     

  3. 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]).

     

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

     

  5. 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".

     

  6. 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().

     

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

     

Yderlige informationer

 

I kan finde mere information om JavaDoc [JD:HowTo].

 

 

Ekkart Kindler (), 31. januar 2022