Как реализовать рандомизированный мульти-ответ в C ++

0

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

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

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

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

  • 0
    char* getResponce(){return responceTable[rand()*numresponces];}
  • 1
    @ratchetfreak rand () возвращает число между (включительно) 0 и RAND_MAX и, таким образом, ваш код почти всегда вызывает неопределенное поведение.
Показать ещё 3 комментария
Теги:

2 ответа

2
Лучший ответ

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню