2012-01-15 2 views
2

Я пытаюсь создать инструмент для игры под названием Monster Hunter (для персонального использования)). Раньше я работал с перестановками, но ничего такого сложного, поэтому я полностью застрял.Сложные перестановки без повторения

В игре вы носите 5 единиц брони. Каждая часть имеет очки умения для одного из многих разных навыков. Если у вас есть 10 умений в определенном навыке после вычисления всего набора, вы получаете это умение.

Пример:

Foo Head: Attack +2, Guard + 2 
Foo Chest: Defense + 5  
Foo Body: Guard + 2, Attack + 5, Defense +2 
Foo Arm: Attack + 3, Speed + 4 
Foo Legs: Attack + 5, Guard + 6, Defense + 3 

The above set would result in 10+ in Attack, Defense, and Guard (not speed). 

Я хотел бы выяснить, как найти все комбинации БТТ данных 2-3 заданные пользователем навыки. Поэтому, если вы выбрали «Атака» и «Скорость», это даст вам все возможные комбинации из 5 единиц брони, которые приведут к +10 в «Атаке» и «Скорость». Для каждой из 5 категорий существует около 60 различных предметов.

Я знаю, что могу использовать LINQ для фильтрации каждой из 5 категорий частей брони, чтобы получить только список всех предметов, которые включают одно из двух указанных навыков, но я теряюсь на том, как сделать перестановки, так как я манипулирую 2-3 пользовательскими навыками ...

Мне жаль, что у меня не был рабочий код, чтобы показать, но я так потерялся в этот момент. Я не знаю с чего начать. Я не ищу ответа, как такового, но совет о том, как туда добраться. Благодарю.

ответ

1

1) Я хотел бы попробовать найти только 1 навыка, затем процеживают этот элемент, установленный для второго/третьего

2), чтобы избежать принятия слишком много времени/памяти/рекурсии: я бы сортировать 5 * 60 предметы на основе этого только умения. Затем я создавал комбинации, ища те, которые составляют более 10, начиная с верхних навыков и останавливаясь при достижении 10 или когда это не будет достигнуто.
Функция, которая строит все комбинации, будет выглядеть так: 1: если у нас есть общий навык предмета> 10: вся комбинация с другими элементами в порядке. стоп. 2: если текущее умение предмета подсчитано < 10 ищите в массиве для следующего по величине предмета для нестойкой части.
Если в массиве мы достигли 0 ИЛИ, мы достигли такого значения, чтобы (текущий счет + значение * количество штучного типа осталось) < 10 затем его время, чтобы остановить :-)
В противном случае добавьте его количество умений, обратите внимание на кусок брони введите, как используется, затем вызовите свою функцию для всех элементов, которые могут совпадать.

хорошо, я не могу быть достаточно точным, но вы видите идею: используйте условие для вызова, чтобы избежать разрыва рекурсивности. Потому что 60 * 60 * 60 * 60 * 60 много. и (быстрая) сортировка 5 * 60 = 300 предметов - ничто.

Чтобы сохранить ваши комбинации, вы можете захотеть добавить случай «все идет», чтобы избежать слишком большого количества комбинаций. (например: если у вас есть магическая шляпа Carmak, у вас есть +100 в кодировке, и вы можете одеваться так, как хотите, ошибки будут краситься! :-))

Смежные вопросы