首页 文章

找到tic tac toe胜利者的算法[关闭]

提问于
浏览
-3

在3x3 Tic tac toe游戏中找出胜者的最佳最佳方式是什么?建议请

2 回答

  • 2

    我假设您正在使用 Booleans 的双维数组 . 由于布尔值可以有三个值(null,true和false) . 由于在任何给定时间只有2名玩家可以玩,因此您只需要三个值 . 未定义,玩家1和玩家2 .

    只要大小超过 1 ,这是一个适用于任何 Boolean 数组的方法 . 如果 true 获胜,它将返回 true ,如果 false 获胜,则返回 false ,如果还没有获胜者,则返回 null .

    public static Boolean getWinner(Boolean[][] grid) {
        if (grid == null)
            return null;
        int size = grid.length;
        if (size == 0)
            return null;
        if (size == 1 && (grid[0][0] != null)) {
            return grid[0][0];
        }
        boolean flag = true;
        // checks horizontal
        for (int index = 0; index <= size - 1; index++) {
            flag = true;
            for (int i = 1; i <= size - 1; i++) {
                if (grid[index][i] != grid[index][i - 1]) {
                    flag = false;
                    break;
                }
            }
            if (flag)
                return grid[index][0];
        }
        // checks vertical
        for (int index = 0; index <= size - 1; index++) {
            flag = true;
            for (int i = 1; i <= size - 1; i++) {
                if (grid[i][index] != grid[i - 1][index]) {
                    flag = false;
                    break;
                }
            }
            if (flag)
                return grid[0][index];
        }
        // checks diagonal
        flag = true;
        for (int index = 1; index <= size - 1; index++) {
            if (grid[index][index] != grid[index - 1][index - 1]) {
                flag = false;
                break;
            }
        }
        if (flag)
            return grid[0][0];
        flag = true;
        for (int index = 1; index <= size - 1; index++) {
            if (grid[size - index - 1][index] != grid[size - index][index - 1]) {
                flag = false;
                break;
            }
        }
        if (flag)
            return grid[size - 1][0];
        return null;
    }
    

    旁注:如果你使用 Enum 而不是 Boolean 那么你只需要改变第一行的两个 Booleans 和所有 ==equals

  • 1

    这些功能应该这样做 . 当我做自己的井字游戏时,我曾使用过角色阵列 .

    int  rowcheck(char ch[3][3])
    {
        int i;
        char ans;
        for(i=0;i<3;i++)
        {
            if(ch[i][0]==ch[i][1] && ch[i][1]==ch[i][2])
            {
                ans=ch[i][0];
                break;
            }
        }
        if(ans=='O')
        return 1;
        else if(ans=='X')
        return 2;
        else
        return 0;
    }
    int  colcheck(char ch[3][3])
    {
        int i;
        char ans;
        for(i=0;i<3;i++)
        {
            if(ch[0][i]==ch[1][i] && ch[1][i]==ch[2][i])
            {
                ans=ch[0][i];
                break;
            }
        }
        if(ans=='O')
        return 1;
        else if(ans=='X')
        return 2;
        else
        return 0;
    }
    int  diagcheck(char ch[3][3])
    {
        char ans;
        if(ch[0][0]==ch[1][1] && ch[1][1]==ch[2][2])
        ans=ch[0][0];
        if(ch[0][2]==ch[1][1] && ch[1][1]==ch[2][0])
        ans=ch[0][2];
        if(ans=='O')
        return 1;
        else if(ans=='X')
        return 2;
        else
        return 0;
    }
    

    如果1返回,则玩家1获胜,否则玩家2获胜 . 查看此链接以获取更多信息:

    https://keepkoding.wordpress.com/2015/12/12/everybody-knows-tic-tac-toe/

    请注意,此链接在C中,但逻辑很容易理解 .

相关问题