我在写一个连连看4的游戏,游戏的大致流程是:
- 询问用户想在哪里玩
- 下棋
- 转到电脑上
- 运行算法来决定计算机移动
- 玩电脑走棋
- 重复
我遇到的问题是,当计算机决定其移动(可能需要 10 秒左右)时,如果用户输入任何信息并按回车键,下一次计算机运行询问的功能玩家想要玩的地方,意外的值被作为输入,然后游戏就毁了。
例如,如果玩家要输入此数据流:
1(返回) 4(返回) 2(返回) alskdf(返回) jklgo[2(返回)
计算机会接受这 5 个输入,并将它们视为玩家输入的内容,作为他/她想在接下来的 5 个回合中玩的列。
我需要的是在另一个函数执行计算时忽略任意数量的用户输入的方法,但是一旦该函数完成计算所需的内容,从那时起直到再次调用该计算函数的任何用户输入都应该是被视为有效输入。
这是程序中 main() 函数的相关 block :
while (turn < w_*h_)
{
if (whosTurn == 1) //player's turn
{
playerTurn(board, rowPlayed, colPlayed); //function that asks for user input
printScreen(board);
if (printWin(board, rowPlayed, colPlayed, pDisc)) break;
}
else if (whosTurn == 2) //computer's turn
{
compTurn(board, rowPlayed, colPlayed); //function that does the long calculations
printScreen(board);
cout << "The computer played in column ";
printColor(colPlayed+1, GREEN);
cout << "\n\n";
if (printWin(board, rowPlayed, colPlayed, cDisc)) break;
}
if (whosTurn == 1) whosTurn = 2;
else whosTurn = 1;
turn++;
}
与我的问题相关的部分是 playerTurn()
和 compTurn()
。
最佳答案
在调用 playerTurn 之前尝试 cin.ignore() 在提示更多输入之前清除输入流
关于c++ - 在进行其他计算时忽略用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33247989/