Я создаю текстовую игру на C ++. Однако мне интересно, есть ли способ рандомизировать ответ из заданного количества ответов.
Скажем, у меня был вопрос, и игрок ответил неправильно, я хочу, чтобы игра ответила с заданным ответом с чем-то вроде «Извините, это неверно».
Тем не менее, это не добавляет индивидуальности игре, и поскольку компьютер в данном случае является искусственным интеллектом в этой конкретной игре, когда вы что-то печатаете неправильно, компьютер заставит сказать «я не понимаю», «что такое Вы говорите о ‘, и несколько других ответов.
Теперь мой вопрос: как я могу сделать так, чтобы он случайно выбирал ответ из тех ответов, которые у меня есть?
Учитывая массив ответов:
int numResponses = 10;
std::string[] responses = { // fill responses }
Ты можешь использовать <random>
Вот настройка вашего генератора случайных чисел:
std::random_device device;
std::mt19937 generator(device());
std::uniform_int_distribution<> distributor(0, numResponses - 1);
и где-то в вашем коде:
if(badresponse)
{
int index = distributor(generator);
std::cout << responses[index];
}
Вот еще один пример, использующий srand с текущим временем в качестве начального числа:
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <string>
#include <vector>
using namespace std;
int main()
{
// Use c++11 initializer list for vector
vector<string> responses{"Response A", "Response B", "Response C"};
// use current time as random seed
srand(time(0));
int r = rand() % responses.size();
cout << responses[r] << endl;
}
Примечание: качество случайных чисел, сгенерированных ‘rand’, не такое хорошее, как у некоторых других генераторов случайных чисел, но для такого простого примера это, вероятно, нормально.