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游戏板方块。
答案 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播放器循环,直到找到row
和col
值不等于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表示人或计算机已经使用过的方格,因此计算机每次都会进行相同的移动。