注册 登录
编程论坛 C++教室

求助kbhit函数怎么用

zbh120307 发布于 2024-05-26 19:24, 2319 次点击
最近想做一个纯文字游戏,比如:我想一边让NPC 10秒执行一次任务(如食物每十秒钟增加10),一边让玩家免回车键盘输入(如操控玩家按k键砍树),并让两者同时进行。网上说最好用kbhit函数,请问该如何实现?(若其他函数或手写函数也行,版本为Windows)
5 回复
#2
forever742024-05-26 19:48
windows下还是得研究WIN32 API。
#3
zbh1203072024-05-26 19:56
最好是kbhit函数

#4
rjsp2024-05-27 10:24
程序代码:
#include <conio.h>

#include <print>
#include <chrono>
#include <thread>

int main( void )
{
    unsigned 食物 = 0;
    auto last_time = std::chrono::steady_clock::now();

    for( ; ; std::this_thread::yield() )
    {
        if( auto t=std::chrono::steady_clock::now(); t-last_time>=std::chrono::seconds(10) )
        {
            last_time = t;
            食物 += 10;
            std::println( "食物 = {}", 食物 );
        }

        if( _kbhit() )
        {
            int ch0=_getch(), ch1=0;
            if( ch0==0x00 || ch0==0xE0 )
                ch1 = _getch();

            if( ch0 == 'k' )
            {
                std::println( "砍树" );
            }
        }
    }
}
#5
apull2024-05-27 10:28
可以用多线程,一个线程管NPC,另一个线程监控键盘输入。
程序代码:

if(kbhit())
{
    char ch=getcahr();
    if(ch=='k')
        do something
}
#6
zbh1203072024-05-27 20:43
谢谢

1