# HG changeset patch # User Jaroslav Tulach # Date 1403876208 -7200 # Node ID 276db4d4d7953b021537983b851a929415d1ddb9 # Parent b56bc5060fac0a19f03fe2509f85c36b7ad35d93 One can win by marking fields with all bombs diff -r b56bc5060fac -r 276db4d4d795 minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Jun 27 15:25:21 2014 +0200 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Jun 27 15:36:48 2014 +0200 @@ -233,6 +233,10 @@ if (model.getState() == GameState.MARKING_MINE) { if (data.getState() == SquareType.UNKNOWN) { data.setState(SquareType.MARKED); + if (allMarked(model)) { + model.setState(GameState.WON); + return; + } } model.setState(GameState.IN_PROGRESS); return; @@ -443,6 +447,27 @@ } return true; } + + private static boolean allMarked(Mines m) { + for (Row r : m.getRows()) { + for (Square sq : r.getColumns()) { + if (sq.isMine() && sq.getState() != SquareType.MARKED) { + return false; + } + } + } + for (Row r : m.getRows()) { + for (Square sq : r.getColumns()) { + if (sq.isMine()) { + sq.setState(SquareType.DISCOVERED); + } else { + sq.setState(SquareType.N_0); + } + } + } + computeMines(m); + return true; + } /** * Called when page is ready diff -r b56bc5060fac -r 276db4d4d795 minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java --- a/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Jun 27 15:25:21 2014 +0200 +++ b/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Jun 27 15:36:48 2014 +0200 @@ -59,6 +59,22 @@ assertEquals(sq.getState(), SquareType.UNKNOWN, "Changed back to unknown"); } + + @Test public void gameWonWhenAllMarked() { + Mines m = new Mines(); + m.init(10, 10, 10); + + for (Row row : m.getRows()) { + for (Square sq : row.getColumns()) { + if (sq.isMine()) { + MinesModel.markMine(m); + MinesModel.click(m, sq); + } + } + } + + assertEquals(m.getState(), MinesModel.GameState.WON, "All mines found. You have won!"); + } @Test public void bombsSet() { Mines m = new Mines();