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 av et brett med vegger, tomme ruter, målruter, bokser og en spiller. Spilleren skal forsøke å flytte boksene til hver sine målrute. Spilleren har klart brettet når alle boksene står på en målrute.

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

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

Utgangsposisjon for et brett, med tomme ruter (' '), vegger ('#'), 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 beveget seg litt og så dyttet en boks mot venstre / vest.

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

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 boksene på hvert sitt mål og har klart brettet.

...

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

...

SokobanSampleLevels.java. Ved å kalle Sokoban(SampleLevels.SAMPLE_LEVEL3) vil du opprette brettet vist i tabellen over.

Vurdering

Oppgaven blir vurdert etter hvorvidt spillet kan

...

Konsollbasert IO er greit for å teste spillet, men det er kanskje artigere å lage en ordentlig app, med grafisk visning av rutenettet og bruk av piltastene for styring av spilleren. Vi har laget en JavaFX-basert app, som du kan laste ned og koble til dine Sokoban-klasser. App-koden forutsetter at spill-logikken er implementert i en klasse som implementerer ISokoban-grensesnittet (i pakken games.sokoban.sokoban1). Når brukeren starter spillet, så lages det en instans av spillklassen din i app-en, og det er denne som holder rede på spill-tilstanden, dvs. hvordan rutenettet ser ut, hvor spilleren er osv. Med bruk av grensesnitt, så gjøres det klart hvilke metoder appen trenger og som du må implementere.

Last først ned ISokoban-grensesnittet fra /games/sokoban/sokoban1/ISokoban.java, og programmer din spill-klasse slik at den implementerer dette grensesnittet. Så laster du ned app-klassene (og filene), så du kan prøve om det virker:

...