Структура данных по магическим качествам предмета для игры
Итак, проблема в том, что я пытаюсь создать плагин для игры, которая имеет несколько типов элементов, аналогично тому, как в Diablo 2 есть элементы. Теперь, как и в Diablo 2, этот предмет может появиться как магический или редкий.
Если элемент выбран магическим или редким, он может иметь префиксы и суффиксы.
Теперь он выбирает префикс / суффикс следующим образом: для определения доступных аффиксов используйте столбец уровня в файлах magicprefix.txt и magicsuffix.txt в качестве минимально необходимого affixlvl(alvl). Затем он фильтрует элементы по максимальному уровню (некоторые из них не могут отображаться на более высоких элементах alvl), а также соответствующие типы элементов и исключенные типы (исключенные типы элементов).
Мне также нужно исключить все аффиксы, которые имеют тот же номер группы, что и уже выбранный аффикс. Затем, чтобы определить вероятность получения аффикса, мне нужно суммировать частоты для этого конкретного типа (префикс / суффикс) и получить шанс этого конкретного аффикса с помощью affix_frequency/ interval_sum.
Это описание взято из: http://diablo2.diablowiki.net/index.php?title=Item_Generation_v1.09&action=edit§ion=18
И ссылка на различные текстовые файлы, которые содержат данные префикса / суффикса: https://code.google.com/p/d2spe/source/browse/trunk/data/global/excel/MagicSuffix.txt https://code.google.com / р / d2spe / источник / просмотр / багажник / данные / глобальный / Excel / MagicPrefix.txt
Что такое хорошая структура данных для эффективного доступа к группе префиксов / суффиксов на основе уровня аффиксов?
В настоящее время я думаю просто о статическом генерировании группировок и просто иметь гигантскую таблицу поиска, но было бы намного лучше хранить их в структуре данных, которая в качестве входных данных принимает affixLevel, тип элемента и список аффиксов, уже имеющихся в элементе., Функция, по сути, возвращает группу допустимых аффиксов, из которых она может выбирать.
1 ответ
Самый простой способ найти требуемые префиксы / суффиксы, вероятно, состоит в том, чтобы просто создать список префиксов и суффиксов и отдельные списки для всех свойств, которые вы хотите отфильтровать.
Например:
List<String> prefixes = Arrays.asList("Sturdy", "Strong", "Glorious", "Blessed", "Saintly");
List<String> suffixes = Arrays.asList("of Health", "of Protection", "of Absorption", "of Life", "of Warding");
List<Integer> prefixMinLevel = Arrays.asList(1,3,7,22,59);
List<Integer> suffixMinLevel = Arrays.asList(10,4,8,3,11);
List<Integer> prefixType = Arrays.asList(1,1,1,2,2);
List<Integer> suffixType = Arrays.asList(1,2,3,3,3);
А затем просто создайте пользовательский метод для получения действительного списка префиксов / суффиксов на основе элемента:
public List<String> getPrefixList(List<String> prevPrefixes, int itemLevel, int itemType){
List<String> newPrefixes = new ArrayList<String>();
for(int i = 0; i < prefixes.size(); i++){
if(!prevPrefixes.contains(prefixes.get(i)))//Filtering out previous prefixes
if(itemLevel >= prefixMinLevel.get(i))//Checking item level
if(itemType == prefixType.get(i)){//Checking item type
newPrefixes.add(prefixes.get(i));
}
}
return newPrefixes;
}
Возможно, вы могли бы создать аналогичную функцию для суффиксов.
Вы также можете добавить множество различных критериев, таких как редкость предмета и стоимость предмета. Затем просто добавьте эти критерии в списки, как в примере выше, а также добавьте их в функцию getPrefixList().