建物と研究

建築

建物を建てるのは簡単です。

(build house)
(build market)

建物を建てる位置を細かく決めることは出来ません。

建物の位置は、コンピュータが勝手に決めてしまいます。建つ位置は建物の種類によって変わります。例えば家は町の中心からかなり近い位置に建てられますが、町の中心のすぐ隣は畑を建てる位置として確保されますので、町の中心から少しだけ離れたところに建てられます。

粉引き所は食料の近くに建てられます。しかし、建てる命令を出したときに、食料がまだ見つかっていないときには、まったくでたらめに建てられてしまいます。そこで、食料を発見してから建てるようにすると良いでしょう。

(defrule
  (resource-found food)
  =>
  (build mill)
)

ただしこれだけでは、粉引き所を建てられるだけの資源がある限り粉引き所を延々と建てつづけてしまいますので、実際にはこのようにします。

(defrule
  (resource-found food)
  (dropsite-min-distance wood > 3)
  =>
  (build mill)
)

追加した条件は、食料のある位置が粉引き所や町の中心から 3タイル分よりも離れているかどうか、というものです。新たに建てられる粉引き所は、食料がマップ上にある限り、食料のすぐ近くに建てられるため、食料のある場所一つにつき一個の粉引き所が建てられることになります。ただし、畑を作るためには最低一つの粉引き所が必要なので、仮に食料が近くにないマップで戦うときには、食料がなくても最低一つは粉引き所が建てられるようにしなければなりません。

建物が建てられる位置については、もう一つ重要な点があります。基本的に、粉引き所、伐採所、採掘所、この三つの建物は、それぞれ建てる位置を制御するための専用の命令が存在します。

(set-strategic-number sn-camp-max-distance 30)
(set-strategic-number sn-mill-max-distance 30)

これらの命令は、町の中心からどのぐらいの距離までに建物を建てて良いかを指定します。上が伐採所と採掘所、下が粉引き所に関する命令です。この三つの建物は、指定された距離よりも町の中心から離れたところには絶対に建てられなくなります。

上の三つの建物以外は、全て「町」の内側に建てられます。この「町」をどこまでの範囲にするかを決める命令が以下のものです。

(set-strategic-number sn-maximum-town-size 20)

こう指定することで、建物を建てる範囲を制限することが出来ます。ただし、建物以外で「町」に関係のある命令があるかもしれないので注意してください。

「町」に関係無く建物を建てるには、以下の命令を使います。

(build-forward barracks)

こうすると前線に戦士訓練所を建てる事が出来ます。
 


壁を作るには少しやっかいな方法を取ります。

まず、AI は壁を二通りの位置にしか作れません。町の中心を小さめに囲むか、多少大きめに囲むか、この二通りだけでしか壁を作ることは出来ません。しかも、多少大きめに囲むようにしても、城主の時代に色々な建物を建てていくと壁の内側が建物で埋まってしまうほどの広さでしか壁を作ることが出来ません。

壁を作るには、壁を作る位置をあらかじめ確保しておく必要があります。壁が作られる位置は決まっているので、その位置に他の建物を建てないよう、あらかじめ命令を発行しておかなければなりません。

(enable-wall-placement 2)

この命令には 1 か 2 を指定します。1 だと町の中心を小さめに囲むように場所を確保し、2 だと多少大きめに囲むように場所を確保します。この命令を発行したあとでは、確保した場所に建物を建てる事ができなくなります。

さて、場所を確保したあとでは、いつでも壁を作ることが出来ます。というか、場所を確保せずに壁を作ろうとして失敗することがなくなります。

壁には二系統、三種類あります。柵と壁と強化壁です。

(build-wall 2 palisade-wall)
(build-wall 2 stone-wall-line)

上は柵を作る命令です。下は壁か強化壁を作る命令です。この命令の一番目のパラメータには、さきほど確保した場所を指定します。この命令を発行すると、壁がある単位だけ作られます。ある単位とは、一ブロックまたは一直線または一定の距離を指します。ただ言えるのは、一度この命令を発行しただけでは、壁が一度に張られるわけではない、ということです。ですから、壁を張り巡らせたければ、この命令を何度も発行する必要があります。そこで、壁がどの程度張り巡らせられたかを調べる方法があります。

(wall-completed-percentage 2 < 100)

上の条件は、壁が 90%未満までしか張り巡らされていないかどうかを調べます。

壁を作れるかどうかは以下の条件で調べることができます。

(can-build-wall 2 stone-wall-line)

壁には門が必要です。門を作るには以下の命令を出します。

(build-gate 2)

門を作れるかどうかは以下の条件で調べることができます。

(can-build-gate 2)

門は、一度作られると通常の建築物と変わらない扱いを受けるので、以下の条件によって現在の門の数を調べる事が出来ます。

(building-type-count-total gate < 3)
(building-type-count gate < 3)

文明にゴートを選択してしまうと、壁を作ることが出来ません。もし AI を複数の文明に対応させたければ、壁を作れるかどうかを判断して、場合によっては柵を作るようにしなければなりません。また、柵には門を作れないため、100%柵を張り巡らさないようにしなければなりません。
 

研究

研究自体は非常に簡単です。ユニットの生産や建物の建築と同じように、以下のような構文で研究できます。

(defrule
  (can-research ri-hand-cart)
  =>
  (research ri-hand-cart)
)

研究の難しさはむしろ、いくつもある研究のどれを優先すべきか、またユニット生産と研究をどのようにからめるか、という点にあります。

たとえば、鋳造歩兵用鎖かたびらと、両方の研究をしたいとします。そしてどちらかといえば鋳造の方を優先したいとしましょう。そんなときにはどうしたら良いでしょう。たとえば以下のように鋳造の方を前に書けば良いのでしょうか。

(defrule
  (can-research ri-iron-casting)
  =>
  (research ri-iron-casting)
)

(defrule
  (can-research ri-chain-barding)
  =>
  (research ri-chain-barding)
)

しかしこの方法は必ずしもうまく行きません。なぜなら、鋳造に掛かる研究コストが 220F 120G なのに対して、歩兵用鎖かたびらの研究コストは 200F 100G です。つまり、200F 100G 以上たまった瞬間に歩兵用鎖かたびらの研究が行われてしまうのです。

上の例だけを単純に解決する方法は簡単です。歩兵用鎖かたびらを研究するための条件に、鋳造を既に研究し終えているかどうかを加えれば良いのです。

(defrule
  (can-research ri-chain-barding)
  (research-completed ri-iron-casting)
  =>
  (research ri-chain-barding)
)

ただし、高温溶鉱炉歩兵用甲冑とでは単純には行きません。なぜなら、ビザンティンには高温溶鉱炉がないからです。そこで、文明ごとに、とある研究技術があるかどうかを調べる必要があるわけです。

(defrule
  (can-research plate-mail)
  (or
    (research-completed ri-blast-furnace)
    (not (research-available ri-blast-furnace)
  )
  =>
  (research ri-plate-mail)
)

上の例は、歩兵用甲冑を研究するに当たって、十分な資源があり、高温溶鉱炉を研究済みかもしくは研究自体が不可能であるか、という条件を見ます。

研究に関してはさらに細かいことが要求されます。たとえば、重剣剣士の研究と重騎士の研究のどちらを優先すべきでしょうか。それは、現在の自軍の構成だとか、文明による有利不利によって変わってくるはずです。自分の文明がフランクであれば、重騎士の研究は最優先かもしれません。しかし、長槍兵の研究が終わっていなかったらそちらを優先しなくてはならなかったりします。また、現在敵に攻められている真っ最中であれば、近衛騎士の研究は後回しにして、持っている資源を総動員して戦力を補充する必要があるかもしれません。

普段我々が対人プレイでゲームをするときに何気なくやっている研究なんかでも、それを AI にやらせようと思ったら大変です。フラグ非常用資源の概念などを使いながら、たくみに研究していくしかないと思います。むやみにユニットを作るよりも、研究をしたほうがよほど効率的です。研究を怠ると、失うユニットの数も増え、次第に戦局がひっくり返されて行きます。
 

gomi@din.or.jp