井字遊戲
阿新 • • 發佈:2021-08-05
窮舉
用字串陣列作為井字遊戲版board,判斷該遊戲板有沒有可能最終形成
遊戲板是一個3x3陣列,由字元"","X"和"O"組成。字元""代表一個空位。
兩個玩家輪流將字元放入空位,一個玩家執X棋,另一個玩家執O棋
"X"和"O"只允許放置在空位中,不允許對以放有字元的位置進行填充。
當有3個相同(且非空)的字元填充任何行、列或對角線時,遊戲結束,board生成
public class TicTacToe { public static void main(String[] args) { System.out.println(validBoard(new String[]{"XXX","OXO","O O"})); } public static boolean validBoard(String[] board){ //X贏了, X-O=1 //O贏了, X-O=0 //勝負未分 int xCount=0,oCount=0; for (String row : board){ for (char column : row.toCharArray()){ if (column=='X'){ xCount++; } if (column=='O'){ oCount++; } } } if (xCount != oCount && xCount-oCount !=1){ return false; } if (win(board,"XXX")&& xCount-oCount !=1){ return false; } if (win(board,"OOO")&& xCount-oCount !=0){ return false; } return true; } 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; } //橫向 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[2].charAt(2)+board[1].charAt(1)+board[0].charAt(0))){ return true; } return false; } }