在创建模拟井字游戏的程序时,我遇到了这个C ++代码的问题。游戏运行“正常”,显示获胜者,验证输入等,但如果玩家'X'获胜,则玩家'O'仍然被允许在获胜者宣布之前再次移动。
do
{
int turn = 0;
if (turn % 2 == 0)
{
cout << "Player X, Row and Column: ";
cin >> row >> column;
while (array[(row-1)][(column-1)] != '*')
{
cout << "Invalid move try again \n";
cout << "Player X, Row and Column: ";
cin >> row >> column;
}
array[row-1][column-1] = 'X';
showArray(array);
results = checkWin(array);
}
if (turn % 2 != 0)
{
cout << "Player O, Row and Column: ";
cin >> row >> column;
while (array[row-1][column-1] != '*')
{
cout << "Invalid move try again \n";
cout << "Player O, Row and Column: ";
cin >> row >> column;
}
array[row-1][column-1] = 'O';
showArray(array);
results = checkWin(array);
}
turn++;
}while (results == 0);
我正在使用一个在两个玩家之间交替的do-while循环。当我放置递增'turn ++;'时如果阻止,则程序只允许玩家'X'移动。当我放置'转++;'玩家'X'中的语句如果是块,它会交替出现,但我遇到了上述问题。如果您有任何建议,请给他们。感谢。
答案 0 :(得分:0)
将int turn = 0;
移出您的循环。例如:
int turn = 0;
do {
doSomeThing();
turn++;
} while(someThingHappen());
如果您将int turn = 0
放入循环中,则每个循环都将以turn = 0
答案 1 :(得分:0)
正如@hai_uit所说,将int turn = 0;
移出循环。大多数情况下,在任何循环或if语句之外声明所有变量是个好主意。
答案 2 :(得分:0)
每次循环迭代时,转弯值都会初始化为0,这就是为什么每次玩家'X'都有机会。
所以在循环外放置int turn = 0。