liudabai__ 2022-07-12 18:44 采纳率: 66.7%
浏览 37
已结题

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

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

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

img

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

谢谢各位!

  • 写回答

2条回答 默认 最新

  • 浪客 2022-07-12 21:41
    关注

    多线程搞起来

    简单示例,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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月27日
  • 已采纳回答 7月19日
  • 创建了问题 7月12日

悬赏问题

  • ¥15 r语言xlsx包下载后使用时出现了下列问题该如何解决
  • ¥15 Arcgis河网分级报错
  • ¥200 java+appium2.1+idea
  • ¥20 请帮我做一个EXE的去重TXT文本
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询