用字符串数组作为井字游戏的游戏板 board,判断该游戏板有没有可能最终形成
游戏板是一个 3 x 3 数组,由字符 “ “,”X” 和 “O” 组成。字符 “ “ 代表一个空位。
两个玩家轮流将字符放入空位,一个玩家执X棋,另一个玩家执O棋
“X” 和 “O” 只允许放置在空位中,不允许对已放有字符的位置进行填充。
当有 3 个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,board生成
分类讨论
public static boolean validBoard(String[] board) {
int xCount = 0;
int oCount = 0;
for (String row : board)
for (char c : row.toCharArray()) {
if (c == 'X') {
xCount++;
}
if (c == 'O') {
oCount++;
}
}
//X与O 一样多,或者X比O多一个(X赢则X多一个,O赢则一样多)
if ((oCount != xCount) && (oCount != (xCount - 1))) {
return false;
}
if (win(board, "XXX") && (oCount != (xCount - 1))) {
return false;
}
if (win(board, "OOO") && (oCount != xCount)) {
return false;
}
return true;
}
public static boolean win(String[] board, String flag) {
for (int i = 0; i < 3; ++i) {
//纵向3连
if (flag.equals("" + board[i].charAt(0) + board[i].charAt(1) +
board[i].charAt(2))) {
return true;
}
//横向3连
if (flag.equals(board[i])) {
return true;
}
}
// \向3连
if (flag.equals("" + board[0].charAt(0) + board[1].charAt(1) +
board[2].charAt(2))) {
return true;
}
// /向3连
if (flag.equals("" + board[0].charAt(2) + board[1].charAt(1) +
board[2].charAt(0))) {
return true;
}
return false;
}