我是C++的初学者,并试图编写一个基于C++控制台的蛇游戏。当我不停地按下钥匙时,我无法移动蛇,我就被卡住了。现在我只需按一次键就可以了,但是我仍然不理解_kbhit()的函数,它帮助我完成了它。
void snake_movement(){
if(_kbhit())
switch (getch())
{
case 'w':
y_cordinate--;
break;
case 'a':
x_cordinate--;
break;
case 's':
y_cordinate++;
break;
case 'd':
x_cordinate++;
break;
default:
break;
}
}发布于 2020-06-16 00:45:54
_getch()是一个阻塞函数。如果输入缓冲区中没有可用的按键,它将等待键盘在输入缓冲区中可用。所以你的程序被卡在_getch()里面,直到一个键被按下--这就是为什么除非你按下键,否则它就不能“工作”,这样_getch()就可以继续返回到你的程序。它仍然会被“卡住”,因为新的击键只有在键重复的速度下才可用。也就是说:在最好的情况下,_getch()可能每秒返回几十次。但是,只有当一个键被按下,并且操作系统支持该键的自动重复时。
另一方面,_kbhit()不阻塞。如果输入缓冲区中没有可用按键,则它将立即返回零值。否则,它将返回一个非零值。这表示密钥是可用的,您可以调用_getch()来获取它。_kbhit()返回非零保证_getch()不会阻塞,也就是说它不会等待,但会立即返回所需的结果。
https://stackoverflow.com/questions/62399203
复制相似问题