package com.packtpub.storm.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class GameState implements Serializable {
private static final long serialVersionUID = 1L;
private Board board;
private List<Board> history;
private String player;
static private Random generator = new Random();
public GameState(Board board, List<Board> history, String player) {
this.board = board;
this.history = history;
this.player = player;
}
public String toString() {
StringBuilder sb = new StringBuilder("GAME [");
sb.append(board.toKey()).append("]");
sb.append(": player(").append(player).append(")\n");
sb.append(" history [");
for (Board b : history) {
sb.append(b.toKey()).append(",");
}
sb.append("]");
return sb.toString();
}
public Board getBoard() {
return board;
}
public List<Board> getHistory() {
return history;
}
public String getPlayer() {
return player;
}
public static GameState playAtRandom(Board currentBoard, String player) {
List<Board> history = new ArrayList<Board>();
while (!currentBoard.isEndState()) {
List<Board> boards = currentBoard.nextBoards(player);
int move = generator.nextInt(boards.size());
history.add(currentBoard);
player = Player.next(player);
currentBoard = boards.get(move);
}
return new GameState(currentBoard, history, player);
}
public int score() {
return this.board.score(this.player);
}
}