【问题标题】:Tic Tac Toe, playing with PC (random)井字游戏,玩电脑(随机)
【发布时间】:2015-04-01 20:48:49
【问题描述】:
if (turn == tick) {
        /*first player*/
        Form1->Label1->Caption = "X pyr";
        fields[row][kol] = 1;
        Form1->BitBtn1->Glyph->LoadFromFile("tick.bmp");
        turn = tack;
    }

    else {
        do {
            //random
            row = rand() % 3;
            kol = rand() % 3;
        }
        while (fields[row][kol] == 0);

        /*cpu*/
        Form1->Label1->Caption = "CPU";
        fields[row][kol] = 2;
        Form1->BitBtn1->Glyph->LoadFromFile("tack.bmp");
        turn = tick;
    }

}

主要问题是,当我移动时,计算机只点击第一个元素,并且在每次下一步移动后它都会执行相同的操作。 电脑只使用第一个井字游戏棋盘方块。

【问题讨论】:

  • 你能把你的问题说清楚吗?我认为变量rindakolona有问题
  • 好的,做了一点修改。检查第一个帖子。
  • 把问题说清楚怎么样?据我了解,计算机会移动到第一行的第一列,对吗?
  • 是的,你是对的。并且每一个下一步动作都是一样的。

标签: c forms tic-tac-toe


【解决方案1】:

如果我理解正确,fields 变量包含棋盘,其中 0 表示未占用单元,1 表示人类玩家,2 表示 CPU。

此时while的终止条件错误while (fields[row][kol] == 0);,必须在cell被占用时循环(试图寻找空闲cell)。

do {
    //random
    row = rand() % 3;
    kol = rand() % 3;
}
while (fields[row][kol] != 0);

注意:您正在将字段的所有元素初始化为 0,这些元素不会出现在代码中。

【讨论】:

  • 现在变化只发生在第一个方格。当我点击某处时,只会在第一个方格发生变化。
【解决方案2】:

CPU 播放器循环,直到找到不等于 0 的 rowcol 值。如果 fields[row][col] 等于 0,do-while 循环下面的循环意味着退出后 fields[row][col] 将不同于0.

do {
    ...
} while(fields[row][col] == 0)

// fields[row][col] is different than 0 here

在您的情况下,字段值不等于 0 表示人或计算机已经使用了一个正方形,因此计算机每次都执行相同的移动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多