...
Spillet Sudoku består av et delvis utfylt 9x9 brett av tall fra 1 til 9. Målet med spillet er å fylle brettet fulstendig ut fullstendig slik at det følger oppfyller visse regler. Reglene er: Det samme tallet kan kun opptre én gang i : 1. hver kolonne, 2. hver rad, og 3. hvert av de 3x3 store område man får dersom man deler opp brettet i 9 like, kvadratiske deler.
...
- Programmet må bestå av minst tre klasser; en klasse for å representere (innholdet i) en rute på brettet, en klasse for brettet med ruter og et hovedprogram for interaksjon med spilleren. De to første av disse må være ordentlig innkapslet.
- Brett-klassen må kunne initialiseres med en String på formatet beskrevet i lengre nede ned på siden.
Funsjonelle krav til spillet:
- Spillet må kunne spilles gjennom konsollen. Dvs. at en spilleren må kunne skrive instruksjoner i konsollen, som deretter utføres i spillet.
- Spillet skal ikke la spilleren endre på tallene som allerede var satt før spillet startet (som er en del av sudoku-problemet).
- Spillet skal la spilleren endre allerede utfylte ruterruter de allerede har satt selv.
- Spillet skal la spilleren sette inkonsistente/ulovlige verdier.
- Spiller skal vise hvilke tall som ikke kan endres.
- Spillet skal vise hvilke tall som er i konflikt.
...
Representasjon av ".....2..38.273.45....6..87.9.8..5367..6...1..4513..9.8.84..3....79.512.62..8....."
ser slik ut:
Code Block |
---|
+-------------+-------------+-------------+ 1 | . . . | . . (2) | . . (3) | 2 | (8) . (2) | (7) (3) . | (4) (5) . | 3 | . . . | (6) . . | (8) (7) . | +-------------+-------------+-------------+ 4 | (9) . (8) | . . (5) | (3) (6) (7) | 5 | . . (6) | . . . | (1) . . | 6 | (4) (5) (1) | (3) . . | (9) . (8) | +-------------+-------------+-------------+ 7 | . (8) (4) | . . (3) | . . . | 8 | . (7) (9) | . (5) (1) | (2) . (6) | 9 | (2) . . | (8) . . | . . . | +-------------+-------------+-------------+ a b c d e f g h i |
...
En mulig måte spilleren kan fylle ut brettet på er å oppgi trekk på formen <rad(0-98)><kollone(a0-i8)><verdi(.01-9)>. For eksempel vil "2f9259" sette ruten i kollone akolonne 2, rad 2 5 til 9. "2f25." vil sette den tilbake til tom. Merk at her har vi regnet med at brettet er 0-indeksert.
Beskrivelse av formatet på brett
Formatet er en streng av tall og punktum. Hvert tegn representerer innholdet i en rute. Rutene kommer venstre til høyre, top til bunn. Det er alltid 81 tegn i strengen.
...
Eksempelbrett
.....2..38.273.45....6..87.9.8..5367..6...1..4513..9.8.84..3....79.512.62..8.....
.68.257.3..........71..39..61.35.2...8.....4...3.64.95..76..58..........8.653.42.
.....59.4.8..9.6.5..6....3..3.7.145...8.4.7...742.6.9..6....3..8.1.6..7.3.98.....
...6...513....2..66...3..89..4.2.6...3.418.2...8.7.1..59..6...38..3....241...9...
...
- Nivå 0 (10%): Skrive ut brettet ved oppstart
- Nivå 1 (30%): Fylle ut ruter (med input fra brukeren) uten hensyn til regler.
- Nivå 2 (70%): Tillate endringer kun i originalt tomme ruter. (Tall satt av spilleren må kunne kunne endres i tillegg til tomme ruter.)
- Nivå 3 (100%): Markere inkonsistente tall (dvs. tallene som dukker opp men mer enn en gang i kollonesamme kolonne/rad/område).
Hvert nivå innbærer at all funksjonalitet i lavere nivåene fungerer som beskrevet.
...
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 din Sudoku-klasse. App-koden forutsetter at spill-logikken er implementert i en klasse som implementerer ISudoku-grensesnittet (i pakken games.sudoku.sudoku1). 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. hvilke brikker som er i hvilke ruter. Med bruk av grensesnitt, så gjøres det klart hvilke metoder appen trenger og som du må implementere.
Last først ned ISudoku-grensesnittet fra /games/sudoku/sudoku1/ISudoku.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:
...