井字游戏确定获胜者算法

时间:2019-05-22 03:18:20

标签: c tic-tac-toe

我最初打算将此代码发布在Codereview SE上,但是由于我真的不知道以下代码是否可以视为完整代码,因此我认为这里更合适。如果您觉得最好将它发布在其他地方,请随时关闭它。

考虑到井字游戏规则3x3数组作为“ game”输入的“有效”,此算法如何寻找获胜者?

我一般都是C和程序设计的菜鸟,我想知道这段代码的性能/复杂性有多好,因为它与我在SO的其他文章中发现的有所不同。 for循环会使这不必要地复杂吗?

if (game[1][3] == game[2][2] && game[2][2] == game[3][1]) /*antidiagonal check */
    {
        w = game[1][3]; /* w is player X or O */
    }

    t1 = 0;

    for (i=0; i<=2; ++i)
    {
        if (game[i][i] == game[i+1][i+1]) /* main diagonal check */
        {
            t1 += 1;
        }
            if (t1 == 2)
            {
                w = game[i][i];
            }
    }

    for (i=0; i<=2; ++i)
    {
        t2 = 0;
        for (j=0; j<=1; ++j)
        {
            if (game[i][j] == game[i][j+1]) /* row check */
            {
                t2 += 1;
                if (t2 == 2)
                {
                    w = game[i][j];
                }
            }
        }
    }

    for (i=0; i<=1; ++i)
    {
        t3=0;
        for (j=0; j<=2; ++j)
        {
            if (game[i][j] == game[i+1][j]) /* column check */
            {
                t3 += 1;
                if (t3 == 2)
                {
                    w = game[i][j];
                }
            }
        }
    }

    if (t1<2 && t2<2 && t3<3)
    {
        printf("No winner\n");
    }
    else
    {
        printf("%c wins\n", w);
    }

1 个答案:

答案 0 :(得分:0)

井字游戏板有9个图块。

每个图块要么包含var source = document.getElementById("mainTemp").innerHTML; var template = Handlebars.compile(source); var mainData = { data: [ {id:"1",name:"area1", color:"black"}, {id:"2",name:"area2", color:"blue"}, {id:"3",name:"area3", color:"brown"} ] }; document.getElementById("adiv").innerHTML = template(mainData); $('button').click(function(){ $('#bdiv').show(); }) ,要么没有。这意味着您可以使用9位无符号整数来表示每个图块是否具有X;然后在(512个条目)查找表中使用该数字来确定X是否赢了。

以同样的方式;每个磁贴要么带有X,要么没有;因此您可以将其编码为不同的9位无符号整数,并在相同的(512项)查找表中使用它来确定O获胜。

如果板子到处都表示为一对9位整数(避免转换板子的状态),则代码变为:

O

注意:查找表每个条目只需要一位;因此,通过使用位域(以及一些移位/屏蔽来选择正确的位),它可以小到64个字节。当然,您可以编写一个粗略/临时的实用程序为您生成表格,然后将表格“剪切并粘贴”到游戏代码中。