Hallo alle zusammen,
Ich soll ein Sudoku-Spiel Programmieren. Es liest aus einem Beispiel.txt die Zahlen ein und soll dann den Spieler spielen lassen. Ich lass euch einfach den Code mal hier vielleicht sieht ja jemand meinen Fehler
TestSudoku.java
Sudoku.java
Wäre für jede Hilfe dankbar
Ich soll ein Sudoku-Spiel Programmieren. Es liest aus einem Beispiel.txt die Zahlen ein und soll dann den Spieler spielen lassen. Ich lass euch einfach den Code mal hier vielleicht sieht ja jemand meinen Fehler
Java:
import java.util.*;
import java.io.*;
public class TestSudoku {
public static void main(String[] args) throws IOException {
Sudoku test = new Sudoku("beispiel.txt");
Scanner in=new Scanner(System.in);
boolean solved=false;
do{
test.print();
System.out.println("Zeile:");
int tempzeile=in.nextInt();
byte zeile=(byte)tempzeile;
System.out.println("Spalte:");
int tempspalte=in.nextInt();
byte spalte=(byte)tempspalte;
System.out.println("Wert:");
int tempwert=in.nextInt();
byte wert= (byte)tempwert;
char pruef=test.setze(zeile,spalte,wert);
switch (pruef) {
case 'p' : System.out.println("Bitte Nur Zeilen oder Spalten zwischen 1 und 9!");
break;
case 'w' : System.out.println("Bitte nur Werte zwischen 1 und 9!");
break;
case 'z': System.out.println("Die Zeile enthält schon den eingegebenen wert!");
break;
case 's': System.out.println("Die Spalte enthält den eingegebenen Wert schon!");
break;
case 'f': System.out.println("Juhuu Gelöst!");solved=true;
break;
case 'l':
break;
default:
} // end of switch
System.out.println("Wollen sie ihre eingabe widerrufen?j für ja n für nein");
char widerruf=in.next().charAt(0);
if (widerruf=='j'){
test.widerrufen();
}//end of if
}while(!solved);
}//main
}//class
Java:
import java.util.*;
import java.io.*;
public class Sudoku {
private byte[][] spielfeld;
private byte temp;
private byte momentaneZeile;
private byte momentaneSpalte;
private byte momentanerWert;
// weitere Attribute !
public Sudoku(String file) throws IOException {
// Initialisierung des Spielfeldes
spielfeld = new byte[9][9];
// Laden der Werte aus der Datei file und ...
BufferedReader in = new BufferedReader(new FileReader(file));
String temp;
for(int i=0; i<9; i++) {
temp = in.readLine();
// ... speichern dieser Werte in das Spielfeld
for(int j=0; j<9; j++) {
if(temp.charAt(j) == '*') spielfeld[i][j] = 0;
else {
spielfeld[i][j] = (byte)(temp.charAt(j) - '0');
}
}
}
}
public void print(){
for (int i=0;i<9;i++) {
System.out.println();
if (i%3==0) {
System.out.println("\n --- --- ---");
}
for (int j=0;j<9 ;j++ ) {
if (j%3==0){
System.out.print("|");
} // end of if
if (j!=0&&j%8==0){
System.out.print("|");
}
if (spielfeld[i][j]==0){
System.out.print("*");
}
else {System.out.print(spielfeld [i][j]);}
} // end of for
} // end of for
System.out.println("\n --- --- ---");
}
public void widerrufen(){
spielfeld[momentaneZeile][momentaneSpalte]=temp;
}
public char setze(byte zeile, byte spalte, byte wert) {
if (spalte>9||spalte<1) {
return 'p';
} // end of if
if (zeile>9||zeile<1) {
return 'p';
} // end of if
if (wert>9||wert<1) {
return 'w';
} // end of if
if (zeileok(spielfeld,zeile,wert)) {
return 'z';
} // end of if
if (spalteok(spielfeld,spalte,wert)){
return 's';
}
if (quadrantok(spielfeld,zeile,spalte,wert)){
return 'q';
}
temp=spielfeld[zeile][spalte];
momentaneZeile=zeile;
momentaneSpalte=spalte;
momentanerWert=wert;
spielfeld[momentaneZeile][momentaneSpalte]=momentanerWert;
for (int i=0;i<9;i++){
for (int j=0;j<9;j++){
if(spielfeld [i][j]==0){
return 'l';
}
else{ return 'f';}
}
}
return 'f';
}
public boolean zeileok (byte [][]spiel,byte zeile,byte wert){
for (int i=0;i<spielfeld[zeile].length ;i++ ) {
if (spiel[zeile][i]==wert) {
return true;
} // end of if
} // end of for
return false;
}
public boolean spalteok(byte [][]spiel,byte spalte,byte wert){ //Überprüfung der Spalte
for(int i=0;i<spielfeld.length;i++){
if (spielfeld[i][spalte]==wert){
return true;
}
}
return false;
}
public boolean quadrantok(byte [][]spiel,byte zeile,byte spalte,byte wert){ //Überprüfung des quadranten
int blockZeile=(int)(zeile/3*3);
int blockSpalte=(int)(spalte/3*3);
for (int i=blockZeile;i<blockSpalte+3;i++){
for (int j=blockSpalte;j<blockZeile+3;j++){
if (spiel[i][j]==wert){
return true;
}
}
}
return false;
}
}
Wäre für jede Hilfe dankbar