Я разрабатываю простую игру на С++, в стиле погони за точкой, где вы должны щелкнуть нарисованный круг на дисплее, а затем с каждым щелчком он переходит в другое случайное место, но я хочу, чтобы игра закончилась после 60 секунд или около того, запишите счет в текстовый файл, а затем при запуске программы прочитайте из текстового файла и сохраните информацию в массиве и каким-то образом перестройте ее, чтобы создать таблицу рекордов. Я думаю, что могу сам определить высокий балл и щелкнуть мышью в определенной области, но я полностью застрял в создании возможного таймера. Любая помощь приветствуется, ура!
Сделать таймер на С++?
Ответы (4)
В С++ 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>
. Существует boost реализация <chrono>
.
operator "" _Foo
это нормально, но теперь мне кажется, что использование имени в библиотеке в разделе 17.6.4.3 включает макросы? (в отличие от основного определения имени на 3p4). Он начинается с Стандартная библиотека C++ резервирует следующие типы имен: ... макросы, .... Это, по-видимому, ограничивает пользователя строчными/цифровыми литеральными суффиксами после символа подчеркивания, потому что какой-то случайный макрос может заменить _Foo
к чему-то случайному.
- person Johannes Schaub - litb; 25.04.2011
Без привязки к конкретному фреймворку или даже к ОС на это нельзя ответить.
В SDL есть SDL_GetTicks()
, который подходит для этой цели.
В Linux есть clock_gettime
или gettimeofday
общего назначения, которые должны работать почти везде (но будьте осторожны с деталями).
Win32 API имеет несколько вызовов функций, связанных с этим, включая механизмы обратного вызова таймера, такие как GetTickCount
, Timers
и т. д. (статья)
Использование таймеров обычно тесно связано с мемом «бездействующей» обработки. Таким образом, вы также захотите найти эту тему (и именно здесь вступает в действие насос сообщений, потому что насос сообщений решает, когда (например) WM_IDLE
сообщения будут отправлены; Gtk имеет аналогичную концепцию Idle hooks, и я считаю, каждая структура пользовательского интерфейса делает)
Обычно программа с графическим интерфейсом имеет так называемый цикл "перекачки сообщений". Проверка этого таймера должна быть частью вашего цикла:
while(running)
{
if( current_time() > end_time )
{
// time is over ...
break;
}
if( next_ui_message(msg) )
dispatch(msg);
}
Попробуйте это:
//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++;
}
}
- Подробности смотрите по адресу: http://www.programmingtunes.com/creating-timer-c/#sthash.j9WLtng2.dpuf