美文网首页
P42-井字游戏-暴力

P42-井字游戏-暴力

作者: YonchanLew | 来源:发表于2021-05-28 00:01 被阅读0次
    //井字游戏
    /*
    * 用字符串数组作为井字游戏的游戏板 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;
        }
    }
    

    相关文章

      网友评论

          本文标题:P42-井字游戏-暴力

          本文链接:https://www.haomeiwen.com/subject/mkwbjltx.html