如何制作每秒从 30 乘 1 倒计时的计时器?
How to make a timer that counts down from 30 by 1 every second?
我想做一个计时器,每秒显示 30、29 等,然后当有输入时它停止。我知道你可以这样做:
for (int i = 60; i > 0; i--)
{
cout << i << endl;
Sleep(1000);
}
这将输出 60、59 等。但这不允许在程序运行时进行任何输入。我如何制作它,以便您可以在倒计时运行时输入内容?
上下文
这不是家庭作业。我正在制作一个文字冒险游戏,有一个部分,一个敌人冲向你,你有 30 秒的时间来决定你要做什么。我不知道如何使计时器能够允许用户在运行时输入内容。
您的游戏大约每秒 1 帧,因此用户输入是一个问题。通常游戏具有更高的帧速率,如下所示:
#include <Windows.h>
#include <iostream>
int main() {
// Initialization
ULARGE_INTEGER initialTime;
ULARGE_INTEGER currentTime;
FILETIME ft;
GetSystemTimeAsFileTime(&ft);
initialTime.LowPart = ft.dwLowDateTime;
initialTime.HighPart = ft.dwHighDateTime;
LONGLONG countdownStartTime = 300000000; // 100 Nano seconds
LONGLONG displayedNumber = 31; // Prevent 31 to be displayed
// Game loop
while (true) {
GetSystemTimeAsFileTime(&ft); // 100 nano seconds
currentTime.LowPart = ft.dwLowDateTime;
currentTime.HighPart = ft.dwHighDateTime;
//// Read Input ////
bool stop = false;
SHORT key = GetKeyState('S');
if (key & 0x8000)
stop = true;
//// Game Logic ////
LONGLONG elapsedTime = currentTime.QuadPart - initialTime.QuadPart;
LONGLONG currentNumber_100ns = countdownStartTime - elapsedTime;
if (currentNumber_100ns <= 0) {
std::cout << "Boom!" << std::endl;
break;
}
if (stop) {
std::wcout << "Stopped" << std::endl;
break;
}
//// Render ////
LONGLONG currentNumber_s = currentNumber_100ns / 10000000 + 1;
if (currentNumber_s != displayedNumber) {
std::cout << currentNumber_s << std::endl;
displayedNumber = currentNumber_s;
}
}
system("pause");
}
如果你在Linux上运行它,你可以使用经典的select((调用。 在 while-循环中使用时,您可以等待一个或多个文件描述符的输入,同时还提供超时,在此之后必须返回 select(( 调用。 将所有内容包装在一个循环中,您将同时进行倒计时和对标准输入的处理。
https://linux.die.net/man/2/select
相关文章:
- Linux的Cpp上的计时器
- 提升 ASIO 无法识别计时器对象
- 提升 asio 并发计时器取消问题与链
- 使用单体计时器的pthread_cond_timedwait有时会比预期晚超时
- 窗口中的微秒计时器
- 计时器是否从另一个线程启动?
- 如何在 c++ 中创建计时器
- C++回调计时器实现
- 在计时器或主线程外部的命令上销毁/替换线程
- 如何制作每秒从 30 乘 1 倒计时的计时器?
- 保留计时器集合(对象与指针)的最佳方法
- 在网络套接字计时器滴答后增加asio短读错误
- 是否可以仅使用标准 c++/c++11 实现不带"sleep"的计时器?
- 在没有NtSetTimerResolution的Windows上提高计时器分辨率(高分辨率)
- 计时器坏了或者其他什么的
- Arduino倒计时计时器阻止程序的其余部分运行
- OpenGL中的倒计时计时器
- 在Qt中制作倒计时计时器
- 如何在Cocos2d中显示倒计时计时器
- 如何在用c++创建的测验程序中插入一个倒计时计时器