quoridor/src/main/java/cz/xelfi/quoridor/Board.java
changeset 75 6802034b7a6f
parent 48 69e897fe8140
child 92 de3dd5710a5c
     1.1 --- a/quoridor/src/main/java/cz/xelfi/quoridor/Board.java	Sun Aug 30 14:37:47 2009 +0200
     1.2 +++ b/quoridor/src/main/java/cz/xelfi/quoridor/Board.java	Thu Sep 10 23:19:40 2009 +0200
     1.3 @@ -64,6 +64,8 @@
     1.4   * @author Jaroslav Tulach
     1.5   */
     1.6  public final class Board {
     1.7 +    /** winner, if any */
     1.8 +    private final Player winner;
     1.9      /** players */
    1.10      private final List<Player> players;
    1.11      /** fences placed on board */
    1.12 @@ -117,6 +119,7 @@
    1.13              throw new IllegalStateException (ex.getMessage ());
    1.14          }
    1.15          this.turn = 0;
    1.16 +        this.winner = null;
    1.17      }
    1.18      
    1.19      /** Copy constructor that provides players and fences.
    1.20 @@ -133,6 +136,16 @@
    1.21              }
    1.22          }
    1.23          this.turn = turn % players.size();
    1.24 +        this.winner = null;
    1.25 +    }
    1.26 +
    1.27 +    /** Copy constructor for resigning the game */
    1.28 +    private Board(Board previous, int winner) {
    1.29 +        this.players = previous.players;
    1.30 +        this.turn = winner % players.size();
    1.31 +        this.fences = previous.fences;
    1.32 +        this.occupied = previous.occupied;
    1.33 +        this.winner = players.get(this.turn);
    1.34      }
    1.35      
    1.36      /** Returns empty board with default starting position.
    1.37 @@ -158,9 +171,12 @@
    1.38      }
    1.39  
    1.40      /** The player that is supposed to play now.
    1.41 -     * @return the player to do next move
    1.42 +     * @return the player to do next move, null if the game is over
    1.43       */
    1.44      public Player getCurrentPlayer() {
    1.45 +        if (getWinner() != null) {
    1.46 +            return null;
    1.47 +        }
    1.48          return players.get(turn);
    1.49      }
    1.50  
    1.51 @@ -169,6 +185,9 @@
    1.52       * @return the winning player or <code>null</code>
    1.53       */
    1.54      public Player getWinner() {
    1.55 +        if (winner != null) {
    1.56 +            return winner;
    1.57 +        }
    1.58          for (Player p : players) {
    1.59              if (p.endDirection.reached(p)) {
    1.60                  return p;
    1.61 @@ -192,7 +211,11 @@
    1.62          if (move.direction != null) {
    1.63              return move(getCurrentPlayer(), move.direction);
    1.64          } else {
    1.65 -            return fence(getCurrentPlayer(), move.fence);
    1.66 +            if (move.fence != null) {
    1.67 +                return fence(getCurrentPlayer(), move.fence);
    1.68 +            } else {
    1.69 +                return new Board(this, turn + 1);
    1.70 +            }
    1.71          }
    1.72      }
    1.73