井字游戏

用字符串数组作为井字游戏版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;
    }
}
上一篇:生命游戏


下一篇:2021-07-31