Оригинал « » Редактор AI — теория и практика Самая полная статья о редакторе AI.Редактор AI - теория и практика. Размышления о стратегиях AI. Наличие редактора компьютерных стратегий (AI) в worldedit - дает картостроителям достаточно интересные возможности. Тем не менее, не так уж часто приходится наблюдать наработки этого редактора, а еще реже - стоящие наработки. Это не связано со сложностью - редактор AI не сложнее, а на самом деле даже проще редактора триггеров (правда удобств гораздо меньше). Скорее дело в том, что сами по себе стратегии не востребованы. Кому они могут понадобиться? Разве что создателям модов и кампаний (да и то не всех).
Стратегии, создаваемые в редакторе AI расчитаны на стандартные расы или по крайней мере не слишком отличающиеся от стандартных. Обязательно должны какие-то здания, рабочие, добыча ресурсов и т.п. Ясно, что картостроителям, создающим карты в стиле Tower Defense стратегии AI ничем помочь не могут.
И все таки, на мой взгляд, сценарии стратегической направленности ничуть не хуже любых других сценариев и жаль, что ими почти никто не занимается. Игра starcraft до сих пор себя не изжила и немалая заслуга - удачная стратегическая система.Описание редактораНадо сказать, что работая над редактором AI близзы изрядно схалтурили (как и во всех остальных местах :)). Но если недостатки игры как-то устраняются в патчах, то редактор AI практически не меняется.
Редактор располагается на нескольких вкладках:
1. Общие
2. Герои
3. Здание
4. Атака
5. Проверка конфигурацииВкладка "Общие"Здесь располагаются настройки AI: название; раса, под которую пишется AI; флажки для настройки параметров стратегии; список условий.
Раса. Вам на выбор предложены 4 стандартные расы: люди, орки, нежить и ночные эльфы, а также пункт «нестандартная раса». Если вы выбираете стандартную расу, то тем самым ограничиваете выбор игровых объектов, которыми манипулирует AI. Вы не сможете использовать юниты и изобретать технологии других рас.
В случае если вы выбираете нестандартную расу, то в вашем распоряжении окажутся все игровые объекты. Вы задействовать любые юниты игрока и изобретать любые доступные технологии, включая custom unit и custom tech.
Если вы пожелаете изменить в стратегии одну расу на другую, то вам будет выдано предупреждение, что такие действия приведут к обнулению данных по стратегии. Это действительно так. Все условия, группы и команды будут удалены. В связи с этим совет.
Совет: даже если вы создаете стратегию для стандартной расы, лучше всего использовать «нестандартную расу». Почему? Потому что тогда будет намного проще вносить изменения в разработанную стратегию. Вдруг вы захотите создать аналогичную стратегию для другой расы? Или создать стратегию для аналогичной нестандартной расы? Намного проще отредактировать имеющуюся стратегию, чем писать все условия и команды заново.
Флажки параметров
Узнать назначение того или иного флажка можно просто наведя на него курсор на пару секунд. В принципе тут все понятно. Какие флажки использовать зависит лишь от того, какого рода стратегию вы создаете.
Если AI должен взаимодействовать с союзниками, имеет смысл установить флажки Сражение и Защита.
Если вы делаете стратегию для melee, то имеет смысл включить флажки Бегство героев, Бегство войск, Бегство отрядов, Увольнение, Смена основного лагеря – тогда компьютер будет вести себя более осторожно и не вступать в невыгодные сражения. Что касается стратегий для кампаний, то тут наоборот – компьютер должен проводить самоубийственные атаки и никуда не убегать. Обычно компьютер владеет неограниченными ресурсами, и чтобы он не истощал рудники можно поставить флажок Замедлить сбор.
Такие флажки как Случайные пути, Взять предметы, Покупать, Умная артиллерия подойдут практически для любой стратегии.Список условийВ правой части окна располагается список условий. Что это за условия? Просто условия, которые вы можете использовать в стратегии. Например, если вы хотите чтобы ваш AI строил такой-то юнит, при условии, что уже построено такое-то здание. Или чтобы ферма строилась при условии, нехватки пищевых ресурсов. Условия могут применяться на вкладках Здание и Атака. Вообще говоря условия можно задавать непосредственно – без применения таблицы условий на вкладке Общие. Тем не менее, условия в списке имеют смысл в том случае, если одно и то же условие используется много раз. Проще создать условие в списке и для всех нужных действий указать это условие, чем создавать для каждого действия одно и то же условие заново. Зачем близзы поместили таблицу с условиями на вкладке Общие для меня загадка. Видимо на этой вкладке было много свободного места :).
Остановимся более подробно на возможных условиях. Они напоминают условия из редактора триггеров и создаются по тому же принципу. В списке каждое условие должно иметь название, по которому вы будете их отличать. Существует 2 типа условий: Boolean Comparison (логические – принимают значение True (правда) и False (ложь)) и Integer Comparison (целочисленные), а так же 2 вида союзов AND (и) и OR (или), которые позволяют создавать множество комбинаций из различных условий. Перечислю условия:
-------------------------
Boolean comparison
Attack captain is at home – «главный герой вернулся на главную базу».
Attack group is complete – «атакующая группа укомплектована войсками». Компьютер водит в бой так называемые группы атаки, состав которых определяет создатель AI (см. ниже)
Attack group is empty - «атакующая группа укомплектована войсками»
Attack captain is retreating– «главный герой обращен в бегство»
(?)Attack captain is at goal – «главный герой ушел на задание» (предположительно)
Captain is in combat – «Главный герой сражается с кем-то»
Creep exist anywhere – «крипсы повсюду» (предположительно)
Town is under attack – «город с таким-то номером под атакой»
Town has mine - «город с таким-то номером имеет шахту»
Town has hall -«город с таким-то номером имеет главное здание»
(!)Expansion spot needed - «игрок собирается строить новую базу, но все шахты в округе уем-то охраняются»
Integer comparison
(!)Arithmetic – арифметические действия +, -, *, /.
(?)Command waiting – «количество команд, посланных к AI ожидающих выполнения». Не все тут до конца понятно, но путем проведения нескольких экспериментов я выяснил, что счетчик учитывает команды, которые посылаются AI следующими триггером send ai command в течении пары секунд, после чего счетчик обнуляется.
(?!)Last command – «номер посланной команды». Это важное условие позволяет AI получать команды, посланные триггерами! Когда вы используете триггерную команду send ai command (a, b) это означает, что Last command параметр «удалить» = a, «покинуть» = b. Я не до конца понял, как там все работает, но путем экспериментов выяснил, что команда, посланная триггерами является значимой для AI в течении пары секунд. При этом условия на параметр «покинуть» срабатывают на 100%, а вот на удалить – когда как.
(?!)Last command data – проведение экспериментов не выявило отличий этой и предыдущей команд.
(!)Attack group size – «размер атакующей группы»
Attack group health level – «процент здоровья от максимума в атакующей группе»
Attack group mana level - «процент маны от максимума в атакующей группе»
Current attack wave - «номер текущей волны атаки». Компьютер водит в атаку атакующие группы, состав юнитов в которых можно определять так называемыми волнами атаки (см. ниже)
(!)Melee difficulty level – «уровень сложности игры»
(!)Current gold amount – «количество золота у игрока»
(!)Current lumber amount - «количество леса у игрока»
(!)Unmined gold owned - «количество золота у игрока в шахтах, которое еще не добыто»
(!)Food used – «количество используемой еды»
(!)Food produced - «количество еды, производимой в фермах»
Food produced by unit - «количество еды, производимой таким-то типом юнитов»
(!)Number of mines owned – «количество шахт, которыми владеет игрок»
Town with mine (ID) – «номер первого попавшегося города с шахтой»
Next expansion town (ID) – «количество баз у игрока +1»
(!)Total units of type – «количество юнитов такого-то типа у игрока». Считаются и те юниты, которые еще только строятся.
(!)Total units of type completed only - «количество юнитов такого-то типа у игрока»
Total units of type by town - «количество юнитов такого-то типа в таком-то городе»
Gold cost of unit – «цена такого-то юнита в золоте»
Lumber cost of unit - «цена такого-то юнита в лесе»
Build time of unit - «время постройки юнита»
Current upgrade level – «текущий уровень такой-то технологии»
Gold cost of upgrade - «цена проведения апгрейда в золоте»
Lumber cost of upgrade - «цена проведения апгрейда в лесе»
-------------------------
(!) означает, что данные условия применяются достаточно часто, но подробнее об этом будет сказано ниже.
(?) означает, что действие условия не изучено до конца.
Заметьте, что все условия связаны только с игроком, для которого мы создаем AI. Вы не можете узнать при помощи этих условий, насколько силен противник, есть ли в составе его войск воздушные юниты и т.п. Это означает, что все AI созданные в редакторе, будут слепыми и не смогут учитывать уровень развития противника.Загрузка данных игровых объектовВнизу страницы есть кнопки, позволяющие загрузить данные об объектах в редактор AI. Это необходимо для тех, кто пишет стратегии для нестандартных рас, где есть новые юниты, герои, заклинания, апгрейды и т.п.Вкладка "Герои"На этой вкладке можно выбрать каких героев и в какой последовательности будет задействовать AI, а также какие способности будут изучать герои при достижении нового уровня.
Разработчик AI может выбрать до 3 героев, с которыми будет взаимодействовать AI. Тот факт, что AI не позволяет работать с большим числом героев – не очень приятен (хотя это еще не самый большой недостаток редактора AI). К тому же вы не можете указать герою как развивать его способности, при условии что сам герой развивается выше 10 уровня (это придется устранять триггерами). В принципе, вы можете даже заставить AI использовать и четвертого героя, хотя это геморрно и придется задействовать триггеры. Если на вкладке Общая вы указали расу Нестандартная, то сможете указывать для стратегии любых героев, какие есть в игре. С одной стороны это хорошо, но есть одна проблема: некоторые герои имеют одинаковые названия. Однажды я долго мучался, почему моя стратегия ведет себя очень странно. Оказалось, что я указал героя blademaster - того, который из кампании – красный, а не обычного. А ведь компьютер при всем желании не мог его построить :). Так что будьте внимательны.
Итак, сначала вы выбираете рабочих героев. Затем указываете шансы, что герои будут строиться в определенной последовательности. В редакторе AI это единственное место, в котором можно программировать случайные действия. Но даже тут система очень неудобна и придется повозиться, чтобы назначить те шансы, какие вы хотите.
Следующее, что вы должны сделать – это по очереди выбрать героев и указать, в какой последовательности они должны изучать геройские заклинания. Вы можете даже выбрать, в какой последовательности герой должен изучать заклинания, если он вызван вторым или третьим героем по счету. Для этого нужно убрать галочку «то же» в соответствующем списке.Вкладка "Здания" (т.е. строительство) На этой вкладке определяется, что и в какой последовательности компьютер должен строить.
Первое что нужно сделать – определить, какое здание для лагеря. Видимо имеется ввиду здание, постройка которого будет говорить компьютеру, что построен новый город. Тут же выбираем юнит, который будет отвечать за добычу золота и юнит для добычи леса, а также специально здание для рудника, если этот рудник нестандартный (как у undead).
Большую часть окна занимают два списка: Приоритет строительства и Приоритет добычи. Элементы списков являются указаниями для компьютера – что, где и при каких условиях нужно строить. Компьютер читает строки сверху вниз: если такой-то пункт выполнен, то он переходит к следующему. Т.е. верхней части списков находятся задания, которые компьютер должен выполнять в первую очередь, в нижней – в последнюю.
Важно: если компьютер не может выполнить какое-то указание, то в игре стратегия начнет тормозить. Это будет выгладить, как будто компьютер дошел до определенной стадии развития и вдруг остановился. Такие ошибки практически неизбежны и, к сожалению, их достаточно тяжело отловить.
Приоритеты строительства
Когда вы добавляете новую позицию в этот список, вы выбираете, где проводить строительство: где угодно, в главном лагере, в дополнительном городе (указать номер) в городе с рудником (указать номер). Затем выбираете что делать: героя (Герой 1, Герой 2, Герой 3 – на самом деле кем будут эти герои определяется на вкладке Герои), дополнительный лагерь, боевую единицу или улучшение.
Важно: компьютер может делать параллельно множество дел: что-то строить, кого-то тренировать, вызывать героя, делать улучшения. AI будет успешно справляться со всеми задачами, пока не дойдет до пункта плана, который он должен сделать, но не может. К примеру, если он должен строить несколько футмена, а в бараках уже строится другой воин. Или если нужно изобрести технологию, а денег для этого не хватает. Тогда компьютер впадет в министупор: все пункты плана до этого момента выполнены, а к тем, что после него он приступать не может. Поэтому очень важно правильно выбрать последовательность действий (что, после чего нужно делать) и (!) назначить правильные условия, при AI должен выполнять такие-то действия.
В связи с вышесказанным, условия, навешиваемые на команды, имеют большое значение для успеха AI. Добавить условие на команду можно через меню Правка, нажав ctrl-m или щелкнуть правой кнопкой мыши на условии и выбрать пункт Модифицировать условие. Вам будет предложен список условий, заданных в списке на вкладке Общие + пункт Нестандартное условие, который позволит задавать условия, не описанные в этом списке.
Обратите внимание, что вы можете заставить AI построить тех героев, не прибегая к пунктам Герой 1-3 - как обычных юнитов, но в этом случае AI не будет прокачивать их умения.
Приоритеты добычи.
Принципы работы с этим списком аналогичны описанным выше, но этот список попроще. Тут мы назначаем, как компьютер будет распоряжаться построенными рабочими: кого направить на добычу золота, кого на лес. AI точно так же читает все сверху вниз. Если первый элемент списка Золото 3, а второй Лес 2, то первые трое рабочих пойдут добывать золото, а последующие двое – лес.
На добычу вы можете отрядить фиксированное число рабочих или всех сразу. Или всех, кроме атакующих (видимо в тех случаях, когда рабочие являются боевыми единицами – как гули).
На приоритеты добычи вы также можете навешивать условия, хотя они и не всегда срабатывают по моему опыту.Вкладка "Атака"Здесь определяется, кого будет водить в атаку AI и на кого он должен нападать.
Атакующие отряды – Текущий отряд
Это взаимосвязанные списки. В список Атакующие отряды вы добавляете новые отряды, а при помощи списка Текущий отряд определяете состав войск в отряде. В AI для кампании атакующих отрядов может быть довольно много – с их помощью можно разнообразить атаки компьютера. К примеру, чтобы в первый раз он вел в атаку первого героя и наземные войска, во второй – второго героя и воздушные войска, в третий – третьего героя и осадные машины и т.п. Что касается AI для melee, в них редко бывает более 2-3 отрядов. Основным атакующим отрядом будет один, включающий в себя всех героев и все виды войск.
Итак, в текущий отряд вы можете добавлять виды войск. Вы может определять количество войск, входящих в отряд:
Все – в отряд войдут все войска такого-то типа, неважно даже есть ли они у игрока.
Фиксировано – в отряд должны войти определенное число воинов такого-то типа. Причем пока в отряде не будет такого количества, отряд не будет считаться укомплектованным, т.е. AI не будет его использовать.
Минимум-все – в отряд войдут все войска такого-то типа, но чтобы отряд был укомплектован их должно быть не менее такого-то минимального числа.
Минимум-максимум – в отряд войдут не более такого-то максимального числа воинов определенного типа. Отряд будет укомплектован, только если этих воинов не менее заданного минимального значения.
Все за исключением – в отряд войдут все войска определенного типа, кроме заданного числа воинов, которые останутся на базе (например, чтобы какое-то число воинов оставались на базе и охраняли ее).
На записи в таблице Текущий отряд также есть возможность навесить условия. Добавить условие на запись можно через меню Правка, нажав ctrl-m или щелкнуть правой кнопкой мыши на условии и выбрать пункт Модифицировать условие. При помощи условий можно добиться, к примеру, чтобы AI включал в атакующие отряды разные виды войск на разных уровнях сложности.
Волны атаки.
В списке Волны атаки вы определяете, в какой последовательности AI будет использовать атакующие отряды. Т.е. на первое задание AI поведет отряд, указанный для первой волны, для второго – второй и т.д. Кроме отряда вы можете также указать паузу между окончанием работы одной волны и началом работы следующей.
По умолчанию, после последней волны AI будет использовать последний из отрядов, который он водил атаку. Но есть возможность заставить AI повторить атакующие волны. Для этой цели служит пункт Повторные волны, в котором требуется указать номер волны, с которой будут проводиться повторы.
Ниже списка находятся еще два пункта: Минимум войск и Начальная задержка. Первый из них позволяет определить самый первый атакующий отряд. Это очень важно для melee, т.к. в них компьютер отстраивается с нуля. Нужно выбрать момент – когда герой должен отправиться в первую атаку. Например, можно создать отряд Minimum, в который включить первого героя и еще не менее 2 таких-то воинов. Тогда AI отправит героя в первую атаку только после того, как будут построены 2 воина-помощника. Если же вы включите в минимум войск только первого героя – то после постройки героя AI поведет его в атаку, но эта атака будет не очень результативна.
Пункт Начальная задержка позволяет задать паузу – через какое время идти в атаку после того, как минимум войск укомплектован.
Приоритет целей.
Это важный список, от которого во много зависит успех AI. Здесь определяется на кого AI будет ходить а атаку. Компьютер прежде всего реагирует на приоритеты вверху списка и в последнюю очередь на нижние.
Перечислим возможные приоритеты:
(?)Обычная цель – не совсем понятно. Видимо выбор цели предоставляется самой AI.
Новый лагерь (местность) [/i] – целью для AI станет завоевать участок для строительства новой базы (т.е. крипсы, охраняющие рудники).
Враг (главный лагерь) – нападение на главный вражеский лагерь. Т.е. удар по фабрикам.
Враг (дополнительный лагерь) - нападение на дополнительный вражеский лагерь. Т.е. удар по добыче ресурсов.
Враг (любой лагерь) - Нападение на любой вражеский лагерь.
Лагерь монстров – напасть на базы крипсов. Вы можете определять уровень силы крипсов. Примерно: слабые 0-10, средние 10-20, сильные 20-100. А еще можете указать, чтобы нападение велось на крипсов, среди которых нет летающих юнитов.
Купить дирижабль гоблинов – указание AI идти к лавке гоблинов и купить дирижабль. Имеет смысл на островных картах.
Итак, создайте приоритеты и расставьте их в нужном порядке. Например, что главный приоритет – вражески базы, затем обычная цель, затем криспсы. Но это еще далеко не все. На приоритеты можно (не только можно, но и нужно!) навесить условия. Если вы не навесите условий, то AI просто зациклится на первых по счету целях.
К примеру, если первая строка – атака вражеской базы (без условий), то AI вероятнее всего не будет обращать никакого внимания на остальные строки и зациклится на атаках по базе врага. Если первая строка Новый лагерь – то AI поведет воинов в атаку на крипсов, стерегущих рудники (пока не истребит их всех:)).
Какой из этого вывод? Для каждой записи в списке нужно придумать условия. Например, мы можем сделать первым приоритетом Новый лагерь и навесить условие Expansion spot needed. В итоге AI в обязательном порядке будет нападать на крипсов у рудников ПРИ УСЛОВИИ, что AI собирается строить новую базу, но нет свободных участков. Следующим пунктом можно сделать атаку на вражескую базу, ПРИ УСЛОВИИ, что AI имеет в запасе столько-то воинов и т.п. Лучше всего посмотреть, как это делается в примерах.Вкладка "Проверка конфигурации"Эта вкладка предназначена для тестирования AI. Тестирование сделано достаточно неплохо, за исключением тестирования нестандартных рас, у которых главное здание и рабы – нестандартные юниты. Такие нестандартные расы придется тестировать прямо в сценарии.
Скорость игры – скорость, на которой будет происходить тестирование. Можно ставить значения от 1 до 24 от стандартной игровой скорости. Но вообще говоря ставить скорость выше 8 не имеет смысла, т.к. в игре начнется торможение из-за нехватки памяти.
Туман войны – можно самого начала убрать туман войны и видеть всю карту.
Условия победы – можно отключить условия победы. Тогда тестирование продолжится даже если все противники побеждены.
Файл – можно указать сценарий, на котором будет происходить тестирование AI. Карта должна быть пригодна для melee.
Игроки – это таблица, в которой мы определяем, кто и с кем дерется.
В колонке Управляет нужно выбрать одного человека-наблюдателя (себя) и пару компьютеров. Чтобы компьютеры сражались друг с другом, их нужно поместить в разные команды. Игрокам вы можете назначить цвета, чтобы различать где какой AI. Игрокам вы можете назначить разные AI:
Текущий – тот AI, который вы создаете.
Стандартный – обычный компьютерный AI.
Нестандартный – AI, который загружается из файлов с расширением ai. Например, вы можете стравить несколько нестандартных стратегий, созданных вами и посмотреть, какая из них сильнее.
Столбец Фора позволяет ослаблять юнитов определенного игрока (давать фору).
Столбец ИИ (сила) позволяет также изменять силу AI, но другим способом. Уровни легкий, средний и безумный отличаются лишь скоростью добычи ресурсов. Первый вариант испытывает нехватку ресурсов, второй – норма, третий – имеет их с избытком (а значит может быстро развиваться и жертвовать войсками).Как загружать AI в картуВсе достаточно просто. Прежде всего запоминаете каталог, в который вы сохранили свою стратегию. Это будет файл с расширением wai. Затем открываете нужный сценарий, загружаете менеджер импорта. В менеджере делаете команду Импорт файла – и в качестве файла указываете файл с вашей стратегией.
Важно: обратите внимание, что при загрузке файла <стратегия>.wai на самом деле загружается еще один файл <стратегия>.ai. Этот новый файл – и есть настоящая стратегия. Менеджер импорта сам произвел преобразование wai в ai! При желании вы можете экспортировать файл с расширением ai - либо чтобы отредактировать его вручную, либо чтобы использовать его как нестандартный ai при тестировании какого-то другого ai в редакторе.
После того, как AI загружен в сценарий, посмотрите, что произойдет, если открыть редактор AI. В него автоматически будут загружены все импортированные AI и вы сможете вносить в них изменения напрямую. Т.е. исчезнет необходимость все время импортировать файл с AI. Но с другой стороны, не забывайте, что при этом вы работаете с AI находящемся внутри сценария.
Как заставить компьютер использовать импортированную AI?
Заходите в редактор триггеров и создайте команду Start melee AI script for <игрок>: <название стратегии>. Название стратегии берете из списка импортированных стратегий.Практические советыНесколько советов, которые помогут вам работать с редактором AI:
1. Вы можете копировать элементы многих списков: условия, приоритеты строительства, приоритеты добычи, приоритеты атаки, приоритеты атаки, юниты из атакующей группы. Очень часто проще скопировать и отредактировать запись, чем создавать заново.
Копировать можно даже с одной AI в другую. Просто откройте несколько AI и переключайтесь между ними через пункт Окно.
Быстрые клавиши: копировать – ctrl-c, вставить ctrl-v.
2. На вкладке Общие в качестве расы лучше всего всегда указывать Нестандартная раса (о причинах – см выше).
3. Помните, что для нестандартных рас вы можете создавать любые юниты и давать им любые заклинания. Но будут ли юниты использовать новые заклинания – совсем не факт. Будет ли использовать юнит заклинания определяется не в AI. Это уже встроено в игру. Например вы можете дать юниту способность создавать иллюзии, но сам по себе он никогда этой способностью не воспользуется. Этого заклинания не было в игре! Какой выход? Проблему можно решить на уровне триггеров. Например дать юниту способность-пустышку на базе скажем frost armor. Это заклинание юнит будет применять самостоятельно, а мы будем отслеживать на кого оно применено и создавать иллюзии.
4. К сожалению поведение AI нельзя корректировать исходя из мощности противника, также как и вносить элементы случайности. Но при помощи триггеров это можно скорректировать. Например, каждую секунду через команду Send AI command посылать в AI информацию о силе противника. Или передавать AI случайное число.
5. Может быть у вас возникнет соблазн заставить AI строить все в определенном порядке (так, как строили бы вы, если бы играли на его месте). Понимаю ваше желание, но не забывайте, что AI не обладает вашим интеллектом. AI всего лишь выполняет план сверху вниз. Причем чем ниже находится запись, тем больше вероятность, что AI в силу сбоев не будет ею заниматься.
Первый пример. Допустим, в ваших приоритетах строительства:
..
Построить дворец орков
Построить тотем тауренов
Построить таурена
Построить таурена
Построить таурена
..
Неожиданно приходит враг и самоубийственной атакой уничтожает дворец орков. Что произойдет с AI? У нее в распоряжении будет тотем таурена, но он им не сможет воспользоваться. Он будет ждать, пока не будет заново построен дворец орков! И все это время будет пользоваться устаревшими войсками. Этот AI практически обречен против умного противника.
Или еще один пример: в ваших приоритетах строительства первые строки:
Дом вождей
Раб
Раб
Раб
..
Все тут нормально? А если враг придет, уничтожит пару ферм и большую часть строителей? Т.е. по приоритету AI должен строить раба, но для этого не хватает пищевой мощности. Нужна бы ферма, но он ее построить не сможет – ее нет в приоритетах. Значит, наступит ступор и этот AI также обречен.
Третий пример: скорее всего в начале вы будете давать команды AI строить грантов. Но когда уже есть тотем таурена, выгоднее строить тауренов. Но ваш AI все равно будет строить грантов – ведь их приоритет сохранился и он даже выше, чем у тауренов. Весело?
Как же с этим бороться?
Используйте свой интеллект :). Вы должны навешивать на приоритеты строительства определенные условия! Не даром условный оператор называется также оператором ветвления. При помощи условий мы производим ветвление алгоритма, делаем его более универсальным.
Рассмотрим еще раз наши примеры с учетом условий.
Пример 1: произведем некоторую перестановку. Переместим все что связано с тауренами ближе к началу приоретов строительсвта.
..
Построить бараки
Построить тотем тауренов
Построить таурена
Построить таурена
Построить таурена
..
Построить дворец орков
..
Законный вопрос: т.е. как? AI построит бараки, захочет построить тотем, но ведь необходимого для этого дворца нет? Ответ: мы навесим на пункт Построить тотем тауренов условие Количество дворцов таурена больше 0 (integer comparison), а на постройку каждого таурена навесим условие Количество тотемов таурена больше 0. Наша задача решена. Как только будет готов дворец, будет построен и тотем и AI будет его использовать даже если дворец будет снесен.
Пример 2: очевидно нужно расставить приоритеты. После дома вождей следующим приоритетом должна быть постройка нужного числа ферм, а затем уж постройка рабов. Но фермы нужно строить только ЕСЛИ в них есть необходимость. Можем мы определить, когда в ферме есть необходимость? Да. Я эту задачу решил создав специальное условие need farm: Food Produced – Food used меньше или равно 4. Т.е. если количество производимой еды минус количество используемой еды меньше 4 – пришло время для фермы. Поэтому у меня первые строки приоритетов выглядят так:
Дом вождей
Логово орка
Логово орка
..
Логово ррка
Раб
Раб
..
На каждое логово навешено условие need farm.
Только есть одно но. Если оставить все как есть, то при нехватке еды доблестные работнички примутся строить столько ферм, на сколько им хватит денег (подумайте почему?). Я же хочу, чтобы одновременно строилось не более 1 фермы. Поэтому я модернизировал условие need farm: (Food Produced – Food used меньше или равно 4) and (количество логов орков - количество логов орков завершенных равно 0). Т.е. если у нас строится хоть одна ферма, то количество логов больше чем количество построенных логов. А значит AI не сможет строить одновременно более одного логова.
Задача решена: в случае нехватки еды AI не будет впадать в ступор, а будет оставшимися рабочими строить фермы. Более того, мне больше не нужно вообще заботится о постройке ферм в приоритетах строительства.
Третий пример: я думаю вы уже и сами поняли, что нужно делать. Как избавить AI от необходимости строит устаревшие юниты? Всем юнитам, которые впоследствии устареют ставим условие – строить их только ЕСЛИ компьютер не дошел до определенной стадии развития. Например, строить грантов до тех пор, пока количсетво тотемов таурена = 0.