feat: various ui changes
Some checks failed
Linux arm64 / Build (push) Has been cancelled

This commit is contained in:
2025-01-28 14:56:06 +01:00
parent f489c4c8ab
commit 944f2c0596
10 changed files with 103 additions and 8 deletions

View File

@@ -2,6 +2,10 @@ package gui.menu;
import imgui.ImGui;
import imgui.type.ImInt;
import sudoku.solver.Solver;
import sudoku.structure.Cell;
import sudoku.structure.MultiDoku;
import sudoku.structure.Sudoku;
import sudoku.structure.SudokuFactory;
public class SoloMenu extends BaseView {
@@ -19,6 +23,29 @@ public class SoloMenu extends BaseView {
super(stateMachine);
}
private void pushSudokuState(MultiDoku doku, boolean empty) {
if (!empty) {
try {
int level = 0;
for (Sudoku sudoku : doku.getSubGrids()) {
level += sudoku.getSize() * sudoku.getSize() / 10 * 3;
}
Solver.solve(doku);
SudokuFactory.newDokuFromFilledOne(doku, level - 1);
for (Sudoku sudoku : doku.getSubGrids()) {
for (Cell cell : sudoku.getCells()) {
if (cell.getSymbolIndex() != Cell.NOSYMBOL) {
cell.setImmutable();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
this.stateMachine.pushState(new SudokuView(stateMachine, doku));
}
@Override
public void render() {
ImGui.text("Solo");
@@ -27,8 +54,10 @@ public class SoloMenu extends BaseView {
case SQUARE:
ImGui.inputInt("Taille", sudokuSize);
if (ImGui.button("Résoudre un sudoku")) {
this.stateMachine.pushState(new SudokuView(stateMachine,
SudokuFactory.createBasicEmptySquareSudoku(sudokuSize.get())));
pushSudokuState(SudokuFactory.createBasicEmptySquareSudoku(sudokuSize.get()), false);
}
if (ImGui.button("Générer une grille vide")) {
pushSudokuState(SudokuFactory.createBasicEmptySquareSudoku(sudokuSize.get()), true);
}
break;
@@ -36,16 +65,23 @@ public class SoloMenu extends BaseView {
ImGui.inputInt("Largeur", sudokuHeight);
ImGui.inputInt("Longueur", sudokuWidth);
if (ImGui.button("Résoudre un sudoku")) {
this.stateMachine.pushState(new SudokuView(stateMachine,
SudokuFactory.createBasicEmptyRectangleSudoku(sudokuWidth.get(), sudokuHeight.get())));
pushSudokuState(
SudokuFactory.createBasicEmptyRectangleSudoku(sudokuWidth.get(), sudokuHeight.get()),
false);
}
if (ImGui.button("Générer une grille vide")) {
pushSudokuState(
SudokuFactory.createBasicEmptyRectangleSudoku(sudokuWidth.get(), sudokuHeight.get()), true);
}
break;
case MULTIDOKU:
ImGui.inputInt("Taille", sudokuSize);
if (ImGui.button("Résoudre un multidoku")) {
this.stateMachine.pushState(new SudokuView(stateMachine,
SudokuFactory.createBasicSquareMultidoku(sudokuSize.get())));
if (ImGui.button("Résoudre un sudoku")) {
pushSudokuState(SudokuFactory.createBasicSquareMultidoku(sudokuSize.get()), false);
}
if (ImGui.button("Générer une grille vide")) {
pushSudokuState(SudokuFactory.createBasicSquareMultidoku(sudokuSize.get()), true);
}
default: