...
Oppgaven handler om spillet Sokoban. Spillet går ut på at Sokoban består av et brett som inneholder mål, bokser, vegger og en spiller. Spilleren skal forsøke å flytte alle boksene til et mål. Spilleren vinner spillet når alle boksene står på et mål.
Oppgaven omfatter tre klasser, Cell, Sokoban og SokobanProgram. Cell-klassen representer hvert enkelt felt på brettet og dekkes av del 1. Del 2 omfatter Sokoban-klassen, som kapsler inn brettet og har metoder for å utføre trekk og sjekke om spillet er avsluttet. Dette presenteres i del 2. Begge disse dele har har JExercise-tester. SokobanProgram-klassen lages i del 3 og håndterer tekstbasert interaksjon og bruker Sokoban-klassen. Her skal spilleren taste inn ønsket trekk etter tur helt til man har vunnet eller gir opp.
...
Denne klassen er en hjelpeklasse for å holde styr på verdien til hvert enkelt felt på brettet.
Tilstanden til en Cell er et tegn, e.g. ’#’ for vegg eller ’+’ for spiller, samt posisjon på brettet, angitt som x- og y- koordinater.
Tegnene for de forskjellige felt-verdiene er:
Tegn | Betydning |
---|---|
'#' | vegg |
'.' | mål |
'$' | boks |
'*' | boks på mål |
'@' | spiller |
'+' | spiller på mål |
' ' | tomt felt |
Cell-klassen må ha følgende metoder:
- void RemoveBox() - fjerner en boks fra feltet.
- void RemovePlayer() –fjerner spilleren fra feltet.
- void AddPlayer() – setter spilleren på feltet.
- boolean isTarget() – returnerer hvorvidt feltet er et mål eller ikke.
- boolean isFree() - returnerer hvorvidt det er mulig å flytte en boks eller spilleren til feltet.
- boolean containsPlayer() - returnerer om spilleren står på feltet.
- boolean containsBox() - returnerer om en boks står på feltet.
- String toString() – skriver tegnet på feltet til en streng.
- int getX(), getY() - returnerer henholdsvis x- og y- koordinatene til feltet
Merk at man i alle metoder må sikre at det spillet er i gyldig tilstand før man og etter man utfører en operasjon. Ved behov kan også andre tilgangsmetoder legges til.
Implementer støtte for tilstand og metoder beskrevet over slik at JExercise-testkoden fullfører feilfritt. Testkoden finner du her:
...
Det finnes mange ulike brett av forskjellig størrelse. Tilstanden bør derfor lagre størrelsen på brettet, både høyde og bredde. Brettet utgjør et koordinatsystem med følgende innhold:
*###########* # # # ... ... # # *$$ $.$ # # $*+$ $*$$ # # *$$ $.$ # # ... . # # # *###########* |
Et trekk ned (sør) gir følgende brett | *###########* # # # ... ... # # *$$ $.$ # # $* $ $*$$ # # *@$ $.$ # # .*. . # # # *###########* |
Sokoban-klassen må ha følgende metoder:
...