minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java
branchxtrnlbrwsr
changeset 98 8ae7a8464c52
parent 79 03bec9dcc860
child 99 ae4e3694c2d3
     1.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Mon Feb 10 16:50:08 2014 +0100
     1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Sun Mar 09 15:03:01 2014 +0100
     1.3 @@ -111,13 +111,23 @@
     1.4      }
     1.5      
     1.6      @ModelOperation static void init(Mines model, int width, int height, int mines) {
     1.7 -        List<Row> rows = new ArrayList<Row>(height);
     1.8 -        for (int y = 0; y < height; y++) {
     1.9 -            Square[] columns = new Square[width];
    1.10 -            for (int x = 0; x < width; x++) {
    1.11 -                columns[x] = new Square(SquareType.UNKNOWN, false);
    1.12 +        List<Row> rows = model.getRows();
    1.13 +        if (rows.size() != height || rows.get(0).getColumns().size() != width) {
    1.14 +            rows = new ArrayList<Row>(height);
    1.15 +            for (int y = 0; y < height; y++) {
    1.16 +                Square[] columns = new Square[width];
    1.17 +                for (int x = 0; x < width; x++) {
    1.18 +                    columns[x] = new Square(SquareType.UNKNOWN, false);
    1.19 +                }
    1.20 +                rows.add(new Row(columns));
    1.21              }
    1.22 -            rows.add(new Row(columns));
    1.23 +        } else {
    1.24 +            for (Row row : rows) {
    1.25 +                for (Square sq : row.getColumns()) {
    1.26 +                    sq.setState(SquareType.UNKNOWN);
    1.27 +                    sq.setMine(false);
    1.28 +                }
    1.29 +            }
    1.30          }
    1.31          
    1.32          Random r = new Random();
    1.33 @@ -133,8 +143,10 @@
    1.34          }
    1.35  
    1.36          model.setState(GameState.IN_PROGRESS);
    1.37 -        model.getRows().clear();
    1.38 -        model.getRows().addAll(rows);
    1.39 +        if (rows != model.getRows()) {
    1.40 +            model.getRows().clear();
    1.41 +            model.getRows().addAll(rows);
    1.42 +        }
    1.43      }
    1.44      
    1.45      @ModelOperation static void computeMines(Mines model) {