我正在制作打字游戏,其中随机字母从屏幕顶部下降到底部,用户需要按下该键才能获得分数。有两个嵌套循环用于产生这种下降效果。外部 while 循环生成随机字母和 x 轴上的随机位置,而内部 for 循环递增 y 轴坐标并打印每个 y 坐标值的字符以使其下降。现在的问题是,当我在 for 循环中使用 kbhit() 函数来检查用户是否按下了任何键时,当用户没有按下任何键时它返回 false。但是当用户第一次按下一个键时,它返回 true 并且用户得到分数。但是当为下一个随机字母再次调用 kbhit() 时,无论用户是否敲击键盘,它都会返回 true,因为用户之前按下了 ket。可能是我需要清除键盘缓冲区,但我不知道该怎么做。这是
while (true) {
ch = rand() % 26 + 65;
xPos = rand() % (x_end - x_start - 1) + x_start + 1;
for (int i = y_start + 1; i < y_end - 1 && !kbhit(); i++) {
cur_pos.X = xPos;
cur_pos.Y = i;
SetConsoleCursorPosition(console_handle, cur_pos);
Sleep(150);
cout << " ";
cur_pos.X = xPos;
cur_pos.Y = i + 1;
SetConsoleCursorPosition(console_handle, cur_pos);
cout << ch;
if (i == y_end - 2) {
cur_pos.X = xPos;
cur_pos.Y = i + 1;
SetConsoleCursorPosition(console_handle, cur_pos);
cout << ch;
Sleep(150);
cur_pos.X = xPos;
cur_pos.Y = i + 1;
SetConsoleCursorPosition(console_handle, cur_pos);
cout << " ";
}
}