package vn.edu.rmit.sadi;
public class GameBoard {
public Player[][] board = new Player[3][];
public GameBoard() {
for(int i=0; i<3; i++) {
board[i] = new Player[3];
for(int j=0; j<3; j++) {
board[i][j] = Player.None;
}
}
}
public Status move(Player player, Move move) {
board[move.x][move.y] = player;
return getStatusFor(player);
}
private Status getStatusFor(Player player) {
return isWon(player)
? Status.Win
: isFull()
? Status.Tie
: Status.Continue;
}
private boolean isFull() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == Player.None) {
return false;
}
}
}
return true;
}
private boolean isWon(Player player) {
for (int i = 0; i < 3; i++) {
if ((board[i][0] == player) && (board[i][1] == player) && (board[i][2] == player)) {
return true;
}
}
for (int j = 0; j < 3; j++) {
if ((board[0][j] == player) && (board[1][j] == player) && (board[2][j] == player)) {
return true;
}
}
if ((board[0][0] == player) && (board[1][1] == player) && (board[2][2] == player)) {
return true;
}
if ((board[0][2] == player) && (board[1][1] == player) && (board[2][0] == player)) {
return true;
}
return false;
}
}