我正在开发一个简单的c ++游戏,一个追逐点式的游戏,你必须在显示器上单击一个绘制的圆圈,然后每次点击都会跳转到另一个随机位置,但我想制作游戏在60秒左右结束后,将分数写入文本文件,然后在启动从文本文件中读取的程序并将信息存储到数组中并以某种方式重新排列以创建高分表。 我想我可以弄清楚自己在某个区域的高分和鼠标点击,但我完全坚持创建一个可能的计时器。 任何帮助赞赏,欢呼!
答案 0 :(得分:19)
在C ++ 11中,可以轻松访问计时器。例如:
#include <chrono>
#include <iostream>
int main()
{
std::cout << "begin\n";
std::chrono::steady_clock::time_point tend = std::chrono::steady_clock::now()
+ std::chrono::minutes(1);
while (std::chrono::steady_clock::now() < tend)
{
// do your game
}
std::cout << "end\n";
}
您的平台可能支持<chrono>
,也可能不支持<chrono>
。 {{1}}已实施boost。
答案 1 :(得分:1)
不参考特定框架甚至操作系统,这是无法回答的。
在SDL中,SDL_GetTicks()
符合此目的。
在Linux上,通用目的clock_gettime
或gettimeofday
几乎可以在任何地方使用(但要注意细节)。
Win32 API有几个与此相关的函数调用,包括Timer回调机制,例如GetTickCount
,Timers
等。(article)
使用计时器通常与“空闲”处理的模因密切相关。所以你也想搜索那个主题(这就是消息泵的用武之地,因为消息泵决定何时(例如)WM_IDLE
消息被发送; Gtk有类似的空闲挂钩概念和我认为几乎每个UI框架都会这样做)
答案 2 :(得分:0)
通常GUI程序都有所谓的“消息泵”循环。检查该计时器应该是循环的一部分:
while(running)
{
if( current_time() > end_time )
{
// time is over ...
break;
}
if( next_ui_message(msg) )
dispatch(msg);
}
答案 3 :(得分:0)
试试这个:
//Creating Digital Watch in C++
#include<iostream>
#include<Windows.h>
using namespace std;
struct time{
int hr,min,sec;
};
int main()
{
time a;
a.hr = 0;
a.min = 0;
a.sec = 0;
for(int i = 0; i<24; i++)
{
if(a.hr == 23)
{
a.hr = 0;
}
for(int j = 0; j<60; j++)
{
if(a.min == 59)
{
a.min = 0;
}
for(int k = 0; k<60; k++)
{
if(a.sec == 59)
{
a.sec = 0;
}
cout<<a.hr<<" : "<<a.min<<" : "<<a.sec<<endl;
a.sec++;
Sleep(1000);
system("Cls");
}
a.min++;
}
a.hr++;
}
}