Faster computation of discovered non-mine squares xtrnlbrwsr
authorJaroslav Tulach <jtulach@netbeans.org>
Sun, 09 Mar 2014 15:21:42 +0100
branchxtrnlbrwsr
changeset 99ae4e3694c2d3
parent 98 8ae7a8464c52
child 100 b083d786eeec
Faster computation of discovered non-mine squares
minesweeper/src/main/java/org/apidesign/demo/minesweeper/Main.java
minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java
     1.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/Main.java	Sun Mar 09 15:03:01 2014 +0100
     1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/Main.java	Sun Mar 09 15:21:42 2014 +0100
     1.3 @@ -68,11 +68,14 @@
     1.4      
     1.5      /** Launches the browser */
     1.6      public static void main(String... args) throws Exception {
     1.7 +        /*
     1.8          Logger l = Logger.getLogger("org.apidesign.html.dlvkbrwsr");
     1.9          l.setLevel(Level.ALL);
    1.10 +        l.setUseParentHandlers(false);
    1.11          ConsoleHandler ch = new ConsoleHandler();
    1.12          ch.setLevel(Level.ALL);
    1.13          l.addHandler(ch);
    1.14 +        */
    1.15          
    1.16          
    1.17          BrowserBuilder.newBrowser(new XtrnlBrwsrPrsntr() {
     2.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Sun Mar 09 15:03:01 2014 +0100
     2.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Sun Mar 09 15:21:42 2014 +0100
     2.3 @@ -245,6 +245,7 @@
     2.4                  } else {
     2.5                      TOUCH.play();
     2.6                      expandKnown(model, data);
     2.7 +                    model.computeMines();
     2.8                  }
     2.9              break;
    2.10          }
    2.11 @@ -272,9 +273,18 @@
    2.12          }
    2.13          final Square sq = columns.get(x);
    2.14          if (sq.getState() == SquareType.UNKNOWN) {
    2.15 -            sq.setState(SquareType.N_0);
    2.16 -            model.computeMines();
    2.17 -            if (sq.getState() == SquareType.N_0) {
    2.18 +            int around = 
    2.19 +                minesAt(model, x - 1, y - 1) +
    2.20 +                minesAt(model, x - 1, y) +
    2.21 +                minesAt(model, x - 1, y + 1) +
    2.22 +                minesAt(model, x , y - 1) +
    2.23 +                minesAt(model, x, y + 1) +
    2.24 +                minesAt(model, x + 1, y - 1) +
    2.25 +                minesAt(model, x + 1, y) +
    2.26 +                minesAt(model, x + 1, y + 1);
    2.27 +            final SquareType t = SquareType.valueOf("N_" + around);
    2.28 +            sq.setState(t);
    2.29 +            if (t == SquareType.N_0) {
    2.30                  expandKnown(model, x - 1, y - 1);
    2.31                  expandKnown(model, x - 1, y);
    2.32                  expandKnown(model, x - 1, y + 1);
    2.33 @@ -286,4 +296,17 @@
    2.34              }
    2.35          }
    2.36      }
    2.37 +    
    2.38 +    private static int minesAt(Mines model, int x, int y) {
    2.39 +        if (y < 0 || y >= model.getRows().size()) {
    2.40 +            return 0;
    2.41 +        }
    2.42 +        final List<Square> columns = model.getRows().get(y).getColumns();
    2.43 +        if (x < 0 || x >= columns.size()) {
    2.44 +            return 0;
    2.45 +        }
    2.46 +        Square sq = columns.get(x);
    2.47 +        return sq.isMine() ? 1 : 0;
    2.48 +    }
    2.49 +    
    2.50  }