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 her):
Brett som bilde | Brett som teskt | Forklaring |
---|---|---|
####### | Utgangsposisjon for et brett, med tomme ruter (' '), 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 en boks mot venstre / østvest. | |
####### | 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 alle boksene på et hvert sitt mål og har vunnet spilletklart brettet. |
Implementasjon av Sokoban
...
- Programmet må bestå av minst tre klasser; en klasse for å representere et felt (innholdet i) en rute på brettet, en klasse for brettet med ruter og ett et 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).
- Brett-klassen må ha en toString()-metode som skriver ut brettet i formatet vist i tabellen nedenforDe to første av disse må være ordentlig innkapslet.
- Spillet må kunne spilles gjennom konsollen. Dvs. at en spilleren må kunne skrive instruksjoner i konsollen, som deretter utføres i spillet.
...
- .
- Brett-klassen må kunne initialiseres med en String på standard-formatet , som beskrevet i tabellen under.
- Brett-klassen må ha en toString()-metode som returnerer en String på samme format som brettet initialiseres med.
Standard-formatet
Tegn | Betydning | Utskrift |
---|---|---|
'#' | 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 brettet.
- For 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).
...
Hvert nivå innbærer at all funksjonalitet i lavere nivåene under fungerer som beskrevet.
Eksempel
...