首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重置kbhit()?

如何重置kbhit()?
EN

Stack Overflow用户
提问于 2018-05-03 02:25:52
回答 2查看 1.2K关注 0票数 0

我正在制作打字游戏,其中随机字母表从屏幕顶部下降到底部,用户需要按下该键才能获得分数。有两个嵌套循环用来实现这种下落效果。外部的while循环生成随机字母表和x轴上的随机位置,而内部的for循环递增y轴坐标,并打印每个y坐标值的字符以使其下降。现在的问题是,当我在for循环中使用kbhit()函数来检查用户是否按下了任何键时,当用户没有按下任何键时,它返回false。但是当用户第一次按下某个键时,它会返回true,并且用户会得到分数。但是当再次为下一个随机字母表调用kbhit()时,它将返回true,无论用户是否已经按下键盘,因为用户之前按下了ket。也许我需要清除键盘缓冲区,但我不知道该怎么做。这是

代码语言:javascript
复制
 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 << " ";

            }

        }
EN

回答 2

Stack Overflow用户

发布于 2018-05-03 02:33:07

ReadConsoleInput documentation page告诉您如何检查输入是否可用(在控制台句柄上等待,如果您想轮询,则可能为零时间)以及如何将其出队(通过调用ReadConsoleInputFlushConsoleInputBuffer)

通过独占地使用console API,您将避免与kbhit()之间的任何不同步,特别是在只有鼠标事件在等待的情况下,因此kbit()返回false,但您仍然希望刷新队列。

票数 0
EN

Stack Overflow用户

发布于 2021-03-09 16:23:49

使用kbhit()检测按键,如果按下了键,则使用getch()重置kbhit()。例如,

代码语言:javascript
复制
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
for (int i = 0; i < 100000; i++){
cout << i << endl;
if (kbhit()){
ch = '#';
getch();
}
else{
ch = '_';
}
cout << ch << endl;
usleep(100000);
gotoxy(0, 0);
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50141220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档