问题遇到的现象和发生背景
想要用c语言写一款带有限制时间功能的猜数字游戏
也就是开始游戏后给规定时间进行猜
超过时间自动结束游戏
我的解答思路和尝试过的方法
我起初以为是用clock但是那个只能用来计算用时没法限制时间
不清楚是否需要多线程运作
我想要达到的结果
在一个while循环中一直猜数
当给的限制时间结束时 循环终止
问题遇到的现象和发生背景
想要用c语言写一款带有限制时间功能的猜数字游戏
也就是开始游戏后给规定时间进行猜
超过时间自动结束游戏
我的解答思路和尝试过的方法
我起初以为是用clock但是那个只能用来计算用时没法限制时间
不清楚是否需要多线程运作
我想要达到的结果
在一个while循环中一直猜数
当给的限制时间结束时 循环终止
#include <thread>
#include <iostream>
#include <future>
#include <chrono>
#include <random>
#include <string>
#include <sstream>
bool guess_numbers(std::pair<int, int> range, int answer)
{
std::string line;
int num;
while (std::cout << ">>> " && std::getline(std::cin, line))
{
std::istringstream ss(line);
if ((ss >> num) && num == answer)
{
std::cout << "You won. The answer is " << answer << '\n';
return true;
}
else
{
std::cout << "Wrong answer. Please try again.\n";
}
}
return false;
}
int main()
{
auto range = std::make_pair(0, 20);
std::chrono::seconds timeout(5);
std::cout << "Guess a number between [" << range.first << ", " << range.second << "] in " << timeout.count() << " seconds:\n";
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> distrib(range.first, range.second);
auto answer = distrib(gen);
std::future<bool> future = std::async(guess_numbers, range, answer);
if (future.wait_for(timeout) != std::future_status::ready)
std::cout << "\nTime out. You lose. The answer is " << answer << '\n';
exit(0);
}