P42-井字游戏-暴力
//井字游戏 /* * 用字符串数组作为井字游戏的游戏板 board,判断该游戏板有没有可能最终形成。 * 游戏板是一个 3 x 3 数组,由字符 " ",“X” 和 “O” 组成。字符 " " 代表一个空位。 * 两个玩家轮流将字符放入空位,一个玩家执X棋,另一个玩家执O棋 * X和O 只允许放置在空位中,不允许对已放有字符的位置进行填充。 * 当有3个相同(且非空)的字符填充任何行、列或对角线时,游戏结束,board生成 * board就是能不能形成这样的棋盘的意思 * */ public class P42 { public static void main(String[] args) { System.out.println(validBoard(new String[]{"xxx", "oxo", "o o"})); //x赢,o棋子比x少1 System.out.println(validBoard(new String[]{"xxx", "oxo", "o "})); } //只有三种结果:x赢,o赢,胜负未分 /* * x赢,有必然条件:x-o = 1,因为是x先手 * o赢,有必然条件:o-x = 0,因为o是后手 * 胜负未分:!(x-o=1 || x-o=0) * */ private static boolean validBoard(String[] board) { int xCount = 0; //x棋的数量 int oCount = 0; for(String row : board){ for(char c : row.toCharArray()){ if(c == 'x'){ xCount++; }else if(c == 'o'){ oCount++; } } } if(xCount != oCount && xCount-oCount!=1){ return false; } //x赢得时候,必然是多一个棋的 if(win(board, "xxx") && xCount-oCount!=1){ return false; } //o赢得时候,必然是棋子相等的 if(win(board, "ooo") && xCount-oCount!=0){ return false; } return true; } public static boolean win(String[] board, String flag){ for(int i=0; i<3; i++){ //纵向3连 if(flag.equals("" + board[0].charAt(i)+board[1].charAt(i)+board[2].charAt(i))){ return true; } //横向3连 if(flag.equals(board[i])){ return true; } } //对角线 if(flag.equals("" + board[0].charAt(0)+board[1].charAt(1)+board[2].charAt(2))){ return true; } if(flag.equals("" + board[0].charAt(2)+board[1].charAt(1)+board[2].charAt(1))){ return true; } return false; } }