我会这样做:
#include <random>
int RandomBetween(int p_min, int p_max)
{
static default_random_engine generator;
std::uniform_int_distribution<int> distribution(p_min, p_max);
return distribution(generator);
}
之后,你可以在switch中调用这个函数:
switch(RandomBetween(a, b))
{
...
}
如果你想要一个完整的测验程序的例子,我做了这个:
#include <string>
#include <iostream>
#include <tuple>
#include <chrono>
#include <vector>
#include <algorithm>
#include <random>
std::string ToLower(std::string p_target)
{
std::transform(p_target.begin(), p_target.end(), p_target.begin(), [](unsigned char c) { return std::tolower(c); });
return p_target;
}
int RandomBetween(int p_min, int p_max)
{
static std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(p_min, p_max);
return distribution(generator);
}
class Question
{
public:
Question(const std::string& p_message, const std::string& p_answer, bool p_caseSensitive) :
m_message(p_message),
m_answer(p_answer),
m_caseSensitive(p_caseSensitive)
{}
std::tuple<bool, float> Ask() const
{
std::string answer;
std::cout << m_message << std::endl;
std::chrono::time_point<std::chrono::system_clock> start, end;
start = std::chrono::system_clock::now();
std::cin >> answer;
end = std::chrono::system_clock::now();
return { answer == m_answer || (!m_caseSensitive && ToLower(answer) == ToLower(m_answer)), std::chrono::duration_cast<std::chrono::milliseconds>(end - start).count() / 1000.0f };
}
private:
std::string m_message;
std::string m_answer;
bool m_caseSensitive;
};
int main()
{
bool gameRunning = true;
std::vector<Question> questions;
questions.emplace_back("Capital of France?", "Paris", false);
questions.emplace_back("Is C++ object oriented? [Y/n]", "y", false);
while (gameRunning)
{
const auto& [success, time] = questions[RandomBetween(0, 1)].Ask();
std::string answerSpeed = "(Answered in: " + std::to_string(time) + "s)";
if (success)
{
std::cout << "You are right!" << answerSpeed << std::endl;
}
else
{
std::cout << "You failed... Game is over!" << answerSpeed << std::endl;
gameRunning = false;
}
}
return 0;
}
哪个可以(因为它是随机游戏)输出:
Capital of France?
Paris
You are right!(Answered in: 1.705000s)
Capital of France?
Paris
You are right!(Answered in: 2.368000s)
Capital of France?
Paris
You are right!(Answered in: 1.657000s)
Is C++ object oriented? [Y/n]
y
You are right!(Answered in: 3.927000s)
Capital of France?
I don't know
You failed... Game is over!(Answered in: 12.921000s)