Tic Tac Toe,玩PC(随机)

时间:2015-04-01 20:48:50

标签: c forms tic-tac-toe

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;
    }

}

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

2 个答案:

答案 0 :(得分:0)

如果我理解正确,fields变量包含的板为0表示未占用的单元,1表示人类播放器,2表示CPU。

在这种情况下,while的终端条件是错误的while (fields[row][kol] == 0);,您必须在单元格被占用时循环(尝试搜索空闲单元格)。

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

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

答案 1 :(得分:0)

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

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

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

在你的情况下,字段值不等于0表示人或计算机已经使用过的方格,因此计算机每次都会进行相同的移动。