_Duke
offline
Опыт:
611Активность: |
И очередной вопрос про оптимизацию.
Снова здравствуйте. Сразу к делу.
Условия: На карте существует несколько (8-10) зон. В каждой зоне есть определённый набор юнитов (Войск и зданий) который может принадлежать разным игрокам, это как-бы такие деревеньки. Задача состоит в том, чтобы эти деревеньки могли самостоятельно развиваться и восстанавливаться. Т.е. предположим в деревне сломали домик. Необходимо, чтобы рабочий из этой деревни, получил приказ отстроить домик заново, предварительно сверившись с переменной которая, грубо говоря, отвечает за благополучие этой деревни и определяет могёт он построить или нет.
Моё решение, которое кажется мне слишком громоздким и не самым оптимальным выглядит так:
Я создаю набор глобальных массивных переменных, каждая из которых отвечает за наличие в деревне тех или иных построек (udg_base[n] , udg_defence[n] e.t.c), всех юнитов принадлежащих именно к этой деревне я также записываю в массивную переменную, и все зоны в которых должна происходить постройка, также. (udg_vilagers[n], udg_village[n])
Затем создаю триггер срабатывающий предположим раз в 15 секунд, который выглядит приблизительно так.
Цикл
выход по окончанию массива пикнуть каждого юнита из группы udg_vilagers[n] если этот юнит охранная вышка то занести соответствующее значение в udg_defence[n] если этот юнит ратуша то udg_base[n] И далее if then else пока не все переменные не будут заполнены соответствующими данными по деревне. n+1 Конец цикла. Потом идёт функция которая начинает проверять данные в этих переменных, и на их основе уже отдаёт приказы крестьянам. Выглядит приблизительно так:
Цикл
выход по окончанию массива Проверить переменную udg_base[n] если равна нулю тогда взять крестьянина (которому вероятно тоже придётся задарить глобальную переменную дабы не начинать перебор всех юнитов в зоне) и заставить его строить в рандомной точке зоны udg_village[n] новую ратушу. и далее группы проверок такого рода. Проверить наличие охранных вышек или домиков, затем проверить уровень благополучия, и если он достаточно высок то выполнять проверки на здания и юниты более высокого уровня. (в каждой деревне предполагается порядка 4-5 видов зданий и 3-4 видов юнитов) Затем конец цикла. Логически, вся эта схема вполне себе должна работать, но меня смущает громоздкость подобной конструкции . В каждой деревне может быть от 5 до 30 юнитов. Выбирать каждого и проводить проверку является ли он тем самым юнитом который нужен или нет, кажется мне как-то слишком. Внимание вопрос: Насколько эта индусская структура убийственна (будет ли лагать если реализовать таким образом) и есть ли более оптимальный способ решения этой задачи? |
18.03.2013, 14:52 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,167Активность: |
_Duke, перебор конечно не самое оптимальное решение но... А ИИ не пробовал юзать? Деревни будут добывать ресы, нападать на разбойников в лесу (раз в n сек.) читнить здания, и многое другое... Стандартные компании из Warcraft 3 обязательны к просмотру... |
18.03.2013, 14:57 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,037Активность: |
гуи по умолчанию индусская убийственная система
хотите нормальной оптимизации - используйте jass |
18.03.2013, 14:58 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,158Активность: |
quq_CCCP, ИИ не может работать с войсками игроков. |
18.03.2013, 14:58 | #4
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
_Duke
offline
Опыт:
611Активность: |
quq_CCCP:
Не пробовал, вообще с редактором ИИ не работал. Дело в том, что деревни в разное время игры могут принадлежать разным игрокам (Компьютерным). Не будет ли это препядствием? Hate: естественно вышеописанное я буду реализовывать на jass, я и не говорил про гуи. Я вообщем-то и спрашиваю как на jass это можно реплизовать попроще? |
18.03.2013, 15:07 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
agentex
offline
Опыт:
34,834Активность: |
чтобы код лагал, надо изрядно постараться. в большинстве случаев лагает движок при отображении моделек и неудаленных эффектов. так что невижу повода для паники, но по хорошему надо убрать все эти пики и условия, и задавать переменные непосредственно при событии строительства. |
18.03.2013, 15:14 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,037Активность: |
в таком случае вам проще показать код а не писать вилами по воде |
18.03.2013, 15:14 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,167Активность: |
Clamp:
Это то да, но какого черта деревни принадлежат не ботам? Смена игрока, не помеха... главное грамотно все продумать, темболее не всех юнитов деревни надо сувать по 1 ии. некоторых обычными триггерми жулькать, чтобы крестьяне кпримеру ходили по деревне и тп.. |
18.03.2013, 15:16 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
_Duke
offline
Опыт:
611Активность: |
agentex:
Я тоже сначала подумал о том чтобы заносить данные в переменные при создании и разрушении какого либо юнита, но разве можно обойтись без проверок? Я ведь должен буду выяснить к какой именно деревне и какому типу относится созданный\погибший юнит. Вроде получаются все теже самые проверки только чаще (потому что постройка и смерть юнитов происходит чаще чем раз в 15 секунд). Или нет? Hate:
Ну понимаю. Я просто довольно ленив и не люблю делать бесполезную работу. Вчера я спрашивал про хеш-таблицы, мне помогли ответами, и я со спокойной душой написал то, что мне нужно. Кстати прекрасно работает, спасибо. Здесь похожая ситуация. Я просто описал алгоритм. Если вы полагаете, что данный алгоритм будет достаточно шустро работать на jass, то так и скажите. Это обнадёживает. |
18.03.2013, 15:24 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hate
конь вакуумный
offline
Опыт:
43,037Активность: |
алгоритм можно написать хорошо, а можно плохо. мы то не видим как он написан, может там ужасные огрехи, а может там и оптимизировать ничего не надо |
18.03.2013, 15:30 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
_Duke
offline
Опыт:
611Активность: |
quq_CCCP:
Ну раз не помеха, то спасибо, покурю статейки по ИИ. Насчёт хождения крестьян по деревне это не так страшно. Собственно замысел карты не подразумевает сверх грамотного развития этих несчастных деревень. Всё что мне нужно, это чтобы они могли хоть немного самостоятельно восстанавливаться и обороняться, а также небольшой микроменеджмент со стороны другого плеера (Живого игрока). Эти деревни задумываются как некие ресурсные центры для живых игроков. |
18.03.2013, 15:30 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,167Активность: |
_Duke:
Напиши и прикрепи ии, сделай 1триггер с 1 таймером для управления крестьянами, где в базе данных будет содержатся список возможных дейтвий и координат деятельности для каждого типа крестьян, ну ненормально же будет если женщина крестьянка пойдёт рубить дерево или бить морду соседу (хотя второе возможно) |
18.03.2013, 15:32 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|