1.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Jun 27 15:25:21 2014 +0200
1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Fri Jun 27 15:36:48 2014 +0200
1.3 @@ -233,6 +233,10 @@
1.4 if (model.getState() == GameState.MARKING_MINE) {
1.5 if (data.getState() == SquareType.UNKNOWN) {
1.6 data.setState(SquareType.MARKED);
1.7 + if (allMarked(model)) {
1.8 + model.setState(GameState.WON);
1.9 + return;
1.10 + }
1.11 }
1.12 model.setState(GameState.IN_PROGRESS);
1.13 return;
1.14 @@ -443,6 +447,27 @@
1.15 }
1.16 return true;
1.17 }
1.18 +
1.19 + private static boolean allMarked(Mines m) {
1.20 + for (Row r : m.getRows()) {
1.21 + for (Square sq : r.getColumns()) {
1.22 + if (sq.isMine() && sq.getState() != SquareType.MARKED) {
1.23 + return false;
1.24 + }
1.25 + }
1.26 + }
1.27 + for (Row r : m.getRows()) {
1.28 + for (Square sq : r.getColumns()) {
1.29 + if (sq.isMine()) {
1.30 + sq.setState(SquareType.DISCOVERED);
1.31 + } else {
1.32 + sq.setState(SquareType.N_0);
1.33 + }
1.34 + }
1.35 + }
1.36 + computeMines(m);
1.37 + return true;
1.38 + }
1.39
1.40 /**
1.41 * Called when page is ready
2.1 --- a/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Jun 27 15:25:21 2014 +0200
2.2 +++ b/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java Fri Jun 27 15:36:48 2014 +0200
2.3 @@ -59,6 +59,22 @@
2.4
2.5 assertEquals(sq.getState(), SquareType.UNKNOWN, "Changed back to unknown");
2.6 }
2.7 +
2.8 + @Test public void gameWonWhenAllMarked() {
2.9 + Mines m = new Mines();
2.10 + m.init(10, 10, 10);
2.11 +
2.12 + for (Row row : m.getRows()) {
2.13 + for (Square sq : row.getColumns()) {
2.14 + if (sq.isMine()) {
2.15 + MinesModel.markMine(m);
2.16 + MinesModel.click(m, sq);
2.17 + }
2.18 + }
2.19 + }
2.20 +
2.21 + assertEquals(m.getState(), MinesModel.GameState.WON, "All mines found. You have won!");
2.22 + }
2.23
2.24 @Test public void bombsSet() {
2.25 Mines m = new Mines();