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 { private final ImInt sudokuType = new ImInt(0); private static final String[] sudokuTypes = { "Carré", "Rectangle", "Multidoku" }; private static final int SQUARE = 0, RECTANGLE = 1, MULTIDOKU = 2; private final ImInt sudokuSize = new ImInt(3); private final ImInt sudokuWidth = new ImInt(3); private final ImInt sudokuHeight = new ImInt(3); public SoloMenu(StateMachine stateMachine) { 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); level = (level - 1) / doku.getNbSubGrids(); SudokuFactory.newDokuFromFilledOne(doku, level); 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"); ImGui.combo("Type de Sudoku", sudokuType, sudokuTypes); switch (sudokuType.get()) { case SQUARE: ImGui.inputInt("Taille", sudokuSize); if (ImGui.button("Résoudre un sudoku")) { pushSudokuState(SudokuFactory.createBasicEmptySquareSudoku(sudokuSize.get()), false); } if (ImGui.button("Générer une grille vide")) { pushSudokuState(SudokuFactory.createBasicEmptySquareSudoku(sudokuSize.get()), true); } break; case RECTANGLE: ImGui.inputInt("Largeur", sudokuHeight); ImGui.inputInt("Longueur", sudokuWidth); if (ImGui.button("Résoudre un sudoku")) { 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 sudoku")) { pushSudokuState(SudokuFactory.createBasicSquareMultidoku(sudokuSize.get()), false); } if (ImGui.button("Générer une grille vide")) { pushSudokuState(SudokuFactory.createBasicSquareMultidoku(sudokuSize.get()), true); } default: break; } renderReturnButton(); } }