106 lines
2.4 KiB
Java
106 lines
2.4 KiB
Java
package gui.menu;
|
|
|
|
import java.util.Random;
|
|
import java.util.concurrent.CancellationException;
|
|
|
|
import gui.SudokuRenderer;
|
|
import imgui.ImGui;
|
|
import sudoku.solver.Solver;
|
|
import sudoku.structure.MultiDoku;
|
|
|
|
public class SudokuView extends BaseView {
|
|
|
|
private final SudokuRenderer sudokuRenderer;
|
|
private Thread resolveThread;
|
|
private final MultiDoku doku;
|
|
|
|
public SudokuView(StateMachine stateMachine, MultiDoku doku) {
|
|
super(stateMachine);
|
|
this.doku = doku;
|
|
this.sudokuRenderer = new SudokuRenderer(doku);
|
|
// int level = 0;
|
|
// for (Sudoku sudoku : this.doku.getSubGrids()) {
|
|
// level += sudoku.getSize() * sudoku.getSize() / 10;
|
|
// }
|
|
// try {
|
|
// Solver.solve(doku);
|
|
// SudokuFactory.newDokuFromFilledOne(doku, level);
|
|
// for (Sudoku sudoku : this.doku.getSubGrids()) {
|
|
// for (Cell cell : sudoku.getCells()) {
|
|
// if (cell.getSymbolIndex() != Cell.NOSYMBOL) {
|
|
// cell.setImmutable();
|
|
// }
|
|
// }
|
|
// }
|
|
// } catch (Exception e) {
|
|
// e.printStackTrace();
|
|
// System.out.println("non ça n'arrivera pas");
|
|
// //TODO: ça va arriver
|
|
// }
|
|
}
|
|
|
|
private void stopResolve() {
|
|
if (resolveThread != null && resolveThread.isAlive()) {
|
|
resolveThread.interrupt();
|
|
resolveThread = null;
|
|
}
|
|
}
|
|
|
|
private void renderCancelButton() {
|
|
boolean wantsToStop = false;
|
|
if (resolveThread != null && resolveThread.isAlive()) {
|
|
// ImGui.endDisabled();
|
|
if (ImGui.button("Annuler")) {
|
|
// we can't stop the Thread right now
|
|
wantsToStop = true;
|
|
}
|
|
}
|
|
if (resolveThread != null && !resolveThread.isAlive()) {
|
|
resolveThread.start();
|
|
}
|
|
if (wantsToStop)
|
|
stopResolve();
|
|
}
|
|
|
|
private void renderSolveButton() {
|
|
if (resolveThread != null)
|
|
ImGui.beginDisabled();
|
|
|
|
boolean beginSolve = false;
|
|
|
|
if (ImGui.button("Résoudre")) {
|
|
beginSolve = true;
|
|
}
|
|
if (resolveThread != null)
|
|
ImGui.endDisabled();
|
|
|
|
if (beginSolve) {
|
|
resolveThread = new Thread(() -> {
|
|
try {
|
|
Random rand = new Random();
|
|
Solver.solveRandom(doku, rand);
|
|
Thread.sleep(200);
|
|
} catch (CancellationException | InterruptedException e) {
|
|
System.out.println("The user is bored !");
|
|
}
|
|
stopResolve();
|
|
});
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void render() {
|
|
sudokuRenderer.render();
|
|
renderSolveButton();
|
|
renderCancelButton();
|
|
renderReturnButton();
|
|
}
|
|
|
|
@Override
|
|
public void closeMenu() {
|
|
super.closeMenu();
|
|
stopResolve();
|
|
}
|
|
|
|
}
|