WarCraft 3: Часть четвёртая. Когда нам следует что-то построить...

Создание простого (Melee) AI

8. Когда нам следует что-то построить [код для добавления ]

Эта часть статьи могла бы быть о конструировании наших собственных функций, но она бы требовала больше теории. Следовательно, мы рассмотрим, как мы можем узнать, когда мы должны строить новые здания и тренировать новых юнитов. Это не очень умно, чтобы пытаться создать стрелка, если у нас есть барак, но отсутствует кузница.
Самый простой путь заставить AI создать здания будет только лишь позволить ему попытаться это сделать, игнорируя все зависимости. Если мы поместили бы все приказы строительства в цикле, это в конечном счете построит всё, что мы приказали бы. Но он всё же не будет работать очень хорошо, мы получим несколько зданий, подобно 3 кузнецам. Как затем эта проблема может быть решена?
Если мы снова просмотрим часть четвёртую (Строительство ферм для поддержки большего количества рабочих) и пятую (Создание барака и подготовка нескольких солдат), то мы увидим, что есть несколько if'ов, условий, которые решают, что должно быть сделано. Мы должны быть способными создать несколько правил, которым должен следовать AI, чтобы построить хотя бы одно здание. Так, что мы ждём, давайте попробуем сделать это!

Правило 1: Если у нас мало крестьян, нам нужно тренировать больше крестьян.
Правило 2: Если у нас мало еды, нам нужно строить больше ферм.
Правило 3: Если у нас нет казарм, мы должны построить казармы.
Правило 4: Если у нас есть казармы, то мы должны тренировать пехотинцев.
Правило 5: Если у нас есть казармы, мы должны построить кузницу.
Правило 6: Если у нас нет алтаря, то мы должны построить алтарь.
Правило 7: Если у нас есть алтарь, но нет героя, мы должны создать героя.
Давайте посмотрим на эти правила, которые, надо надеяться, дадут нам армию пехотинцев и стрелков, лидируемых героем. Но почему Вы не подумали, как будете преобразовывать их в Jass, прежде, чем Вы прочитали? (Часть шестая, содержащая if-условия, может помочь.)
Эх, ленитесь попытаться сделать что-то своё? Хорошо, я проведу вас через несколько из них.
Давайте посмотрим, как мы можем реализовать правило первое на Jass, Оно будет похожим на это в условии if:

if "we have to few peasant" then 
  "train more peasants"
endif
Что делает few mean, и как много more? Давайте изменим правила вот так:
Rule 1b: Если у нас меньше 10 крестьян, начинаем тренировать одного крестьянина.
И попробуем преобразовать новое правило в Jass:
if GetUnitCount('hpea') < 10 then 
  call SetProduce( 1, 'hpea', 0 ) // 0 - это наш стартовый город
Endif
Мило!
Так давайте сделаем то же самое с другими правилами. Я укажу преобразованные правила и код. Попробуйте это сами, перед тем, как я.
Правило 1b: Если мы имеем менее чем 10 крестьян, тогда начинаем тренировать 1 крестьянина.
Правило 2b: Если мы имеем менее чем 6 дополнительных единиц пищи, тогда начинаем строить 1 ферму.
Правило 3b: Если мы имеем менее чем 1 казарму, тогда начинаем строить ещё 1 казарму.
Правило 4b: Если у нас есть более, чем 0 казарм, тогда начинаем тренировать одного пехотинца.
Правило 5b: Если у нас есть более, чем 0 казарм и мы имеем меньше чем 1 кузнецу, тогда начинаем строить одну кузнецу.
Правило 6b: Если мы имеем менее чем 1 алтарь, тогда начинаем строить 1 алтарь.
Правило 7b: Если у нас есть более, чем 0 алтарей и мы имеем менее 1 героя, тогда начинаем готовить 1 героя.
Правило 8b: Если у нас есть более 0 правил, не конвертированных в Jass, тогда начните преобразовывать первое правило на Jass.

Просмотров: 3 985

Комментарии пока отсутcтвуют