3章 暗黒の時代中終盤 〜畑の作成と領主への進化〜

1.畑の建設

前章までのAIを実行してみるとわかるが、畑が自動的に張られることはない。AIでは畑は建物として扱われ、粉ひき所や伐採所のように「build」命令で建設する必要がある。畑を建設するタイミングは伐採所を建設した後である。また、家ミスしないために木が90以上という条件も追加している。

以下のAIスクリプトは畑が4枚未満の場合に畑を建設する例である。

;●畑の建設
(defrule
  (building-type-count-total lumber-camp >= 1)            ;伐採所が1以上
  (wood-amount >= 90)                                     ;木が90以上
  (building-type-count-total farm < 4)                    ;畑が4枚未満
  (can-build farm)                                        ;畑が建設可能
=>
  (build farm)                                            ;畑を建設する
  (chat-local-to-self "畑を張ります。")
)

★ポイント
AIは同じ種類の建物を同時に2つ以上建設できない仕様になっている。畑も建物であるので、ひとつの畑が建設し終わってからでないと次の畑を建設することができない。そのため大量に木が余る前にコツコツと畑を張る必要がある。

2.領主への進化

町の人が24人以上になったら進化ボタンを押すようにする。ルールの条件として現在進化中か判定する条件文は存在しない。そこで「goal」という変数を使い進化状態を設定する。ゴールは40個設定できるが、ここではゴール1に進化中かどうかの状況を設定する。

以下のAIスクリプトはゴール1を初期化するルールと、領主の時代の研究をするルールの例である。

;●ゴールの初期化
(defrule
  (true)
=>
  (set-goal 1 0)                                          ;ゴール1に0を設定
)
;●領主の時代の研究
(defrule
  (current-age == dark-age)                               ;暗黒の時代
  (unit-type-count villager >= 24)                        ;町の人が24人以上
  (can-research feudal-age)                               ;領主の時代が研究可能
=>
  (research feudal-age)                                   ;領主の時代の研究をする
  (set-goal 1 1)                                          ;ゴール1に1を設定
  (chat-local-to-self "領主の時代の研究をします。")
)

【命令】
(set-goal 「ゴールID」 「値」) … 指定したゴールに値を設定する。

★ポイント

AIでは猪を狩ることができないためAIの25人進化は人間が20人進化をするのと同じくらい内政が厳しい。AIで30人進化すると人間の25人進化レベルの内政力となるので、本格的な領主ラッシュをする場合は30人進化をする必要がある。

3.戦士育成所の建設

領主へ進化中に戦士育成所を建設する。進化中かどうかの判定は領主進化時に設定したゴール1の値を利用する。

暗黒の時代でゴール1に1が設定されている場合(つまり進化中)に戦士育成所を建設する例である。

;●戦士育成所の建設
(defrule
  (current-age == dark-age)                               ;暗黒の時代
  (goal 1 1)                                              ;ゴール1が1
  (building-type-count-total barracks == 0)               ;戦士育成所がない
  (can-build barracks)                                    ;戦士育成所が建設可能
=>
  (build barracks)                                        ;戦士育成所を建設する
  (chat-local-to-self "戦士育成所を建設します。")
)
    

【条件】
(goal 「ゴールID」 「値」) … 指定したゴールが値と等しいか判定。

★ポイント
進化中かどうかの条件判定をしないとペルシア等で木が多い場合に、ゲーム開始直後に戦士育成所を建設してしまうので注意。

4.進化中の資源調整

領主の時代になって射手育成所を2つ建てるため、進化ボタンを押した後に木の収集割合を増やす。

;●資源配分の変更
(defrule
  (current-age == dark-age)                               ;暗黒の時代
  (goal 1 1)                                              ;ゴール1が1
=>
  (set-strategic-number sn-wood-gatherer-percentage   70) ;木を収集する人の割合
  (set-strategic-number sn-food-gatherer-percentage   30) ;食料を収集する人の割合
  (set-strategic-number sn-gold-gatherer-percentage    0) ;金を収集する人の割合
  (set-strategic-number sn-stone-gatherer-percentage   0) ;石を収集する人の割合
  (chat-local-to-self "資源配分の変更(木:70 食:30 金: 0 石: 0)")
  (disable-self)
)
    

★ポイント
食料収集に特化して25人で進化しているので、進化中は育成所建設のために木を多く収集する。

5.まとめ

3章までのAIをダウンロード(sample03.per)