DTU 
 

 

02362: Projekt i software-udvikling (f22)

Denne opgave skal fremme forståelsen af projektet (især begrebener fra RoboRally-spillet) og hvordan programmeringen af en robot med såkaldte kommandokort kan lade sig gøre.

 

Opgaven består i to dele: Den ene del er en afleveringsopgave (A1: 22. februar), som er at færdiggøre taksonomien af RoboRally-spillet fra opgaven V1 og videreudvikle den til en detaljeret (!) domænemodel, som indeholder alle begreber af RoboRally samt alle vigtige faser og aktioner af spillet. Den anden del er en visningsopgave (V2: 15. februar); den skal fremme forståelse af projektets opbgyning (MVC-princippet) og sammenhæng mellem viewet og controlleren. Vedr. softwaren skal denne opgave fortsætte med den software I fik udleveret med opgave opgaven V1.

 

Vi starter med at beskrive opgaven V2; derefter beskrives opgaven A1.

 

Opgave V2 (til 15. februar): Programmering: Controller & View
 
 

Opgaven er nedbrudt i enkle trin:

  1. Til opgaven skal i bruge koden som I fik udleveret med opgave V1. Nogle af de dele som er relevant til opgave V2, er markeret med kommentarer XXX: V2 eller TODO Assignment V2.

     

  2. Når et nyt spil startes i denne kode, bliver spillets programmeringsfase aktiveret, hvor hver spiller får nogle tilfældige kommandokort (på den nederste linje af kortfelterne). Og spillerne kan trække nogle af dem til de fem kortfelter på den øverste linje, som repræsenterer denne spillers robots program (register).

     

    Når alle spiller har programmeret deres robot, skal man kunne trykke på "Finish Programming".

     

    Men der vil ikke ske noget. Grunden til det er at knapperne "Finish Programming", "Execute Program" og "Execute Current Register" er stadigvæk tilknyttet til controllerens metode notImplemented().

     

    Som det første, skal I så sørge for at alle knapper i GUIen (view) bliver tilknyttet til de respektive metoder i GameController.

     

    Så burde det være sådan at, når spilleren trykker på "Finish Programming", knapperne "Execute Program" og "Execute Current Register" bliver aktiveret. Og når man så trykker på "Execute Program" bliver alle programmer af alle robotter eksekveret. Når man trykker "Execute Current Register" bliver kun den aktuelles robots aktuelle kort eksekveret; på denne måde kan man klikke sig trinvis igennem hele programmet. Og det anbefales at bruge denne trinvise eksekvering i starten.

     

    Når man trykker "Finish Programming" og "Execute Current Register" nu, så bliver der vist hvilket kort bliver eksvekveret; men selve kommandoer har ingen effekt. Grunden til det er at de metoder, som realiserer de forskellige kommandoer i GameController, ikke er implementeret endnu (de er markeret TODO Assignment V2). Dem skal I implementere i næste skridt.

     

  3. Implementerer de fire kommandoer som programmet støtter indtil videre: Move Forward, Fast Forward, Turn Left and Turn Right. Dertil skal i implementere de fire metoder i GameController som svarer til disse kommandoer (som sagt er de markeret med TODO Assignment V2). Bemærk at model-klasserne (især klasse Board) har en masse metoder som kan hjælpe med det, så at der ikke er en hel masse kode I skal skrive selv.

     

    Afprøv om jeres program virker nu.

     

  4. Implementere en test til hver af de fire kommandoer som programmet støtter indtil videre. Til det kan I bruge den eksisterende klasse GameControllerTest og implementere en test-metode til hver kommando (der fines i allerede en test til moveForward — dog i Java-kommentarer. Den kan I bruge).

     

    Eksekver alle test. Når alle disse test kører igennem, så er opgaven V1 og V2 klaret.

     

    I kan finde mere information om Testing med IntelliJ på JetBrains web sider: [IntelliJ: Testing].

Opgave A1 (til 22. februar): Projektforståelse: Taxonomie & domænemodel
 
Opgaven nedbrudt i enkle trin:
  1. Til den 22. februar (husk at det er altid kl. 12, hvis der ikke bliver sagt noget andet) skal I aflever en komplet taksonomi og en detaljeret domænemodel for spillet RoboRally, som fanger alle relevante begreber og aktiviteter. Det er relevant for at forstå hvad (WHAT) jeres software skal gøre.

     

    Informationen om RoboRally samt spillets regelsæt findes som PDF-fil: http://media.wizards.com/2017/rules/roborally_rules.pdf. Som udgangspunk burde I allerede have en liste med de vigtigste begreber fra opgave V1; og en del bliver også diskuteret under timen.

     

  2. Læs teksten systematisk (igen) og marker alle relevante ord. Klassificer dem som ting som bliver brugt til at repræsentere spillets aktuelle tilstand og dem som beskriver spillets aktioner. Typisk er den første slags begreb navneord (engelsk: nouns) og den anden slags begreb udsagnsord (engelsk: verb).

     

    Den første slags begreber med deres egenskaber og relationer kan man overføre til en domænemodel (repræsenteret som klassediagram). Den anden slag begreber udgør typisk softwarens use cases (som senere hen kan beskrives som aktivitetsdiagrammer). Det bliver også diskuteret i timen.

     

  3. Diskuter jeres begreber indbyrdes i grupperne, så at de dækker alle RoboRallys væsentlige begreber. Derefter skal i lave et domænemodel (gerne diskuter og tegn indbyrdes på en tavle eller på et stykke papir). Som inspiration kan I måske også kigge ind i softwaren, som I fik udleveret til opgave V1; klasserne i model-pakken burde jo også være relevante til RoboRally spillet (men det er jo kun begyndelsen).

     

    Aflever jeres taksonomi og jeres domænemodel som PDF-fil via DTU Learn.

 

Ekkart Kindler (), 7. februar 2022