One should not be able to win the game by marking all the squares
authorJaroslav Tulach <jtulach@netbeans.org>
Thu, 17 Jul 2014 08:23:25 +0200
changeset 174a57b2414b855
parent 173 9ce205a82f64
child 175 d39729fe7b76
One should not be able to win the game by marking all the squares
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	Thu Jul 17 08:16:25 2014 +0200
     1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Thu Jul 17 08:23:25 2014 +0200
     1.3 @@ -250,6 +250,9 @@
     1.4          }
     1.5          if (data.getState() == SquareType.MARKED) {
     1.6              data.setState(SquareType.UNKNOWN);
     1.7 +            if (allMarked(model)) {
     1.8 +                model.setState(GameState.WON);
     1.9 +            }
    1.10              return;
    1.11          }
    1.12          if (data.getState() != SquareType.UNKNOWN) {
    1.13 @@ -455,7 +458,7 @@
    1.14      private static boolean allMarked(Mines m) {
    1.15          for (Row r : m.getRows()) {
    1.16              for (Square sq : r.getColumns()) {
    1.17 -                if (sq.isMine() && sq.getState() != SquareType.MARKED) {
    1.18 +                if (sq.isMine() == (sq.getState() != SquareType.MARKED)) {
    1.19                      return false;
    1.20                  }
    1.21              }
     2.1 --- a/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java	Thu Jul 17 08:16:25 2014 +0200
     2.2 +++ b/minesweeper/src/test/java/org/apidesign/demo/minesweeper/MinesModelTest.java	Thu Jul 17 08:23:25 2014 +0200
     2.3 @@ -76,6 +76,33 @@
     2.4          assertEquals(m.getState(), MinesModel.GameState.WON, "All mines found. You have won!");
     2.5      }
     2.6      
     2.7 +    @Test public void gameNotWonWhenTooMuchIsMarked() {
     2.8 +        Mines m = new Mines();
     2.9 +        m.init(10, 10, 10);
    2.10 +        
    2.11 +        Square additional = null;
    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 +                } else if (additional == null) {
    2.18 +                    MinesModel.markMine(m);
    2.19 +                    MinesModel.click(m, additional = sq);
    2.20 +                }
    2.21 +            } 
    2.22 +        }
    2.23 +        
    2.24 +        assertEquals(m.getState(), MinesModel.GameState.IN_PROGRESS, "One additional mine is marked!");
    2.25 +        
    2.26 +        // remove the mark
    2.27 +        MinesModel.click(m, additional);
    2.28 +        
    2.29 +        assertEquals(m.getState(), MinesModel.GameState.WON, "All mines found. You have won!");
    2.30 +        
    2.31 +        
    2.32 +    }
    2.33 +    
    2.34      @Test public void bombsSet() {
    2.35          Mines m = new Mines();
    2.36          m.init(10, 10, 0);