...
Oppgaven handler om spillet Sokoban. Sokoban består av et brett som inneholder mål, bokser, vegger og en spiller. Spilleren skal forsøke å flytte alle boksene til et mål. Spilleren vinner spillet når alle boksene står på et mål.
Oppgaven omfatter tre klasser, Cell, Sokoban og SokobanProgram. Cell-klassen representer hvert enkelt felt på brettet og dekkes av del 1. Del 2 omfatter Sokoban-klassen, som kapsler inn brettet og har metoder for å utføre trekk og sjekke om spillet er avsluttet. Begge disse dele har har JExercise-tester. SokobanProgram-klassen lages i del 3 og håndterer tekstbasert interaksjon og bruker Sokoban-klassen. Her skal spilleren taste inn ønsket trekk etter tur helt til man har vunnet eller gir opp.
Del 1 - Representasjon av felter (15 %)
Denne klassen er en hjelpeklasse for å holde styr på verdien til hvert enkelt felt på brettet.
Tilstanden til en Cell er et tegn, e.g. ’#’ for vegg eller ’+’ for spiller, samt posisjon på brettet, angitt som x- og y- koordinater.
...
Sokoban forklares enklest ved demonastrasjon (for en nærmere forklaring, se http://sokobano.de/wiki/index.php?title=Main_Page):
Brett som bilde | Brett som teskt | Forklaring |
---|---|---|
####### #.@ # # #$* $ # # $ # # .. # # * # ####### | Utgansposisjon for et brett | |
####### #. # # #$* $ # # $@ # # .. # # * # ####### | Spilleren har flyttet en boks mot venstre / øst | |
####### #*$ # # # @ $ # # $ # # .. # # * # ####### | Spilleren har skjøvet en boks mot en vegg og kan ikke lenger flytte den | |
####### #* # # # * # # # # **@ # # * # ####### | Spilleren har plassert alle boksene på et mål og har vunnet spillet |
Implementering 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 klasser; en klasse for å representere et felt på brettet, en klasse for brettet med ruter og ett hovedprogram for interaksjon med spilleren
- Brett-klassen må ha en toString()-metode som skriver ut brettet slik det er beskrevet under
Tegn | Betydning |
---|---|
'#' | vegg |
'.' | mål |
'$' | boks |
'*' | boks på mål |
'@' | spiller |
'+' | spiller på mål |
' ' | tomt felt |
...