One can win by marking fields with all bombs
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Fri, 27 Jun 2014 15:36:48 +0200
changeset 165276db4d4d795
parent 164 b56bc5060fac
child 166 e6667c8206fc
One can win by marking fields with all bombs
minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java
minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java
     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();