# HG changeset patch # User Jaroslav Tulach # Date 1394373781 -3600 # Node ID 8ae7a8464c52741bf6ecf08cc05f9421d253c39c # Parent edf8e8c4abc07044351bfeabdb5d88d897b8b519 Reuse existing field if it is of the same size diff -r edf8e8c4abc0 -r 8ae7a8464c52 minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java Thu Mar 06 21:58:38 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) {