Versions Compared

Key

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

...

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:

...