Как сделать выбор в зависимости от полученого случайного числа?
Я получаю случайное число ( от 0 - 100 ( не целое) ) и нужно например что если число меньше или равно 10, то сделать что-то, а если число больше 10, но меньше или равно 20, то выполнить что-то.
Проблема того способа, который у меня - это то, что шансы могут быть одинаковы и тогда выполнится первое такое условие. Я исправил это костылем, запихнув одинаковые шансы друг в друга, но если шансы изменить на неодинаковые, то все перестанет работать. Как это можно исправить?
Код:
if (RandomChance <= ThisBox.LegendaryBrawlerChance)
{
GetBrawler(Rarity.Legendary);
}
else if (RandomChance <= ThisBox.MythicalBrawlerChance && RandomChance > ThisBox.LegendaryBrawlerChance)
{
GetBrawler(Rarity.Mythical);
}
else if (RandomChance <= ThisBox.EpicBrawlerChance && RandomChance > ThisBox.MythicalBrawlerChance)
{ // Костыль
int random = Random.Range(0, 2);
if (random == 0)
{
GetBrawler(Rarity.Epic);
}
else
{
GetBrawler(Rarity.Chromatic);
}
}
else if (RandomChance <= ThisBox.SuperRareBrawlerChance && RandomChance > ThisBox.EpicBrawlerChance)
{
GetBrawler(Rarity.SuperRare);
}
else
{
GetBrawler(Rarity.Rare);
}
Ответы (1 шт):
Автор решения: Yaroslav
→ Ссылка
Лол, как раз только что писал.
using System;
using System.Linq;
public class Foo
{
public Foo ()
{
// шансы в пропорциях
float[] Proportions = new[] { 5f, 15f, 20f }; // в сумме 40
// 0: 12.5% (5/40)
// 1: 37.5% (15/40)
// 2: 50% (20/40)
int Index = GetRandomIndex(Proportions);
}
public int GetRandomIndex (float[] proportions)
{
float ProportionsSum = proportions.Sum();
float RandomValue = UnityEngine.Random.Range(0, ProportionsSum);
for (int i = 0; i < proportions.Length; i++)
if (RandomValue > proportions[i])
RandomValue -= proportions[i];
else
return i;
throw new Exception("You are suck! Return it as it was.");
}
}