关于倒计时和输入不能兼容的问题以及更好的输入办法

我想做一个c++的迷宫,有倒计时,还要移动

问题:如果我的循环里装了按键,那么我就不能循环时间,不然时间会知道我按下按键才刷新一次,就不能做到倒计时的作用了。

img

有没有一种办法:让输入按键时,无论有没有按键都直接跳过?没有的话,可以告诉我解决问题的办法吗?

谢谢各位!

多线程搞起来

简单示例,VC2022:

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;

bool bTIME = true;
DWORD WINAPI ThreadFun(LPVOID parg)
{
    int time = *((int *)parg);
    HANDLE hOut;
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = {(SHORT)70, 0};
    CONSOLE_SCREEN_BUFFER_INFO CInfo;

    while (time >= 0)
    {
        GetConsoleScreenBufferInfo(hOut, &CInfo); //获取当前光标位置
        SetConsoleCursorPosition(hOut, pos);      //设置倒计时光标

        cout << setw(2) << setfill('0') << time << endl;
        SetConsoleCursorPosition(hOut, CInfo.dwCursorPosition); //恢复当前光标
        Sleep(1000);
        time--;
    }
    cout << "倒计时时间到" << endl;
    bTIME = false;
    return 1;
}

int main()
{
    int time = 20;
    DWORD dwThreadId = -1;
    HANDLE handle = CreateThread(NULL, 0, ThreadFun, (PVOID)&time, 0, &dwThreadId);
    WaitForSingleObject(handle, 0);
    string str = "";
    do
    {
        cin >> str;
        cout << str << endl;
    } while (str != "stop" && bTIME);
    TerminateThread(handle, 0);
    cout << "游戏结束!" << endl;

    getchar();
    return 0;
}

直接判断_kbhit()就行,如果有按键,值就不为0。
不需要多线程。

#include<conio.h>
for(...)
{
    if(_kbhit())
    {
        char ch=_getch();
        处理ch按键
    }
}