minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java
branchxtrnlbrwsr
changeset 99 ae4e3694c2d3
parent 98 8ae7a8464c52
child 124 533c2be1747c
     1.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Sun Mar 09 15:03:01 2014 +0100
     1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Sun Mar 09 15:21:42 2014 +0100
     1.3 @@ -245,6 +245,7 @@
     1.4                  } else {
     1.5                      TOUCH.play();
     1.6                      expandKnown(model, data);
     1.7 +                    model.computeMines();
     1.8                  }
     1.9              break;
    1.10          }
    1.11 @@ -272,9 +273,18 @@
    1.12          }
    1.13          final Square sq = columns.get(x);
    1.14          if (sq.getState() == SquareType.UNKNOWN) {
    1.15 -            sq.setState(SquareType.N_0);
    1.16 -            model.computeMines();
    1.17 -            if (sq.getState() == SquareType.N_0) {
    1.18 +            int around = 
    1.19 +                minesAt(model, x - 1, y - 1) +
    1.20 +                minesAt(model, x - 1, y) +
    1.21 +                minesAt(model, x - 1, y + 1) +
    1.22 +                minesAt(model, x , y - 1) +
    1.23 +                minesAt(model, x, y + 1) +
    1.24 +                minesAt(model, x + 1, y - 1) +
    1.25 +                minesAt(model, x + 1, y) +
    1.26 +                minesAt(model, x + 1, y + 1);
    1.27 +            final SquareType t = SquareType.valueOf("N_" + around);
    1.28 +            sq.setState(t);
    1.29 +            if (t == SquareType.N_0) {
    1.30                  expandKnown(model, x - 1, y - 1);
    1.31                  expandKnown(model, x - 1, y);
    1.32                  expandKnown(model, x - 1, y + 1);
    1.33 @@ -286,4 +296,17 @@
    1.34              }
    1.35          }
    1.36      }
    1.37 +    
    1.38 +    private static int minesAt(Mines model, int x, int y) {
    1.39 +        if (y < 0 || y >= model.getRows().size()) {
    1.40 +            return 0;
    1.41 +        }
    1.42 +        final List<Square> columns = model.getRows().get(y).getColumns();
    1.43 +        if (x < 0 || x >= columns.size()) {
    1.44 +            return 0;
    1.45 +        }
    1.46 +        Square sq = columns.get(x);
    1.47 +        return sq.isMine() ? 1 : 0;
    1.48 +    }
    1.49 +    
    1.50  }