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(); } }