diff -r 03bec9dcc860 -r 8ae7a8464c52 minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Mon Feb 10 16:50:08 2014 +0100 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Sun Mar 09 15:03:01 2014 +0100 @@ -111,13 +111,23 @@ } @ModelOperation static void init(Mines model, int width, int height, int mines) { - List rows = new ArrayList(height); - for (int y = 0; y < height; y++) { - Square[] columns = new Square[width]; - for (int x = 0; x < width; x++) { - columns[x] = new Square(SquareType.UNKNOWN, false); + List rows = model.getRows(); + if (rows.size() != height || rows.get(0).getColumns().size() != width) { + rows = new ArrayList(height); + for (int y = 0; y < height; y++) { + Square[] columns = new Square[width]; + for (int x = 0; x < width; x++) { + columns[x] = new Square(SquareType.UNKNOWN, false); + } + rows.add(new Row(columns)); } - rows.add(new Row(columns)); + } else { + for (Row row : rows) { + for (Square sq : row.getColumns()) { + sq.setState(SquareType.UNKNOWN); + sq.setMine(false); + } + } } Random r = new Random(); @@ -133,8 +143,10 @@ } model.setState(GameState.IN_PROGRESS); - model.getRows().clear(); - model.getRows().addAll(rows); + if (rows != model.getRows()) { + model.getRows().clear(); + model.getRows().addAll(rows); + } } @ModelOperation static void computeMines(Mines model) {