Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 SokobanProgramCell-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:

TegnBetydning

'#'

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:

...