Нужна помощь. Я хочу сделать систему рандомного лута из сундука для игры, но не получается. К примеру есть 5 категории: Обычные, Рарная, Мистическая, Эпическая, Легендарная. Шанс, что может выпасть Обычная 65%, Рарная 45%, Мистическая 25%, Эпическая 15%, а Легендарная 5%. Например в будущем Категории предметов могут увеличиться, а шансы поменяться. У меня была идея, к каждому предмету привязать свою цифру, и сделать массив, ну и тут столкнулся с проблемой, я новичок с Unity3D, и знания по C# не много забыты. Будет несколько сундуков, с ячейками лута. Например обычный сундук имеет 10 ячеек, и в этом сундуке может выпасть 10 рандомных предмета. Помогите пожалуйста, как вот такое дело можно оформить в виде кода. Заранее спасибо.
На мой взгляд самое простое, может быть и не самое правильное, решение - это взять и генерировать числа от 1 до 155, а далее смотреть, если число в промежутке:
ОбычнаяРарнаяМистическаяЭпическаяЛегендарнаяЕстественно последовательность чисел можно менять и, например, для Легендарной сравнивать с числами вроде 33, 111, 145, 1, 7. Для остальных задать свои числа
Что сказать про:
Например в будущем Категории предметов могут увеличиться, а шансы поменяться.
Создайте класс Category в нем должно быть свойство Chance(Шанс), далее берем все категории и суммируем "шансы", получаем верхний порог генерации чисел
Для
Например обычный сундук имеет 10 ячеек, и в этом сундуке может выпасть 10 рандомных предмета.
можно в цикле для каждой ячейки вызывать код, который будет возвращать предмет
UPD
class Category {
private int[] chanceValues;
public Category(string name, int chance){
Name = name;
Chance = chance;
chanceValues = generateChanceValues(chance);
}
public string Name { get; private set; }
public int Chance { get; private set; }
private int[] generateChanceValues(int count){
int[] res = new int[count];
Random random = new Random();
for (int i = 0; i < count; count++){
res[i] = random.Next(100) + 1;
}
return res;
}
public bool IsGenerateLoot(int number){
if (chanceValues == null)
return false;
return chanceValues.Contains(number);
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости