diff --git a/app/src/main/java/gui/SudokuController.java b/app/src/main/java/gui/SudokuController.java index a283ab8..0d91eed 100644 --- a/app/src/main/java/gui/SudokuController.java +++ b/app/src/main/java/gui/SudokuController.java @@ -127,6 +127,15 @@ public class SudokuController { // Update the model and view model.set(row, col, value); + + // Warn if the board is not solvable (e.g. if the user has made a mistake) + // This is very messy, error prone and computationally expensive + if(!model.isSolvable()) { + model.set(row, col, 0); + view.showErrorMessage("Illegal move. The board is not solvable."); + } + + // Sync the view with the model view.updateView(model.getBoard()); } } diff --git a/app/src/test/java/sudoku/SolverTest.java b/app/src/test/java/sudoku/SolverTest.java index 3a5833b..7000140 100644 --- a/app/src/test/java/sudoku/SolverTest.java +++ b/app/src/test/java/sudoku/SolverTest.java @@ -34,7 +34,8 @@ class SolverTest { assertTrue(solver.isLegal(0, 0, 1)); solver.set(0, 0, 1); - IntStream.range(0, 9).forEach(i -> { + // Start from one, since setting the same value is legal + IntStream.range(1, 9).forEach(i -> { assertFalse(solver.isLegal(0, i, 1)); assertFalse(solver.isLegal(i, 0, 1)); });