You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »

I oppgaven skal man implemetere spillet Sudoku, som skal kunne spilles på konsollen.

Spillet Sukoku består av et delvis utfylt 9x9 brett av tall fra 1 til 9. Målet med spillet er å fylle brettet fulstendig ut slik at det følger visse regler. Reglene er: Det samme tallet kan kun opptre én gang i: 1. hver kolonne, 2. hver rad, og 3. hvert av 3x3 område man får dersom man deler opp brettet i 9 like, kvadratiske deler.

Implementsjon av Sudoku

Sudoku-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 (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 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 ruter.
  • 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.

Forslag til visuell representasjon av brett:

  +-------------+-------------+-------------+
1 |  .  (1)  .  |  .   .   .  |  .   .   .  | 
2 |  .   .   .  |  3   2   1  |  .   .   .  | 
3 |  .   1*  .  |  .   .   .  |  .   .   .  | 
  +-------------+-------------+-------------+
4 |  .   .   .  |  .   1*  .  |  .   .   .  | 
5 |  .   .   .  |  1*  .   .  |  .   .   1* | 
6 |  .   .   .  |  .   .   .  |  .   .   1* | 
  +-------------+-------------+-------------+
7 |  .   .   .  |  .   .   .  |  .   .   .  | 
8 |  .   .   .  |  .   .   .  |  1*  1*  .  | 
9 |  .   .   .  |  .   .   .  |  .   .   .  | 
  +-------------+-------------+-------------+
     a   b   c     d   e   f     g   h   i

Forklaring:

  • Tall i parenteser: tall som ikke kan endres
  • Tall uten parenteser: tall satt av spilleren
  • Punktum: tom rute
  • Asterisk/stjerne: tall satt av spilleren, i konflikt

Representasjon av ".....2..38.273.45....6..87.9.8..5367..6...1..4513..9.8.84..3....79.512.62..8.....":

  +-------------+-------------+-------------+
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

Forslag til brukergrensesnitt

En mulig måte spilleren kan fylle ut brettet på er å oppgi trekk på formen <rad(0-9)><kollone(a-i)><verdi(.0-9)>. For eksempel vil "2f9" sette ruten i kollone a, rad 2 til 9. "2f." vil sette den tilbake til tom.

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.

Eksempelproblemer

  • .....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...

Vurdering

Oppgaven blir vurdert etter hvorvidt spillet kan

  • 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 enn en gang i kollone/rad/område).

Hvert nivå innbærer at all funksjonalitet i lavere nivåene fungerer som beskrevet.

  • No labels