戦術鬼(全面的に書き直し)

ガンパレ作中で坂上先生が伝授してくれる戦術の極意について。
「敵の攻撃が当たらない場所から敵を攻撃する」(この状態を「戦術適合」と称す。これは私の造語)
それを実現するためには
「移動(場所取り)が重要」
注を入れるとするならば、この戦術は負けないための戦術であり、個人が生き残るための戦術である。これだけでは、味方との連携は考えられていない。誰かを犠牲にして敵をおびき寄せ、袋叩きにするような展開はこの原則からは導き出せないだろう。

なお、この原則について出てくる疑問は、敵の攻撃範囲が広すぎたり自分の移動力が低すぎたりする場合に、「敵の攻撃範囲外で」「自分の攻撃範囲内」を満たす位置が存在しなくなる場合においてどうするかと言う問題である。
まあ、ここでは生き残ることを主眼におき、このような場合は「敵の攻撃範囲外」に出ることを優先するとする。

となると、アルゴリズムは下記のようになる。

1.敵の攻撃範囲内にいるならば、範囲外に出るように移動する。さもなければ2へ。
2.敵が攻撃範囲内にいるならば、攻撃する。さもなければ3へ。
3.敵の攻撃範囲外で、敵を攻撃可能な位置まで移動する。そういう位置がなければ4へ。
4.考える。考えられる行動としては「何もしない」「索敵」「敵の攻撃範囲を再考する」などがある。

これを基本アルゴリズムとし、単位時間ごとにこのアルゴリズムに従い行動を決定する。

このアルゴリズムで重要になってくるのは、「攻撃範囲」の定義である。この定義を変更することにより、同じアルゴリズムでも柔軟な戦術行使が可能になると考える。
単純に考えた場合の攻撃範囲とは、敵(や自分)が現在の位置から動かずに、装備している武器でもって攻撃可能な範囲を指す。
これに対するオプションとしては、下記のようなものが考えられる。

命中率による
敵の技量を考慮し、命中率がn%以下の武器による攻撃は考慮しない。例)自分が高速機体であり、敵が鈍重な白兵戦武器による攻撃を試す場合。
ダメージ量による
その武器の与えるダメージ値を予測し、n点以下のダメージしか与えない場合、その武器は考慮しない。例)敵が軽いバルカンによる攻撃で、自分が重装甲の場合
被攻撃回数による
その位置では、n回の攻撃を受けることが予測されるが、それによるリスクは折込済みとみなす。例)自分が使い捨てのリアクティブ・アーマーを装備している時など。

また、これらのオプションはそのまま自分の攻撃範囲へも転用可能である。

命中率による
攻撃命中率がn%以下になるエリアは、自分の攻撃可能範囲から外す。例)攻殻機動隊のメンバーのように、遠距離からの射撃の技量よりも、必ず当たる距離まで近づく技量を鍛える。
ダメージ量による
n点以下のダメージしか与えない場合、自分の攻撃可能範囲から外す。例)レーザー兵器などは命中率は高いが、距離による威力の減衰を非常に受けやすい。
攻撃可能回数による
n回以下の攻撃を行えない位置は、攻撃可能範囲から外す。例)ガンパレの複座式士魂号。できる限りたくさんの幻獣を攻撃範囲に収めてからミサイル発射を狙うのが定石。

また、今は非ブラインドゲームを前提としているが、自然条件や隠密能力などを考慮に入れたブラインドゲームになると、アルゴリズムに索敵の要素を盛り込む必要が出てくるし、また、パラメータにも「安全性」を追加する必要が出てくるだろう。

安全性
敵の攻撃可能範囲に関する追加パラメータ。敵が性能を隠していたり、あるいは武器を隠していた場合に備えて、敵の攻撃可能範囲をあらかじめn%過大評価しておく。なお、コンピュータが操作する場合、この安全性のパラメータを0にしておくと、ドット単位の見切りを見せてくれるだろうが、心臓によくないかも。
仮定
安全性の変形。敵が特定の武器を必ず装備していると考えて敵を評価すること。逆にこれだけは必ず装備していないと考えてもいい。例)ちょっと違うが、マジック:ザ・ギャザリングにおいて自分が赤使い、敵が青使いの場合に「相手の手札にカウンターはない」ことを前提に呪文をバリバリ使い倒すような。あるいは自分も青使いの場合に「相手の手札には必ずカウンターがある」ことを見越して慎重に手札とマナを蓄えるような。
隠密
敵が自分の位置を把握していなければ、攻撃をしない。従って、敵が自分に気付いていない場合に限り、敵の攻撃範囲を0として扱うことができる。

アルゴリズムに0番を追加。
0.敵を見失っていれば索敵を行う。さもなければ1へ。

さて、これまで述べて来たことを付き合わせると、敵対関係にある戦闘ユニットが、様々な自然現象を持つ同一のマップ上で互いを破壊しようとする光景が浮かぶ。言わば、ロボクラッシュのようなゲームである。

その実装に関してをオブジェクト指向的に考えると

  • 自然条件・マップ等を内蔵したmapクラス
  • 戦闘する主体を表すmachineクラス
  • machineクラスを制御するcomputerクラス

が必要になる。
computerインスタンスは、自分と敵の二つのmachineインスタンスを内蔵するが、自分のmachineインスタンスは(ほぼ)実体と同じパラメータを持つが、敵のmachineインスタンスは観測結果に基づいた不完全な内容しか持たない。
実際に戦闘してみて、computerクラスは敵のインスタンスをより現実に即した物に変更していく。
そしてその構築した情報を元に先にアルゴリズムを用いて自機の行動を決めて戦闘を行うのである。

さて、このゲームでは、どちらも基本的には同じアルゴリズムにのっとって行動を選択するのだから、その勝敗を決定するのはまずは装備が考えられる。だが、非ブラインドゲームであることから、武器を隠す、あるいは自分自身すら隠すことで敵の意図しない戦術適合の状態に持っていくことができるだろう。装備ではなく、戦闘中の情報収集が勝敗を分けるのである。
射出武器も実体弾、ミサイル兵器、レーザー兵器などがある。
白兵戦武器も攻撃用の武器とシールドもある。
武器は機体表面に剥き出しでもいいし、内部空間に秘匿してもいい。秘匿して、条件を満たさなければ使えないようにすれば、戦術適合の状態を作り出せるかも知れない。
装甲も通常の装甲を厚みで調整するのに加え、リアクション・アーマー、ラバーコーティング(レーザーが当たると蒸発して内部を守る)、ミラーコーティング(レーザーを反射する)、ステルス・コーティング(電波を吸収してレーダーを無効化する)、光学迷彩も考えられる。
攻撃手段もピンポイントで敵の感覚器や関節を狙うなどがありえる。
感覚器も通常の視覚の他に、音声、赤外線、足跡の深さから敵の真の重量を推測もできるだろう(見えている質量と真の質量の格差が、内部空間に秘匿されている兵器類の質量。隠し弾があるかどうかの目安になりえる)。

さて、今度はこれが一対他、他対他になった場合はどうなるだろうか。
アルゴリズムは、0条を変更するだけで当座は足りる。
0.敵を一体も補足していない場合は、索敵を行う。さもなければ1へ。
ただし、実装に際しては非常に処理が増える(単純計算では2のn乗の処理量になる)ので、現実的な速度を求めるならばデータベースソフトとの連携が必須であろう。
また、連携ならではの装備もある。すなわち通信装置である。
味方が複数いる場合、一体の敵を多方面から観察するのは意味がある行為だ。だが、それもこれも味方のcomputerインスタンス同士が通信を行い、お互いの情報を交換しあうことが前提である。持っている敵の情報が同じであれば、味方同士でお互いの動きをシミュレートできるし、そこには連携の可能性も生じてくる。
そのために必要なのが通信手段である。
電波、レーザー、超音波、量子通信等が考えられる。
また、役割分担の可能性もこれで生じる。
索敵専門の飛行機体と、超レンジの狙撃機体のコンビは、確実な通信手段がある場合に限り、効果的な戦闘が可能になるだろう。
また、敵もそれに対抗するためにジャマーやチャフなどを装備できるべきだろう。