P42-井字遊戲-暴力
阿新 • • 發佈:2022-04-11
//井字遊戲 /* * 用字串陣列作為井字遊戲的遊戲板 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; } }