2章 暗黒の時代序盤 〜粉ひき所、伐採所の建設〜

1.粉ひき所を建設する

暗黒の時代に羊を収穫し終わったら次は苺である(AIは猪を狩ることできない)。AIの斥候は探索が下手なので初期羊がなかなか見つからず、最初に苺をとらなければならないことも多い。

以下のAIスクリプトは苺を発見したら粉ひき所を建設する例である。

;●粉ひき所の建設
(defrule
  (resource-found food)                                   ;苺を発見済み
  (building-type-count-total mill == 0)                   ;粉ひき所が0個
  (can-build mill)                                        ;粉ひき所が建設可能
=>
  (build mill)                                            ;粉ひき所を建設する
  (chat-local-to-self "粉引き所を作ります。")
)

【条件】
(resource-found 「資源」) … 指定された種類の資源が発見済みかどうか判定。「資源」は「food」食料(苺)、「gold」金、「stone」石、「wood」木(立ち木ではなく森)。
(building-type-count-total 「建物」 「演算子」 「値」) … 自分の所有する指定した種類の建物の数(建設中の建物も含む)を判定。
(building-type-count 「建物」 「演算子」 「値」) … 自分の所有する指定した種類の建物の数(建設中の建物は含まない)を判定。

★ポイント
必ず苺を発見した後に粉ひき所の建設する。苺を発見していないのに粉ひき所建設命令を出すと適当な場所に粉ひき所が建設される。また条件として「粉ひき所がない場合」が入っていないと、資源がある限り粉ひき所を何個も建設し続けてしまう。

2.機織りの研究をする

町の人を4人生産し終わり人口8人の時点で食料が50貯まっていない場合も多い。その場合は「機織り」を研究することになる。

以下のAIスクリプトは町の人が7人以上になったら機織りを研究する例である。

;●機織りの研究
(defrule
  (unit-type-count villager >= 7)                         ;町の人が7人以上
  (can-research ri-loom)                                  ;機織りが研究可能
=>
  (research ri-loom)                                      ;機織りの研究をする
  (chat-local-to-self "機織りを研究します。")
)

【条件】
(can-research 「研究」) … 指定した種類の研究ができるかどうか判定。研究する資源があるか、文明や建設する前提条件を満たしているか。研究する建物は空いているか(ユニット生産中等ではないか)。

★ポイント
町の人が7人以上で食料が50貯まっている場合、町の人の生産のルールと機織りの研究のルールの条件が同時に満たされる。この場合「スクリプトファイルの上の行に書いてある」ルールが優先的に実行される。町の人の生産のルールを上に記述すれば、町の中心では「機織り」より町の人を生産を優先する。

3.資源収集割合の調整

町の人が7人になったら木を収集するようにAIスクリプトを追加する。初期設定では町の人の資源収集の割合を食料を収集する人100%に設定していたので、食料を収集する人90%、木を収集する人10%に変更する。

以下のAIスクリプトは町の人が7人になったら資源収集の割合の変更する例である。

;●資源配分の変更
(defrule
  (current-age == dark-age)                               ;暗黒の時代
  (unit-type-count villager == 7)                         ;町の人が7人
=>
  (set-strategic-number sn-wood-gatherer-percentage   10) ;木を収集する人の割合
  (set-strategic-number sn-food-gatherer-percentage   90) ;食料を収集する人の割合
  (set-strategic-number sn-gold-gatherer-percentage    0) ;金を収集する人の割合
  (set-strategic-number sn-stone-gatherer-percentage   0) ;石を収集する人の割合
  (chat-local-to-self "資源配分の変更(木:10 食:90 金: 0 石: 0)")
  (disable-self)
)

さらに以下のように町の人が増えるごとに資源収集の割合を変えて内政バランスを保つ。

;●資源配分の変更
(defrule
  (current-age == dark-age)                               ;暗黒の時代
  (unit-type-count villager == 12)                        ;町の人が12人
=>
  (set-strategic-number sn-wood-gatherer-percentage   20) ;木を収集する人の割合
  (set-strategic-number sn-food-gatherer-percentage   80) ;食料を収集する人の割合
  (set-strategic-number sn-gold-gatherer-percentage    0) ;金を収集する人の割合
  (set-strategic-number sn-stone-gatherer-percentage   0) ;石を収集する人の割合
  (chat-local-to-self "資源配分の変更(木:20 食:80 金: 0 石: 0)")
  (disable-self)
)
;●資源配分の変更
(defrule
  (current-age == dark-age)                               ;暗黒の時代
  (unit-type-count villager == 15)                        ;町の人が15人
=>
  (set-strategic-number sn-wood-gatherer-percentage   30) ;木を収集する人の割合
  (set-strategic-number sn-food-gatherer-percentage   70) ;食料を収集する人の割合
  (set-strategic-number sn-gold-gatherer-percentage    0) ;金を収集する人の割合
  (set-strategic-number sn-stone-gatherer-percentage   0) ;石を収集する人の割合
  (chat-local-to-self "資源配分の変更(木:30 食:70 金: 0 石: 0)")
  (disable-self)
)
;●資源配分の変更
(defrule
  (current-age == dark-age)                               ;暗黒の時代
  (unit-type-count villager == 20)                        ;町の人が20人
=>
  (set-strategic-number sn-wood-gatherer-percentage   40) ;木を収集する人の割合
  (set-strategic-number sn-food-gatherer-percentage   60) ;食料を収集する人の割合
  (set-strategic-number sn-gold-gatherer-percentage    0) ;金を収集する人の割合
  (set-strategic-number sn-stone-gatherer-percentage   0) ;石を収集する人の割合
  (chat-local-to-self "資源配分の変更(木:40 食:60 金: 0 石: 0)")
  (disable-self)
)

★ポイント
資源バランスの調整でAIの内政力が変わってくる。特に暗黒の時代では細かく資源収集の割合を変えるだけで内政の効率がかなり良くなる。

4.伐採所を建設する

森が発見済みで伐採所の建設できる木が貯まったら伐採所を建設する。このAIでは伐採所は粉ひき所の後に建設するため、粉ひき所が1つ以上という条件を設定している。

;●伐採所の建設
(defrule
  (resource-found wood)                              ;森発見済み
  (building-type-count-total mill >= 1)              ;粉ひき所が1つ以上
  (building-type-count-total lumber-camp == 0)       ;伐採所が0個
  (wood-amount >= 130)                               ;木が130以上
  (can-build lumber-camp)                            ;伐採所が建設可能
=>
  (build lumber-camp)                                ;伐採所を建設する
  (chat-local-to-self "伐採所を建設します。")
)

【条件】
(wood-amount 「演算子」 「値」) … プレイヤーの保有する木の量を判定する。 同様に「food-amount」「gold-amount」「stone-amount」という条件もある。

★ポイント
伐採所を資源ギリギリで建設すると家ミスする可能性があるので木が130以上という条件を追加している。

5.まとめ

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