【问题标题】:How to check if 'x' or 'o' occurs at least in one column?如何检查“x”或“o”是否至少出现在一列中?
【发布时间】:2017-03-11 17:46:07
【问题描述】:

我做了一个井字游戏,我想检查'x'或'o'是否出现在整列或整行中,游戏板是3X3矩阵。
我写了一个实现它的代码(列部分),但问题是循环只计算第一列。
输出:

计算第一列,x 赢了。


即使列满了“x”,x 也不会赢,游戏会继续。

注意:它是为 x 指定的。在输出中,o 在游戏的其余部分中处于索引 2,2 以用于测试目的。

这是我的代码:

int win(char board[][COL])
{
    int flag = 0;
    int x = 0, o = 0;
    int i = 0, j = 0;
    for (i = 0; i < COL; i++) // this loop checks who won by fillin a column
    {
        if (board[i][j] == 'x')
        {
            x++;
        }
        if (x == COL)
        {
            flag = 1;
            printf("x won!\n");
        }
    }
    return flag;
}

【问题讨论】:

  • 为什么j总是0
  • 我不明白你的全部方法。为什么要在循环内将xCOL 进行比较?该功能应该做什么?对于 TTT,您必须检查行、列和对角线。这里只检查第一,但不能设置标志。使用您的调试器查看代码中实际发生的情况,这将是一次很好的培训!
  • @olaf COL 的值为 3,该 if 语句用于检查 x 是否在列中 3 次(COL 次)。我(部分地并且可能谨慎地)表示它应该涵盖列部分......对于给您带来的不便,我深表歉意,感谢您的关注。
  • 抱歉,我混淆了列和行。但是条件不能在循环内为真!您应该重新阅读 C 书籍中关于 for 循环的章节。

标签: c arrays multidimensional-array tic-tac-toe


【解决方案1】:

您只是在检查第一列。

int win(char board[][COL])
{
    int flag = 0;
    int x = 0, o = 0;
    int i = 0, j = 0;
    for(j = 0; j < 3 ; j++)
    {
       x=0;
       for (i = 0; i < COL; i++) // this loop checks who won by fillin a column
       {
           if (board[i][j] == 'x')
           {
               x++;
           }
           if (x == COL)
           {
               flag = 1;
               printf("x won!\n");
           }
       }
    }
    return flag;
}

【讨论】:

    猜你喜欢
    • 2017-03-14
    • 2021-10-21
    • 2015-07-23
    • 2021-05-17
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多