...
Excerpt |
---|
I oppgaven skal man lage en Sudoku-klasse som holder representasjon, logikk og funksjonalitet for å spille tekstbasert sudoku. |
I denne oppgaven skal du implementere spillet sudoku. Du vil lage en klasse Sudoku som innkapsler brettet og har metoder for å fylle det ut og sjekke gyldigheten til de forskjellige områdene. Du vil også implementere SudokuUI som lar en spille tekstbasert sudoku.
Del 1 - Representasjon av brett
Tilstanden Sudoku-objektet holder på består av et 9x9-brett. Hver rute kan være tom, eller ha et tall 1-9 i seg. Det må også holdes styr på om tallet i ruten er en del av problemet eller om den kan fylles ut / endres av spilleren.
KlassenSudoku må ha følgende metoder:
- Sudoku(String problem):
Konstruktør. Tar inn ett problem på formatet beskrevet legre nede på siden, og fyller ut brettet med problemet. - boolean playerSetCell(int x, int y, int value):
Hvis ruten i x,y er en del av problemet, returner false. Ellers set ruten til value og returner true. - int getCell(int x, int y):
Returner verdien til ruten i x,y. - boolean isCellPartOfProblem(int x, int y):
Returner om ruten i x,y er en del av problemet.
Del 2 - Logikk som sjekker for ukonsistens i brettet
Utvid Sudoku-klassen med metodene under:
- boolean isColumnLegal(int col):
Returnerer false om et tall opptrer (minst) to ganger i kolonne col. Returnerer true ellers (selv om det er tome ruter i kollonen). col skal tilsvare x-verien til rutene. - boolean isRowLegal(int row):
Returnerer false om et tall opptrer (minst) to ganger i rad row. Returnerer true ellers (selv om det er tome ruter i raden). row skal tilsvare y-verien til rutene. - boolean isRegionLegal(int rx, int ry):
Returnerer false om et tall opptrer (minst) to ganger i 3x3 område i rx,ry. Returnerer true ellers (selv om det er tome ruter i området). rx skal tilsvare floor(x / 3) til rutene.
Del 3 - Fullt fungerende spill, med tekstlig interaksjon
Lag en SukokuProgram-klasse som lar en spille på konsollen. Programmet skal gjøre følgende:
- Ta inn en beskrivelse av et sudoku-problem. Formatet og eksempler finner du lenger ned på siden.
- Vise brettet. Forslag til representasjon finner du lenger nede på siden.
- La brukeren sette tall i ruter som ikke er en del av problemet, for å så gå tilbake til punkt 2.
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.
- 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å formatet beskrevet i lengre nede på siden.
Forslag til visuell representasjon av brett:
Code Block |
---|
+-------------+-------------+-------------+ 1 | . (1) 2 | . . . | . . . | 2 | . . . | . . . | . . . | 3 | . . . | . . . | . . . | +-------------+-------------+-------------+ 4 | . 1* . | . . . |? . . . ? | 5 | . . . | . . . |? 2* 2* . . ?| 6 | . . . | . . . |? . . . ? | +-------------+-------------+-------------+ ??? 7 | 2* . . | . 2* . | . . . | 8 | . . . | . . . | . . . | 9 | . . . | . . . | . . . | +-------------+-------------+-------------+ a b c d e f g h i ? ? |
Forklaring:
- Tall i parenteser: del av problemettall som ikke kan endres
- Tall uten parenteser: tall satt av spilleren
- Punktum: Tom tom rute
- Spørsmålstegn: Ulovlig kollone, rad eller område.
Beskrivelse av problem-format
Problemene starter med ordet "sudoku" for å så fortsette med null eller flere ord som beskriver verdien til ruter i brettet, på formatet <rad><kollonne><verdi>. Problemet ender med ordet "end".
Eksempelproblemer
...
- Asterisk/stjerne: tall satt av spilleren, i konflikt
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 (40%): 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.