CTCity Takeover 攻略ノート

ボットは何を考えて線を引くか

ボットは毎フレーム考えているわけではありません。数秒おきに「次はどこへつなぐか」を1回決めて、その手を実行します。判断の中身は意外なほど素直です。

01考えてから動くまでの流れ

ボットは minDecisionMakingTime と maxDecisionMakingTime のあいだのランダムな秒数だけ待ち、そのあと候補の建物を全部評価して、いちばん高い1棟へ線を引きます。引いたらまた待ちます。

待ち時間を持たせているのは、人間が操作できる速度に合わせるためだと考えられます。4〜8秒設定のボットは平均6秒で手を出すので、こちらの2手に対して1手くらいのペースです。

02判断値の作り方

候補の建物1棟ごとに、次の3つを足して、最後に係数を掛けます。ビルドのソースでは、この合計がそのまま「つなぐ価値」になります。

  • 建物タイプ係数:四角1.0、円1.2、三角1.2、星1.5。形が強いほど高い。
  • 人口比スコア:候補の人口を上限で割った値。自軍の建物には線形(Linear.None)、敵の建物には Sinusoidal.Out の曲線を当てる。
  • 周囲係数:候補につながっている建物の成長速度を合計し、タイプ(攻撃・防御)で重みを変えて足す。
  • 最後に decisionValueFactor(既定1)を掛ける。

03待ち時間の2大パターン

288体中150体が4〜8秒、117体が1〜15秒です。前者は安定して干渉してくる相手、後者は長い沈黙がある代わりに、動き出したときの判断が遅いぶん読みやすい相手です。

同じステージでも、どのチームのボットがどの設定かで難易度が変わります。3体いるステージでは、4〜8秒のボットが2体混ざっていることが多く、こちらが2手打つあいだに2手返ってくる形になります。

04奪うか、育てるか

allowTakeover が true のボットは、相手の建物を奪いに行きます。false のボットは奪わず、自分の建物を育てる側に回ります。288体中 false は2体だけで、ほとんどのボットは攻めてきます。

奪う動きが入ると、判断値のうち「敵の建物の人口比」が効いてきます。人口が上限に近い敵の建物は Sinusoidal.Out で高い値が出るため、ボットは「太った敵」を狙いやすい計算になります。

05開幕だけは台本がある

91体のボットには botActions が入っています。これは「何秒待って、どの建物からどこへ線を引く」という指定で、ステージ開始直後の数手だけ台本どおりに動きます。

台本がある理由は、開幕の形を作者が揃えたいからだと推測できます。たとえば level-96 は8手ぶんの指定があり、星だらけの街で最初の数手が固定されています。台本を消化したあとは通常の判断ループに戻ります。