1. 程式人生 > 其它 >井字遊戲

井字遊戲

窮舉

用字串陣列作為井字遊戲版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;
    }
}