Какой тип данных я должен выбрать для выбора юнитов в игре RTS? - PullRequest
1 голос
/ 11 апреля 2019

Что такое хороший тип данных для сбора единиц в rts? Я помогаю API, который позволяет вам писать ботов для стратегической игры Starcraft2 на Python .

Прямо сейчас существует класс units, который наследуется от list. Каждый кадр создается новый units объект, а затем производится выбор этих юнитов, создавая новые units объекты, например, с фильтром для всех вражеских юнитов или всех летающих юнитов.

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

Но это также означает, что мы делаем большую фильтрацию по атрибутам каждой единицы в каждом кадре, что занимает много времени. Время инициализации одного объекта units составляет от 2e-5 до 5e-5 секунд, и мы делаем это миллионы раз за игру, что может замедлить работу бота и провести много тестов, в дополнение к процессу фильтрации с циклами над каждым юнитом. в объекте units.

Есть ли лучший тип данных для этого? Может быть, что-то, что не нужно воссоздавать каждый раз для каждого выбора в одном кадре, а просто начинается с начального списка всех единиц, которые мы получаем из буфера протокола, а затем выборки и фильтры могут применяться без воссоздания объекта? Что может быть хорошим способом реализовать это, чтобы фильтрация несколько раз за кадр не была такой медленной и / или сложной?

1 Ответ

0 голосов
/ 11 апреля 2019

Это совсем не похоже на проблему с ADT. Это звучит как неэффективное программирование. Мы не можем сказать вам правильное сообщение, которое нужно создать, чтобы достичь того, для чего вы идете.

Вероятно, вам следует изучить, как создать UnitView, если вам на самом деле не нужно изменять данные unit s. Рассмотрим что-то похожее на то, как словари возвращают views в Python 3. Подробнее см. Здесь .

...