Я делаю стратегию игры AI. В частности, я использую java-библиотеку BWMirror для создания Starcraft: BroodWar zerg AI.Как реализовать динамический выбор?
Я столкнулся с проблемой управления блоком. Игрок имеет несколько единиц в его распоряжении, скажем, это List<Unit>
с таким содержанием:
Offset Name Position
0. Drone [Worker]
1. Drone [Worker]
2. Zergling [Fighter]
3. Hatchery [Building]
4. Drone [Worker]
5. Larva [Passive]
Некоторые функции, очевидно, работают только с единичными подмножеств. Я внедрил метод, который выбирает подмножество из основного списка и возвращает его как новый список. Для работников, я получаю:
Offset Name Position
0. Drone [Worker]
1. Drone [Worker]
2. Drone [Worker]
Теперь, если один из этих рабочих удаляются из исходного списка (., Например, потому что он умирает), она будет сохраняться в этом подсписке. Есть два возможных решения, и мне тоже не нравится:
- Создайте список выбора каждый раз, когда это необходимо.
- Назначают некоторые функции обратного вызова событий для удаления элементов во всех списках они присутствуют в
Мои вопросы:. Какой тип хранения данных, которые позволили бы мне сделать суб-выбор, но позвольте мне сохранить данные синхронизируется?
Это означает, что у меня было бы два объекта Iterable
, и каждый из них будет содержать все единицы, другие будут содержать рабочих. И удаление работника из всех подразделений также заставит его исчезнуть у рабочих, без какого-либо обратного вызова.
Я только что напомнил, что я всегда думал, как работают DOMCollections в JavaScript. Может быть, есть ответ на мой вопрос. –
Это может сработать для вас? http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/collect/Collections2.html#filter – DTing
Вам нужно иметь возможность быстро получать предметы в списке рабочих по индексу? Если да, то это намного сложнее. –