Как сделать чтобы можно было установить шанс выпадения числа в процентах.
Например пишем:
int = rnd Random.Range(1, 6);
//Для 1 = 40℅
//Для 2 = 20%
//Для 3 = 10%
//Для 4 = 20%
//Для 5 = 10%
//Итого 100%
И для каждого числа делаем процент
А 6 Unity почему-то не учитывает и выдаёт только числа 1 2 3 4 5
Для последовательных значений:
int[] chances = {40, 60, 70, 90, 100};
int chance = Random.Range(0, 100) + 1;
// Где-то тут должен быть бинарный поиск, но мне лень
for (int index = 0; index < chances.Length; index++)
{
var ch = chances[index];
if (chance <= ch)
return index;
}
Для произвольных значений:
(int Chance, int Value)[] chances =
{
(Chance:40, Value:180),
(Chance:60, Value:170),
(Chance:70, Value:802),
(Chance:90, Value:-10),
(Chance:100, Value:0)
};
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.Value;
}
Функция Random.Range при передаче float-аргументов использует оба передаваемых числа, а при целочисленных int-аргументах минимальное число будет "включительно", а максимальное "не включительно". Об этом, кстати, можно прочитать в справочной документации или даже во всплывающих подсказках в Visual Studio.
Для того, что бы псевдослучайные числа использовать для предсказуемых результатов, можно пользоваться списком валидных результатов. Рассмотрим Ваш случай.
Вам нужно в список
List<int> chances
внести 100 значений (1 - 40 раз, 2 - 20 раз, 3 - 10 раз, 4 - 20 раз, 5 - 10 раз). Тогда для "честного" рандома Вам нужно генерировать индекс числа из этого массива
int resultIndex = Random.Range(0, chances.Count);
int result = chances[resultIndex];
chances.RemoveAt(resultIndex);
Получаем индекс числа из массива, получаем число по индексу и удаляем это число из массива, что бы повторно его не использовать.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Пытаюсь разобраться с WPFВ моем примере мне нужно получить доступ к MainWindow viewmodel из Page в XAML
Есть коллекция radiobutton, по нажатии на каждую такую кнопку формируется коллекция togglebuttonДанные для формирования и того и другого списка берутся...
Нашёл только ответ, как сделать в приложении с Windows Forms, вот этот код:
Концентратор передается в IhostedService сервис через servicesAddSingleton: