# HG changeset patch # User Jaroslav Tulach # Date 1405578205 -7200 # Node ID a57b2414b8557805c63a528820ed02ab07d67cd7 # Parent 9ce205a82f645cf6e5293d4d4e83db6291629469 One should not be able to win the game by marking all the squares diff -r 9ce205a82f64 -r a57b2414b855 minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Thu Jul 17 08:16:25 2014 +0200 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Thu Jul 17 08:23:25 2014 +0200 @@ -250,6 +250,9 @@ } if (data.getState() == SquareType.MARKED) { data.setState(SquareType.UNKNOWN); + if (allMarked(model)) { + model.setState(GameState.WON); + } return; } if (data.getState() != SquareType.UNKNOWN) { @@ -455,7 +458,7 @@ private static boolean allMarked(Mines m) { for (Row r : m.getRows()) { for (Square sq : r.getColumns()) { - if (sq.isMine() && sq.getState() != SquareType.MARKED) { + if (sq.isMine() == (sq.getState() != SquareType.MARKED)) { return false; } } diff -r 9ce205a82f64 -r a57b2414b855 minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java --- a/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Thu Jul 17 08:16:25 2014 +0200 +++ b/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Thu Jul 17 08:23:25 2014 +0200 @@ -76,6 +76,33 @@ assertEquals(m.getState(), MinesModel.GameState.WON, "All mines found. You have won!"); } + @Test public void gameNotWonWhenTooMuchIsMarked() { + Mines m = new Mines(); + m.init(10, 10, 10); + + Square additional = null; + for (Row row : m.getRows()) { + for (Square sq : row.getColumns()) { + if (sq.isMine()) { + MinesModel.markMine(m); + MinesModel.click(m, sq); + } else if (additional == null) { + MinesModel.markMine(m); + MinesModel.click(m, additional = sq); + } + } + } + + assertEquals(m.getState(), MinesModel.GameState.IN_PROGRESS, "One additional mine is marked!"); + + // remove the mark + MinesModel.click(m, additional); + + assertEquals(m.getState(), MinesModel.GameState.WON, "All mines found. You have won!"); + + + } + @Test public void bombsSet() { Mines m = new Mines(); m.init(10, 10, 0);