1.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Feb 07 15:40:56 2014 +0100
1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Feb 07 16:35:45 2014 +0100
1.3 @@ -117,6 +117,7 @@
1.4 List<Integer> xBombs = new ArrayList<Integer>();
1.5 List<Integer> yBombs = new ArrayList<Integer>();
1.6 final List<Row> rows = model.getRows();
1.7 + boolean emptyHidden = false;
1.8 for (int y = 0; y < rows.size(); y++) {
1.9 final List<Square> columns = rows.get(y).getColumns();
1.10 for (int x = 0; x < columns.size(); x++) {
1.11 @@ -127,6 +128,10 @@
1.12 }
1.13 if (sq.getState().isVisible()) {
1.14 sq.setState(SquareType.N_0);
1.15 + } else {
1.16 + if (!sq.isMine()) {
1.17 + emptyHidden = true;
1.18 + }
1.19 }
1.20 }
1.21 }
1.22 @@ -136,6 +141,10 @@
1.23
1.24 incrementAround(model, x, y);
1.25 }
1.26 +
1.27 + if (!emptyHidden) {
1.28 + model.setState(GameState.WON);
1.29 + }
1.30 }
1.31
1.32 private static void incrementAround(Mines model, int x, int y) {
2.1 --- a/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Feb 07 15:40:56 2014 +0100
2.2 +++ b/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Feb 07 16:35:45 2014 +0100
2.3 @@ -67,6 +67,17 @@
2.4 assertSquare(m, 0, 2, SquareType.N_1);
2.5 assertSquare(m, 2, 2, SquareType.UNKNOWN);
2.6 }
2.7 +
2.8 + public void gameIsWonIfAllMinesDiscovered() {
2.9 + Mines m = new Mines();
2.10 + m.init(2, 1, 0);
2.11 + set(m, 0, 0, SquareType.UNKNOWN, true);
2.12 + m.computeMines();
2.13 + assertEquals(m.getState(), MinesModel.GameState.IN_PROGRESS);
2.14 + set(m, 1, 0, SquareType.N_0, false);
2.15 + m.computeMines();
2.16 + assertEquals(m.getState(), MinesModel.GameState.WON, "All non-bomb squares discovered");
2.17 + }
2.18
2.19 private static void set(Mines m, int x, int y, SquareType squareType, boolean mine) {
2.20 Square sq = m.getRows().get(y).getColumns().get(x);