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 }