XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
_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
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,167
Активность:
_Duke, перебор конечно не самое оптимальное решение но...
А ИИ не пробовал юзать? Деревни будут добывать ресы, нападать на разбойников в лесу (раз в n сек.) читнить здания, и многое другое...
Стандартные компании из Warcraft 3 обязательны к просмотру...
Старый 18.03.2013, 14:57
Hate
конь вакуумный
offline
Опыт: 43,037
Активность:
гуи по умолчанию индусская убийственная система
хотите нормальной оптимизации - используйте jass
Старый 18.03.2013, 14:58
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
quq_CCCP, ИИ не может работать с войсками игроков.
Старый 18.03.2013, 14:58
_Duke

offline
Опыт: 611
Активность:
quq_CCCP:
_Duke, перебор конечно не самое оптимальное решение но...
А ИИ не пробовал юзать? Деревни будут добывать ресы, нападать на разбойников в лесу (раз в n сек.) читнить здания, и многое другое...
Стандартные компании из Warcraft 3 обязательны к просмотру...
Не пробовал, вообще с редактором ИИ не работал. Дело в том, что деревни в разное время игры могут принадлежать разным игрокам (Компьютерным). Не будет ли это препядствием?
Hate:
гуи по умолчанию индусская убийственная система
хотите нормальной оптимизации - используйте jass
естественно вышеописанное я буду реализовывать на jass, я и не говорил про гуи. Я вообщем-то и спрашиваю как на jass это можно реплизовать попроще?
Clamp:
quq_CCCP, ИИ не может работать с войсками игроков.
Ну деревнями не будут управлять игроки. Ими будут управлять компьютерные игроки, но в течении игры одна деревня может переходить от одного плеера к другому.
Старый 18.03.2013, 15:07
agentex

offline
Опыт: 34,834
Активность:
чтобы код лагал, надо изрядно постараться. в большинстве случаев лагает движок при отображении моделек и неудаленных эффектов. так что невижу повода для паники, но по хорошему надо убрать все эти пики и условия, и задавать переменные непосредственно при событии строительства.
Старый 18.03.2013, 15:14
Hate
конь вакуумный
offline
Опыт: 43,037
Активность:
в таком случае вам проще показать код а не писать вилами по воде
Старый 18.03.2013, 15:14
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,167
Активность:
Clamp:
quq_CCCP, ИИ не может работать с войсками игроков.
Это то да, но какого черта деревни принадлежат не ботам?
Смена игрока, не помеха... главное грамотно все продумать, темболее не всех юнитов деревни надо сувать по 1 ии. некоторых обычными триггерми жулькать, чтобы крестьяне кпримеру ходили по деревне и тп..
Старый 18.03.2013, 15:16
_Duke

offline
Опыт: 611
Активность:
agentex:
чтобы код лагал, надо изрядно постараться. в большинстве случаев лагает движок при отображении моделек и неудаленных эффектов. так что невижу повода для паники, но по хорошему надо убрать все эти пики и условия, и задавать переменные непосредственно при событии строительства.
Я тоже сначала подумал о том чтобы заносить данные в переменные при создании и разрушении какого либо юнита, но разве можно обойтись без проверок? Я ведь должен буду выяснить к какой именно деревне и какому типу относится созданный\погибший юнит. Вроде получаются все теже самые проверки только чаще (потому что постройка и смерть юнитов происходит чаще чем раз в 15 секунд). Или нет?
Hate:
в таком случае вам проще показать код а не писать вилами по воде
Ну понимаю. Я просто довольно ленив и не люблю делать бесполезную работу. Вчера я спрашивал про хеш-таблицы, мне помогли ответами, и я со спокойной душой написал то, что мне нужно. Кстати прекрасно работает, спасибо. Здесь похожая ситуация. Я просто описал алгоритм. Если вы полагаете, что данный алгоритм будет достаточно шустро работать на jass, то так и скажите. Это обнадёживает.
Старый 18.03.2013, 15:24
Hate
конь вакуумный
offline
Опыт: 43,037
Активность:
алгоритм можно написать хорошо, а можно плохо. мы то не видим как он написан, может там ужасные огрехи, а может там и оптимизировать ничего не надо
Старый 18.03.2013, 15:30
_Duke

offline
Опыт: 611
Активность:
quq_CCCP:
Clamp:
quq_CCCP, ИИ не может работать с войсками игроков.
Это то да, но какого черта деревни принадлежат не ботам?
Смена игрока, не помеха... главное грамотно все продумать, темболее не всех юнитов деревни надо сувать по 1 ии. некоторых обычными триггерми жулькать, чтобы крестьяне кпримеру ходили по деревне и тп..
Ну раз не помеха, то спасибо, покурю статейки по ИИ. Насчёт хождения крестьян по деревне это не так страшно. Собственно замысел карты не подразумевает сверх грамотного развития этих несчастных деревень. Всё что мне нужно, это чтобы они могли хоть немного самостоятельно восстанавливаться и обороняться, а также небольшой микроменеджмент со стороны другого плеера (Живого игрока). Эти деревни задумываются как некие ресурсные центры для живых игроков.
Старый 18.03.2013, 15:30
quq_CCCP
Я белый и пушистый!
offline
Опыт: 94,167
Активность:
_Duke:
Ну понимаю. Я просто довольно ленив и не люблю делать бесполезную работу. Вчера я спрашивал про хеш-таблицы, мне помогли ответами, и я со спокойной душой написал то, что мне нужно. Кстати прекрасно работает, спасибо. Здесь похожая ситуация. Я просто описал алгоритм. Если вы полагаете, что данный алгоритм будет достаточно шустро работать на jass, то так и скажите. Это обнадёживает.
Напиши и прикрепи ии, сделай 1триггер с 1 таймером для управления крестьянами, где в базе данных будет содержатся список возможных дейтвий и координат деятельности для каждого типа крестьян, ну ненормально же будет если женщина крестьянка пойдёт рубить дерево или бить морду соседу (хотя второе возможно)
Старый 18.03.2013, 15:32
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 21:03.