Game is won when only hidden places contain bombs minesweeper
authorJaroslav Tulach <jtulach@netbeans.org>
Fri, 07 Feb 2014 16:35:45 +0100
branchminesweeper
changeset 669cf895cde4bd
parent 65 8e31706fc5da
child 67 2e910e06ed34
Game is won when only hidden places contain 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 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);