на основе текста — Как реализовать рандомизированный мульти-ответ в переполнении стека

Я создаю текстовую игру на C ++. Однако мне интересно, есть ли способ рандомизировать ответ из заданного количества ответов.

Скажем, у меня был вопрос, и игрок ответил неправильно, я хочу, чтобы игра ответила с заданным ответом с чем-то вроде «Извините, это неверно».

Тем не менее, это не добавляет индивидуальности игре, и поскольку компьютер в данном случае является искусственным интеллектом в этой конкретной игре, когда вы что-то печатаете неправильно, компьютер заставит сказать «я не понимаю», «что такое Вы говорите о ‘, и несколько других ответов.

Теперь мой вопрос: как я могу сделать так, чтобы он случайно выбирал ответ из тех ответов, которые у меня есть?

0

Решение

Учитывая массив ответов:

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];
}
2

Другие решения

Вот еще один пример, использующий 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’, не такое хорошее, как у некоторых других генераторов случайных чисел, но для такого простого примера это, вероятно, нормально.

1

По вопросам рекламы [email protected]