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