Мне нужно сделать так, чтобы разные призы выпадали с разной вероятностью. Например, чтобы “Награда A” выпадала в 50% случаев, “Награда B” в 30%, а остальные реже. Сейчас все сегменты имеют равные шансы.
Как можно реализовать функцию, которая будет контролировать итоговый результат на основе заданных процентов? Нужно чтобы пользователь видел настоящее вращение колеса, но результат определялся заранее по моим правилам вероятности.
Буду благодарен за любые идеи или готовые решения!
Создай массив с вероятностями для каждого приза. Сгенерируй случайное число и проверь, какой приз выпал по весам. Потом просто рассчитай угол поворота колеса. Какие шансы хочешь выставить?
Делал такое в своем проекте. Создаешь weighted random функцию - суммируешь все веса, генеришь число от 0 до этой суммы, проходишь по массиву пока не найдешь нужный диапазон. Потом просто правильно рассчитываешь угол для сегмента, чтобы колесо остановилось где надо. В Winwheel есть параметр для финального угла поворота.
Проблему можно решить с помощью генерирования результата заранее, основываясь на вероятностях призов. Я делал что-то похожее для своего колеса фортуны. Сначала создаю массив вероятностей, например, [50, 30, 5, 5, 5, 5], а затем выбираю индекс с помощью случайной функции, учитывающей эти веса. После этого вычисляю нужный угол для сегмента и передаю его в startAnimation() как параметр stopAngle. Таким образом, колесо крутится естественно, но всегда останавливается на нужном призе. Пользователи не догадываются, что результат заранее определён.