![](/img/trans.png)
[英]How to keep track of letters already guessed in Hangman game for C++?
[英]Keep track of time in a game loop in C++
從游戲/程序開始以來,如何跟蹤以秒和毫秒為單位的時間? 我可以使用clock()
函數,但我聽說它不准確。 有沒有更好的辦法?
你可以在C ++中使用chrono庫這是一個代碼示例:
#include <chrono>
#include <iostream>
using namespace std;
using namespace std::chrono;
int main() {
high_resolution_clock::time_point t1 = high_resolution_clock::now();
high_resolution_clock::time_point t2 = high_resolution_clock::now();
duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
cout << time_span.count() << " seconds\n";
return 0;
}
注意這個c ++ 11,所以要編譯它,你應該使用標志-std = c ++ 11
$ g++ -std=c++11 test.cpp -o test
這段確切的代碼在我的電腦上給了4e-07秒。
希望有所幫助。
跨平台且簡單的解決方案是使用計時庫
例:
#include <iostream>
#include <chrono>
void gameFunction()
{
// start()
// end()
}
int main()
{
auto t1 = std::chrono::high_resolution_clock::now();
gameFunction();
auto t2 = std::chrono::high_resolution_clock::now();
auto elapsed_time = std::chrono::duration_cast<std::chrono::microseconds>( t2 - t1 ).count();
std::cout << elapsed_time << std::endl;
return 0;
}
最后請注意,為此需要至少使用C ++ 11,因此請將-std =標志設置為至少c ++ 11。 例如:
g++ -std=c++11 game.cpp -o game
我強烈建議你看看手工制作的英雄 。 凱西記錄了一系列視頻集中的整個游戲。 在其中一篇早期劇集中,他討論了使用QueryPerformanceCounter
和QueryPerformanceFrequency
確定Windows上的掛鍾時間。
他還討論了使用cpu循環計數,盡管只有假設處理器時鍾速度恆定才有用。
他在后面的劇集中再次談到這些問題: https : //hero.handmade.network/episode/game-architecture/day113和https://hero.handmade.network/episode/game-architecture/day177
由於您正在尋找游戲循環中的解決方案,因此即使您使用@Pranshu的跨平台解決方案,這些視頻也可能至少會引起您的興趣。 對於使用平台相關方法的游戲,您可能無法獲得更准確的時鍾。
我要指出, high_resolution_clock
提供了庫所知的系統可用的最高分辨率時鍾,因此它可能不比使用system_clock
或steady_clock
更精確。 (它在我的OSX盒子上使用steady_clock
。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.