Функция Rand, генерировать вероятность по 3 значениям (для простого игрового автомата)?
Я делаю простой (терминальный) проект игрового автомата, в котором в терминале будут выведены 3 названия фруктов, и если они все одинаковые, то выигрывает игрок.
Я не могу понять, как сделать установленную вероятность того, что игрок выиграет раунд (например, вероятность примерно 40%). На данный момент у меня есть:
this->slotOne = rand() % 6 + 1; // chooses rand number for designated slot
this->oneFruit = spinTOfruit(this->slotOne); //converts rand number to fruit name
this->slotTwo = rand() % 6 + 1;
this->twoFruit = spinTOfruit(this->slotTwo);
this->slotThree = rand() % 6 + 1;
this->threeFruit = spinTOfruit(this->slotThree);
который выбирает "фрукт" на основе числа, но каждый из трех слотов имеет шанс 1 к 6 (видя, что есть 6 фруктов). Поскольку каждый слот имеет шанс 1/6, вероятность выигрыша невероятно мала.
Как бы это исправить, чтобы создать лучшие шансы (или даже лучше, выбранные шансы, изменяя шансы по желанию)?
Я думал об изменении вторых двух спинов на меньшее количество опций (например, rand()%2), но это заставило бы последние два слота каждый раз выбирать одну и ту же пару фруктов.
Ссылка на мой проект: https://github.com/tristanzickovich/slotmachine
1 ответ
Чит.
Сначала решите, выиграет игрок или нет
const bool winner = ( rand() % 100 ) < 40 // 40 % odds (roughly)
Затем придумайте результат, который поддерживает ваше решение.
if ( winner )
{
// Pick the one winning fruit.
this->slotOne = this->slotTwo = this->slotThree = rand() % 6 + 1;
}
else
{
// Pick a failing combo.
do
{
this->slotOne = rand() % 6 + 1;
this->slotTwo = rand() % 6 + 1;
this->slotThree = rand() % 6 + 1;
} while ( slotOne == slotTwo && slotTwo == slotThree );
}
Теперь вы можете играть с эмоциями игрока, как в Вегасе.