minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java
changeset 164 b56bc5060fac
parent 163 823630089369
child 165 276db4d4d795
     1.1 --- a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Fri Jun 27 15:05:03 2014 +0200
     1.2 +++ b/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java	Fri Jun 27 15:25:21 2014 +0200
     1.3 @@ -41,7 +41,7 @@
     1.4  })
     1.5  public final class MinesModel {
     1.6      enum GameState {
     1.7 -        IN_PROGRESS, WON, LOST;
     1.8 +        IN_PROGRESS, MARKING_MINE, WON, LOST;
     1.9      }
    1.10      
    1.11      @Model(className = "Row", properties = {
    1.12 @@ -62,7 +62,7 @@
    1.13      
    1.14      enum SquareType {
    1.15          N_0, N_1, N_2, N_3, N_4, N_5, N_6, N_7, N_8,
    1.16 -        UNKNOWN, EXPLOSION, DISCOVERED;
    1.17 +        UNKNOWN, EXPLOSION, DISCOVERED, MARKED;
    1.18          
    1.19          final boolean isVisible() {
    1.20              return name().startsWith("N_");
    1.21 @@ -100,6 +100,12 @@
    1.22          model.setState(GameState.LOST);
    1.23      }
    1.24      
    1.25 +    @Function static void markMine(Mines model) {
    1.26 +        if (model.getState() == GameState.IN_PROGRESS) {
    1.27 +            model.setState(GameState.MARKING_MINE);
    1.28 +        }
    1.29 +    }
    1.30 +    
    1.31      @ModelOperation static void init(Mines model, int width, int height, int mines) {
    1.32          List<Row> rows = model.getRows();
    1.33          if (rows.size() != height || rows.get(0).getColumns().size() != width) {
    1.34 @@ -224,9 +230,20 @@
    1.35      }
    1.36      
    1.37      @Function static void click(Mines model, Square data) {
    1.38 +        if (model.getState() == GameState.MARKING_MINE) {
    1.39 +            if (data.getState() == SquareType.UNKNOWN) {
    1.40 +                data.setState(SquareType.MARKED);
    1.41 +            }
    1.42 +            model.setState(GameState.IN_PROGRESS);
    1.43 +            return;
    1.44 +        }
    1.45          if (model.getState() != GameState.IN_PROGRESS) {
    1.46              return;
    1.47          }
    1.48 +        if (data.getState() == SquareType.MARKED) {
    1.49 +            data.setState(SquareType.UNKNOWN);
    1.50 +            return;
    1.51 +        }
    1.52          if (data.getState() != SquareType.UNKNOWN) {
    1.53              return;
    1.54          }