Versions Compared

Key

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

Oppgaven handler om spillet Sokoban (prøv spillet her). Sokoban består  Sokoban består av et brett med målvegger, tomme ruter, målruter, bokser , vegger og en spiller. Spilleren skal forsøke å flytte alle boksene til et målhver sine målrute. Spilleren vinner spillet har klart brettet når alle boksene står på et målen målrute.

Sokoban forklares enklest ved demonstrasjon (for en nærmere forklaring, se her):  

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

Utgangsposisjon for et brett, med tomme ruter (' '), målruter ('.'), bokser ('$' og '*') og spilleren ('@'). En boks som står på en tom rute er rød ('$'), en boks på en målrute er grønn ('*').

#######
#. # #
#$* $ #
#  $@ #
# ..  #
#  *  #
#######

Spilleren har flyttet en boks mot venstre / østvest.

#######
#*$ # #
# @ $ #
#   $ #
# ..  #
#  *  #
#######

Spilleren har skjøvet en boks mot en vegg og kan ikke lenger flytte den, så spillet er låst og tapt (ihvertfall uten angre-mulighet).

#######
#* # #
# * #
#   #
# **@ #
#  *  #
#######

Spilleren har plassert alle boksene på et hvert sitt mål og har vunnet spilletklart brettet.

Implementasjon av Sokoban

...

  • Programmet må bestå av minst tre klasser; en klasse for å representere et felt (innholdet i) en rute på brettet, en klasse for brettet med ruter og ett et hovedprogram for interaksjon med spilleren.
  • Brett-klassen må kunne ta inn et vilkårlig brett som en array av strenger (String[], se format i brettene oppgitt i Java-filen under).
  • Brett-klassen må ha en toString()-metode som skriver ut brettet i formatet vist i tabellen nedenforDe to første av disse må være ordentlig innkapslet.
  • Spillet må kunne spilles gjennom konsollen. Dvs. at en spilleren må kunne skrive instruksjoner i konsollen, som deretter utføres i spillet.

...

  • .
  • Brett-klassen må kunne initialiseres med en String på standard-formatet , som beskrevet i tabellen under.
  • Brett-klassen må ha en toString()-metode som returnerer en String på samme format som brettet initialiseres med.

Standard-formatet

TegnBetydningUtskrift

'#'

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

...

  • I representasjonen av brettet kan det være lurt å skille mellom de faste (tomme ruter, målruter og vegger ++) og de bevelige (spilleren ++flyttbare (bokser og spiller) delene av brettet.
  • For interaksjon med spilleren er det lurt å bruke en Scanner.
  • Det er vanlig å bevege en spiller med tastene a, s, d og w, som representerer for henholdsvis venstre (vest), ned (sør), høyre (øst) og opp (nord).

...

Hvert nivå innbærer at all funksjonalitet i lavere nivåene under fungerer som beskrevet.

Eksempel

...