Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Oppdatert ødelagt link
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 http://sokobano.de/wiki/index.php?title=Main_Page):  

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

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 har flyttet beveget seg og dyttet en boks mot venstre / østvest.

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

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

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

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

vunnet spillet

Implementasjon 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 to klasser; en klasse for å representere et felt (innholdet i) en rute på brettet, og en klasse spillklasse for brettet med ruter og ett 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).
  • . Disse skal være ordentlig innkapslet.
  • Spillet må kunne spilles via JavaFX-applikasjonen som spesifisert under.
  • Spillklassen må kunne initialiseres med en String på standard-formatet , som beskrevet i tabellen under.
  • Spillklassen Brett-klassen må ha en toString()-metode som skriver ut brettet i formatet vist i tabellen nedenfor.
  • Spillet må kunne spilles gjennom konsollen. Dvs. at en spilleren må kunne skrive instruksjoner i konsollen, som deretter utføres i spillet.

...

  • 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 brettetFor 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).
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.

JavaFX-applikasjon

Det er laget en JavaFX-applikasjon som i praksis gjør to ting: den tar inn tekstlig input fra brukeren og endrer tilstanden i spillklasse-objektet basert på dette, og den viser spillklassens toString()-metode i applikasjonsvinduet. For at applikasjonen skal være kjørbar med spillklassen, må følgende gjøres:

  • GameController, deklarer spillet ditt og initialiser det slik kommentarene i koden forklarer. 
  • I spillklassen, lag en metode void getInput(String in), som tar inn bruker-input (som kommer fra applikasjonen), og endrer tilstanden på spillet tilsvarende. Her kommer det altså inn posisjonen for neste trekk, som så skal bli utført. Formatet på strengen er valgfritt, men det er anbefalt å bruke standarden, som er a, s, d og w.
  • Når spillet er ferdig, skal spilleren få vite dette. GameController bruker spillklassens toString()-metode for å vise spillets tilstand. Oppdater denne metoden slik at den også gir beskjed om at spillet er over når dette skjer.

Du kan nå kjøre applikasjonen (Game.fxml > Run As > FXML Application) og teste spillet ditt.

Hjelp til kjøring av JavaFX og generelt om øvinger finner du i Hjelp til øvinger.

Vurdering

Oppgaven blir vurdert etter hvorvidt spillet kan

...

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

Eksempel

Eksempel på et fungerende spill (Samplelevels.level4) spilt gjennom konsollen (input er vist i grønt):

Image RemovedImage RemovedImage Removed