Versions Compared

Key

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

...

Oppgaven handler om spillet Sokoban. 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. 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. 

Del 1 - Representasjon av felter (15 %)

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.

...

Sokoban forklares enklest ved demonastrasjon (for en nærmere forklaring, se http://sokobano.de/wiki/index.php?title=Main_Page):  

Brett som bildeBrett som tesktForklaring
Image Added
#######
#.@ # #
#$* $ #
#   $ #
# ..  #
#  *  #
#######

Utgansposisjon for et brett

Image Added
#######
#.  # #
#$* $ #
#  $@ #
# ..  #
#  *  #
#######

Spilleren har flyttet en

boks mot venstre / øst

Image Added
#######
#*$ # #
# @ $ #
#   $ #
# ..  #
#  *  #
#######

Spilleren har skjøvet en

boks mot en vegg og kan

ikke lenger flytte den

Image Added
#######
#*  # #
# *   #
#     #
# **@ #
#  *  #
#######

Spilleren har plassert alle

boksene på et mål og har

vunnet spillet

 

Implementering av Sokoban

Sokoban-oppgaven er en åpen oppgave, hvor man selv velger løsninger for hvordan spillet skal implementeres. Det stilles likevel følgende krav:

  • Programmet må bestå av minst tre klasser; en klasse for å representere et felt på brettet, en klasse for brettet med ruter og ett hovedprogram for interaksjon med spilleren
  • Brett-klassen må ha en toString()-metode som skriver ut brettet slik det er beskrevet under
TegnBetydning

'#'

vegg
'.'mål
'$'boks
'*'boks på mål
'@'spiller
'+'spiller på mål
' 'tomt felt

...