Функция 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 );
}

Теперь вы можете играть с эмоциями игрока, как в Вегасе.

Другие вопросы по тегам