1.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Thu Mar 06 21:58:38 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) {