...
Brett som bilde | Brett som tekst | Forklaring |
---|---|---|
####### | 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?
...