Есть вот такой код.
(int Chance, ThingType prize)[] chances =
{
(Chance: 50, prize: ThingType.Keg),
(Chance: 50, prize: ThingType.Health),
};
int chance = Random.Range(0, 100) + 1;
for (int index = 0; index < chances.Length; index++)
{
var pair = chances[index];
if (chance <= pair.Chance)
return pair.prize;
}
return ThingType.Chest;
Он позволяет выбрать случайный приз исходя из того, что все вероятности совокупно образуют 100.
Но, если в этом массиве кортежей есть вещи с одинаковым шансом, то получается что будет железно выпадать первая по списку - в данном случае это ThingType.Keg
и никогда - вторая по списку, т.е. ThingType.Keg
Как написать чтобы он мог успешно обрабатывать массивы кортежей с равными и неравными вероятностями? Ну т.е. ожидается что то примерно такое
на вход
(int Chance, ThingType prize)[] chances =
{
(Chance: 70, prize: ThingType.Gold)
(Chance: 30, prize: ThingType.Kind),
(Chance: 50, prize: ThingType.Keg),
(Chance: 50, prize: ThingType.Health),
};
На выходе -
с 35% шансом вернет ThingType.Gold
с 15% шансом вернет ThingType.Kind
с 25% шансом вернет ThingType.Keg
с 25% шансом вернет ThingType.Health
Но что то одно должно вернуть точно
Он позволяет выбрать случайный приз исходя из того, что все вероятности совокупно образуют 100.
Нет, он этого не делает.
double total = sum of all Chance values;
int chance = Random.Range(0, 100) + 1;
int current = 0;
for (int index = 0; index < chances.Length; index++)
{
var pair = chances[index];
current = current + pair.Chance / total * 100;
if (chance <= current)
return pair.prize;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Помогите, пожалуйста, разобраться с проблемой вызова Partial View
Всех приветствуюМне нужно вводить определенные данные в текстовые поля сайта после загрузки страницы
подскажите пожалуйста, мне нужно вызвать public class CallSKP из другого метода, чтоб использовать там значение переменной "text"как это сделать?