我想让一个计时器每秒显示30、29等,然后在有输入时停止。我知道您可以这样做:
for (int i = 60; i > 0; i--)
{
cout << i << endl;
Sleep(1000);
}
这将输出60、59等。但这在程序运行时不允许任何输入。如何做到这一点,以便您在倒计时运行时可以输入内容?
Context
这不是家庭作业。我正在制作一款文字冒险游戏,并且有一个区域,敌人会冲向您,您有30秒的时间来决定要做什么。我不知道如何使计时器能够在运行时允许用户输入内容。
如果在Linux上运行,则可以使用经典的select()调用。在while循环中使用时,您可以等待一个或多个文件描述符的输入,同时还提供了一个超时,之后必须返回select()调用。将所有内容循环包装,就可以同时进行倒数计时和对标准输入的处理。
您的游戏约为每秒1帧,因此用户输入是一个问题。通常,游戏具有较高的帧频,如下所示:
while (true){
CheckTime(); // Start frame, or Sleep(1) and continue. Use this for constant frame rate or delete this for full speed.
ReadInput(); // Use _getch() in conio.h to avoid echo
GameLogic();
Render(); // Write your countdown number if necessary
}
我认为这不是最佳解决方案,但希望对您有所帮助:)
#include <iostream>
#include <Windows.h>
#include <omp.h>
using namespace std;
int main()
{
omp_set_num_threads(2);
volatile bool flag = true;
#pragma omp parallel
{
for (int i = 0; i < 60; i++)
{
if(!flag) break;
if (omp_get_thread_num() == 0)
{
cout << i << endl;
Sleep(1000);
}
if(omp_get_thread_num() == 1)
{
cout<<"asd";
int x;
cin>>x;
flag = false;
}
}
}
return 0;
}
注意:编译此代码时,请使用-fopenmp参数。
像这样g ++ x.cpp -fopenmp
祝您有美好的一天:)