# HG changeset patch # User Jaroslav Tulach # Date 1391787345 -3600 # Node ID 9cf895cde4bddc4a072b0dd61ca3b4d9494507eb # Parent 8e31706fc5dac9365acc10acbd71db9426ca4a65 Game is won when only hidden places contain bombs diff -r 8e31706fc5da -r 9cf895cde4bd minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Feb 07 15:40:56 2014 +0100 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Feb 07 16:35:45 2014 +0100 @@ -117,6 +117,7 @@ List xBombs = new ArrayList(); List yBombs = new ArrayList(); final List rows = model.getRows(); + boolean emptyHidden = false; for (int y = 0; y < rows.size(); y++) { final List columns = rows.get(y).getColumns(); for (int x = 0; x < columns.size(); x++) { @@ -127,6 +128,10 @@ } if (sq.getState().isVisible()) { sq.setState(SquareType.N_0); + } else { + if (!sq.isMine()) { + emptyHidden = true; + } } } } @@ -136,6 +141,10 @@ incrementAround(model, x, y); } + + if (!emptyHidden) { + model.setState(GameState.WON); + } } private static void incrementAround(Mines model, int x, int y) { diff -r 8e31706fc5da -r 9cf895cde4bd minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java --- a/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Feb 07 15:40:56 2014 +0100 +++ b/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Feb 07 16:35:45 2014 +0100 @@ -67,6 +67,17 @@ assertSquare(m, 0, 2, SquareType.N_1); assertSquare(m, 2, 2, SquareType.UNKNOWN); } + + public void gameIsWonIfAllMinesDiscovered() { + Mines m = new Mines(); + m.init(2, 1, 0); + set(m, 0, 0, SquareType.UNKNOWN, true); + m.computeMines(); + assertEquals(m.getState(), MinesModel.GameState.IN_PROGRESS); + set(m, 1, 0, SquareType.N_0, false); + m.computeMines(); + assertEquals(m.getState(), MinesModel.GameState.WON, "All non-bomb squares discovered"); + } private static void set(Mines m, int x, int y, SquareType squareType, boolean mine) { Square sq = m.getRows().get(y).getColumns().get(x);