Я создаю текстовую игру в 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", не так хорошо, как некоторые другие генераторы случайных чисел, но для такого простого примера, вероятно, это ОК.
char* getResponce(){return responceTable[rand()*numresponces];}
0
иRAND_MAX
и, таким образом, ваш код почти всегда вызывает неопределенное поведение.