This commit is contained in:
@@ -86,7 +86,6 @@ public class SudokuSelector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void render() {
|
public void render() {
|
||||||
ImGui.combo("Type de Sudoku", sudokuType, sudokuTypes);
|
|
||||||
ImGui.combo("Difficulté", difficulty, Difficulty.getDifficultyNames());
|
ImGui.combo("Difficulté", difficulty, Difficulty.getDifficultyNames());
|
||||||
if (ImGui.treeNode("Constraintes")) {
|
if (ImGui.treeNode("Constraintes")) {
|
||||||
for (Constraint cons : Constraint.values()) {
|
for (Constraint cons : Constraint.values()) {
|
||||||
@@ -94,46 +93,36 @@ public class SudokuSelector {
|
|||||||
}
|
}
|
||||||
ImGui.treePop();
|
ImGui.treePop();
|
||||||
}
|
}
|
||||||
switch (sudokuType.get()) {
|
ImGui.combo("Type de Sudoku", sudokuType, SudokuType.getTypeNames());
|
||||||
case SQUARE:
|
SudokuType currentType = SudokuType.values()[sudokuType.get()];
|
||||||
|
switch (currentType.getMakerParamCount()) {
|
||||||
|
case 1:
|
||||||
ImGui.inputInt("Taille", sudokuSize);
|
ImGui.inputInt("Taille", sudokuSize);
|
||||||
if (ImGui.button("Résoudre un sudoku")) {
|
if (ImGui.button("Résoudre un sudoku")) {
|
||||||
selectSudoku(SudokuFactory.createBasicEmptySquareDoku(sudokuSize.get(), getConstraints()), false);
|
selectSudoku(currentType.createDoku(getConstraints(), sudokuSize.get()), false);
|
||||||
}
|
}
|
||||||
if (canGenEmptyGrid && ImGui.button("Générer une grille vide")) {
|
if (canGenEmptyGrid && ImGui.button("Générer une grille vide")) {
|
||||||
selectSudoku(SudokuFactory.createBasicEmptySquareDoku(sudokuSize.get(), getConstraints()), true);
|
selectSudoku(currentType.createDoku(getConstraints(), sudokuSize.get()), true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case RECTANGLE:
|
case 2:
|
||||||
ImGui.inputInt("Largeur", sudokuHeight);
|
ImGui.inputInt("Largeur", sudokuHeight);
|
||||||
ImGui.inputInt("Longueur", sudokuWidth);
|
ImGui.inputInt("Longueur", sudokuWidth);
|
||||||
if (ImGui.button("Résoudre un sudoku")) {
|
if (ImGui.button("Résoudre un sudoku")) {
|
||||||
selectSudoku(
|
selectSudoku(currentType.createDoku(getConstraints(), sudokuWidth.get(), sudokuHeight.get()),
|
||||||
SudokuFactory.createBasicEmptyRectangleDoku(sudokuWidth.get(), sudokuHeight.get(),
|
|
||||||
getConstraints()),
|
|
||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
if (canGenEmptyGrid && ImGui.button("Générer une grille vide")) {
|
if (canGenEmptyGrid && ImGui.button("Générer une grille vide")) {
|
||||||
selectSudoku(
|
selectSudoku(currentType.createDoku(getConstraints(), sudokuWidth.get(), sudokuHeight.get()), true);
|
||||||
SudokuFactory.createBasicEmptyRectangleDoku(sudokuWidth.get(), sudokuHeight.get(),
|
|
||||||
getConstraints()),
|
|
||||||
true);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MULTIDOKU:
|
|
||||||
ImGui.inputInt("Taille", sudokuSize);
|
|
||||||
if (ImGui.button("Résoudre un sudoku")) {
|
|
||||||
selectSudoku(SudokuFactory.createBasicXShapedMultidoku(sudokuSize.get(), getConstraints()), false);
|
|
||||||
}
|
|
||||||
if (canGenEmptyGrid && ImGui.button("Générer une grille vide")) {
|
|
||||||
selectSudoku(SudokuFactory.createBasicXShapedMultidoku(sudokuSize.get(), getConstraints()), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
assert (false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ImGui.button("À partir d'un fichier")) {
|
if (ImGui.button("À partir d'un fichier")) {
|
||||||
ImGuiFileDialog.openDialog("browse-sudoku", "Choisissez un fichier", ".json", ".");
|
ImGuiFileDialog.openDialog("browse-sudoku", "Choisissez un fichier", ".json", ".");
|
||||||
}
|
}
|
||||||
|
|||||||
62
app/src/main/java/gui/SudokuType.java
Normal file
62
app/src/main/java/gui/SudokuType.java
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package gui;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import sudoku.constraint.Constraint;
|
||||||
|
import sudoku.structure.MultiDoku;
|
||||||
|
import sudoku.structure.SudokuFactory;;
|
||||||
|
|
||||||
|
public enum SudokuType {
|
||||||
|
|
||||||
|
Square("Carré", 1,
|
||||||
|
(constraints, params) -> SudokuFactory.createBasicEmptySquareDoku(params[0], constraints)),
|
||||||
|
Rectangle("Rectangle", 2,
|
||||||
|
(constraints, params) -> SudokuFactory.createBasicEmptyRectangleDoku(params[0], params[1], constraints)),
|
||||||
|
RandomBloc("Blocs aléatoires", 1,
|
||||||
|
(constraints, params) -> SudokuFactory.createBasicEmptyRandomBlockDoku(params[0], constraints)),
|
||||||
|
MultiDokuSquare("Multidoku carré (X)", 1,
|
||||||
|
(constraints, params) -> SudokuFactory.createBasicXShapedMultidoku(params[0], constraints)),
|
||||||
|
MultidokuRectangle("Multidoku rectangle (X)", 2,
|
||||||
|
(constraints, params) -> SudokuFactory.createBasicXShapedMultidoku(params[0], params[1], constraints));
|
||||||
|
|
||||||
|
String displayName;
|
||||||
|
SudokuMaker maker;
|
||||||
|
int paramCount;
|
||||||
|
|
||||||
|
private SudokuType(String displayName, int paramCount, SudokuMaker maker) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
this.maker = maker;
|
||||||
|
this.paramCount = paramCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return this.displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiDoku createDoku(List<Constraint> constraints, int... params) {
|
||||||
|
return maker.makeSudoku(constraints, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMakerParamCount() {
|
||||||
|
return this.paramCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static interface SudokuMaker {
|
||||||
|
MultiDoku makeSudoku(List<Constraint> constraints, int... params);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final String[] dokuNames;
|
||||||
|
|
||||||
|
static {
|
||||||
|
SudokuType[] types = SudokuType.values();
|
||||||
|
dokuNames = new String[types.length];
|
||||||
|
for (int i = 0; i < types.length; i++) {
|
||||||
|
dokuNames[i] = types[i].getDisplayName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String[] getTypeNames() {
|
||||||
|
return dokuNames;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -291,4 +291,28 @@ public class SudokuFactory {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static MultiDoku createBasicEmptyRandomBlockDoku(int blockSize, List<Constraint> constraints) {
|
||||||
|
int blockCellCount = blockSize * blockSize;
|
||||||
|
List<Cell> cells = initCells(blockCellCount);
|
||||||
|
List<Cell> homeLessCells = new ArrayList<>();
|
||||||
|
homeLessCells.addAll(cells);
|
||||||
|
List<Block> blocks = new ArrayList<>();
|
||||||
|
Random r = new Random();
|
||||||
|
for (int i = 0 ; i < blockCellCount; i++) {
|
||||||
|
Block b = new Block();
|
||||||
|
for (int j = 0; j < blockCellCount; j++) {
|
||||||
|
int cellIndex = r.nextInt(homeLessCells.size());
|
||||||
|
Cell cell = homeLessCells.remove(cellIndex);
|
||||||
|
b.addCell(cell);
|
||||||
|
cell.setBlock(b);
|
||||||
|
}
|
||||||
|
blocks.add(b);
|
||||||
|
}
|
||||||
|
Sudoku sudoku = new Sudoku(cells, blocks, constraints);
|
||||||
|
for (Block block : blocks) {
|
||||||
|
block.getSudokus().add(sudoku);
|
||||||
|
}
|
||||||
|
return new MultiDoku(Arrays.asList(sudoku));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user