Hi,
ich habe ein Sudoku Spiel Programmiert.
Da ich unter Zeitdruck stehe, habe ich im Moment keine Zeit einen richtig funktionierenden Generator zu coden, der verschiedene Schwierigkeitsgrade unterstützt.
Ich will also eine spielbare Version mit 3 Sudoku "DatenBanken" haben. (easy, medium, hard).
Bis jetzt sieht das so aus:
Nur die ganzen Datenbanken jedes mal im Konstrukter so zu laden halte ich für nicht sehr sinnvoll, da dieser bei ca 50 Sudokus pro Schwierigkeitsgrad einfach total überladen ist.
Daher würde ich die Sudokus gerne aus einer externen Datei einfach irgendwie einlesen.
Schreibform für die Puzzles wäre dann diese:
"000306500800500000010000040900080020000000000040060001050000010000009002006108000"
nur ich hab absolut keine Ahnung wie ich das hinbekommen soll, ich habe garkeine Erfahrung wie man auf Java-externe Dateien zugreifen kann bzw ob das überhaupt geht und ob es das Ganze wirklich einfacher macht.
Daher würde ich mich über jede Hilfe freuen!
Grüsse David
ich habe ein Sudoku Spiel Programmiert.
Da ich unter Zeitdruck stehe, habe ich im Moment keine Zeit einen richtig funktionierenden Generator zu coden, der verschiedene Schwierigkeitsgrade unterstützt.
Ich will also eine spielbare Version mit 3 Sudoku "DatenBanken" haben. (easy, medium, hard).
Bis jetzt sieht das so aus:
Code:
import java.util.ArrayList;
import java.util.Random;
/**
*
* @author eberldav
*/
public class Generator {
ArrayList easyPuzzles= new ArrayList();
ArrayList mediumPuzzles= new ArrayList();
ArrayList hardPuzzles= new ArrayList();
/** Creates a new instance of Generator */
public Generator() {
int[][] test0={//easy
{3, 0, 0, 0, 0, 0, 0, 2, 0},
{0, 7, 5, 4, 2, 1, 6, 0, 9},
{6, 2, 0, 3, 5, 9, 8, 7, 4},
{0, 3, 0, 5, 8, 0, 0, 0, 7},
{0, 8, 7, 0, 0, 4, 0, 5, 0},
{0, 9, 0, 1, 6, 7, 2, 0, 0},
{0, 5, 0, 2, 1, 0, 0, 4, 0},
{4, 6, 8, 7, 0, 0, 0, 0, 2},
{7, 0, 0, 8, 4, 3, 9, 6, 5}};
int[][] test1={//hard
{4, 0, 0, 0, 1, 6, 0, 0, 5},
{0, 0, 1, 0, 9, 2, 3, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 9, 3, 0, 7, 0, 0, 5, 0},
{2, 0, 4, 0, 0, 0, 1, 0, 7},
{0, 6, 0, 0, 8, 0, 9, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 5, 1, 2, 0, 4, 0, 0},
{9, 0, 0, 7, 4, 0, 6, 0, 3}};
int[][] test2={
{0, 9, 0, 3, 7, 0, 0, 0, 5},
{3, 0, 0, 0, 0, 4, 0, 9, 1},
{0, 4, 0, 1, 0, 0, 0, 6, 0},
{0, 0, 0, 0, 0, 9, 0, 0, 0},
{4, 0, 0, 6, 0, 5, 0, 0, 2},
{0, 0, 0, 8, 0, 0, 0, 0, 0},
{0, 2, 0, 0, 0, 7, 0, 3, 0},
{1, 8, 0, 4, 0, 0, 0, 0, 7},
{7, 0, 0, 0, 8, 3, 0, 1, 0}};
int[][] test3={
{0, 7, 0, 6, 0, 0, 0, 0, 0},
{0, 3, 1, 2, 0, 0, 5, 0, 0},
{0, 0, 0, 5, 0, 0, 0, 0, 0},
{0, 4, 0, 0, 3, 0, 6, 0, 0},
{0, 0, 0, 0, 0, 5, 0, 0, 2},
{0, 0, 7, 0, 0, 0, 0, 9, 1},
{6, 0, 9, 0, 0, 0, 4, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 3},
{0, 0, 0, 1, 7, 6, 2, 0, 0}};
this.addBoard(test0, 0);
this.addBoard(test1, 2);
this.addBoard(test2, 1);
this.addBoard(test3, 1);
}
/**add a new Board to the data base*/
public boolean addBoard(Board boardToAdd, int difficulty){
switch(difficulty){
case 0:
easyPuzzles.add(boardToAdd);
return true;
case 1:
mediumPuzzles.add(boardToAdd);
return true;
case 2:
hardPuzzles.add(boardToAdd);
return true;
default: return false;
}
}
/**add a new Board to the data base using int array*/
public boolean addBoard(int[][] cellValues, int difficulty){
Board boardToAdd= new Board(cellValues);
Solver solver= new Solver(boardToAdd);
solver.run();
switch(difficulty){
case 0:
easyPuzzles.add(boardToAdd);
return true;
case 1:
mediumPuzzles.add(boardToAdd);
return true;
case 2:
hardPuzzles.add(boardToAdd);
return true;
default: return false;
}
}
/**return a Puzzle according to its difficulty*/
public Board getNewPuzzle(int difficulty){
Random randomNum= new Random();
Board board=new Board();
Board tmpBoard;
switch(difficulty){
case 0:
tmpBoard=(Board)easyPuzzles.get(randomNum.nextInt(easyPuzzles.size()));
board=tmpBoard.copyInto(board);
return board;
case 1:
tmpBoard=(Board)mediumPuzzles.get(randomNum.nextInt(mediumPuzzles.size()));
board=tmpBoard.copyInto(board);
return board;
case 2:
tmpBoard=(Board)hardPuzzles.get(randomNum.nextInt(hardPuzzles.size()));
board=tmpBoard.copyInto(board);
return board;
default: return board=null;
}
}
}
Nur die ganzen Datenbanken jedes mal im Konstrukter so zu laden halte ich für nicht sehr sinnvoll, da dieser bei ca 50 Sudokus pro Schwierigkeitsgrad einfach total überladen ist.
Daher würde ich die Sudokus gerne aus einer externen Datei einfach irgendwie einlesen.
Schreibform für die Puzzles wäre dann diese:
"000306500800500000010000040900080020000000000040060001050000010000009002006108000"
nur ich hab absolut keine Ahnung wie ich das hinbekommen soll, ich habe garkeine Erfahrung wie man auf Java-externe Dateien zugreifen kann bzw ob das überhaupt geht und ob es das Ganze wirklich einfacher macht.
Daher würde ich mich über jede Hilfe freuen!
Grüsse David