Files
Sudoku/app/src/main/java/gui/menu/SudokuView.java
Persson-dev b1ae79a2e8
Some checks failed
Linux arm64 / Build (push) Has been cancelled
add multidoku to solo
2025-01-28 09:56:44 +01:00

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