Versions Compared

Key

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

...

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.

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:

...

Det ligger fire testbrett du kan bruke i filen: objectstructures/Sokoban/SampleLevels.java. Ved å kalle Sokoban(SampleLevels.SAMPLE_LEVEL3) vil du opprette brettet vist i tabellen over.

Vurdering

Oppgaven blir vurdert etter hvorvidt spillet kan

...

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

Eksempel

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

JavaFX-app

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 (filene kommer snart):

Code Block
emfs sokoban
/games/
    FxmlApp.java                 @ git@github.com:hallvard/javafx/games/src/games/FxmlApp.java;
    FxmlBuilderFactory.java     @ git@github.com:hallvard/javafx/games/src/games/FxmlBuilderFactory.java;
    FxmlGame.java                @ git@github.com:hallvard/javafx/games/src/games/FxmlGame.java;
    sokoban/sokoban1/
            ISokoban.java    @ git@github.com:hallvard/javafx/games/src/games/sokoban/sokoban1/ISokoban.java;
            SokobanFX.java    @ git@github.com:hallvard/javafx/games/src/games/sokoban/sokoban1/SokobanFX.java;
            SokobanFX.fxml    @ git@github.com:hallvard/javafx/games/src/games/sokoban/sokoban1/SokobanFX.fxml;
            ;
        box_on_target16x16.png    @ git@github.com:hallvard/javafx/games/src/games/sokoban/box_on_target16x16.png;
        box_on_target8x8.png    @ git@github.com:hallvard/javafx/games/src/games/sokoban/box_on_target8x8.png;
        box16x16.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/box16x16.png;
        box8x8.png                @ git@github.com:hallvard/javafx/games/src/games/sokoban/box8x8.png;
        empty16x16.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/empty16x16.png;
        empty8x8.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/empty8x8.png;
        player_on_target16x16.png    @ git@github.com:hallvard/javafx/games/src/games/sokoban/player_on_target16x16.png;
        player_on_target8x8.png        @ git@github.com:hallvard/javafx/games/src/games/sokoban/player_on_target8x8.png;
        player16x16.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/player16x16.png;
        player8x8.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/player8x8.png;
        target16x16.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/target16x16.png;
        target8x8.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/target8x8.png;
        wall16x16.png            @ git@github.com:hallvard/javafx/games/src/games/sokoban/wall16x16.png;
        wall8x8.png                @ git@github.com:hallvard/javafx/games/src/games/sokoban/wall8x8.png;

 

Merk at du godt kan la være bruke å ISokoban-grensesnittet, men da må du omprogrammere appen, så den bruker andre metoder enn vi har forutsatt. Det er nok mer arbeid, men kanskje enda mer lærerikt?

...