ゲープロ講座セッション5:戦術型SLGの移動アルゴリズム(4)

- 最適探索 〜コンピュータがプレイヤーと相対するために
Article Written: 2000/2/8




 3ヶ月ぶりのご無沙汰、鷹月ぐみなです。皆さん待ちくたびれて、さっさと自分でSLG作っちゃったでしょうか(^^;)。前回書いてから、とっても忙しくなっちゃいまして、ゆっくり記事を書く暇がなかったんです。ようやくこの講座を書く時間が取れましたので続けていきます。続き期待してくれた皆さん、ほんとありがとうございました。



 間が空いたので、私自身の思考も整理させるために今までの概要を思い返してみましょう。
 SLG講座(1)で、SLGの移動ルーチンにはしっかりとしたアルゴリズムを与えてあげなくてはいけない事を説明しました。(2)にて、その基本となる「最短移動」について触れ、サンプルアプリケーションを提供しました。(3)では、最短移動に探索幅という条件を加えた、ちょっとしたコーヒーブレイク、ここで条件いかんでいろんなバリエーションが出る事を説明しました。
 皆さんも思い出しましたか?ここからは、(1)〜(3)は完全に話の前提としますので、ちょっと忘れちゃった方は見直しておいてください。では、いきますよー。



 もうプレイヤーの移動に関しては卒業です。今回のセッションからいよいよ、敵さんにスポットを当てて進めていこうと思います。さて、プレイヤーと敵さん、何が違うんでしたっけ?
 当たり前な回答ですが、プレイヤーは自分のキャラをどこに動かすかを自由に決める事ができます。対して敵さんはアルゴリズムによって自動的に決めます。移動に関する部分はそれだけが違いです。目標地点までの経路選択と移動プロセスは違いはないはずです。(2)でやったように、自動的に最短移動をする以外に良い方法はないわけですから。
 さてここで、新しい概念が一つだけ必要になります。今まで私たちはプレイヤーにスポットを当てていたため、「あの場所は移動可能か?」もしくは「あの場所に行くにはどのように動けばいいか」という事だけを考えてきました。こと敵さんになると、プレイヤーは無意識で考えていた「さてどこへ行くのが一番良いだろう」という問題について考える必要が出てくるのです。これは何と呼べば良いでしょうか。
 実は(3)の話はここに続いてきます。あるユニットが、自分の行くべき場所を選ぶ際、最も良いであろう場所を選択する……これを「最適探索」ないしは「移動最適化」と呼びます。「最短移動」と何となく似ていますが、似て非なるもので、私たちはこれらを使い分けなくてはいけません。まとめると次のようになります。

◆ 最適探索(移動最適化)
 どこに移動するのが一番良いのだろうかを考える。目標地の選択。

◆ 最短移動
 ある場所に行くのに、もっとも短い距離で到達する。実際のルート。

 これからよく出てきますんで、しっかりと頭に入れておいてください。誤解の元になりやすいところですから。はじめに最適探索ルーチンによって(敵側が)どこに行くのかという地点を決めます。そのあとで、目標地点に到るまでの最短経路を選ぶルーチンが(これまでやってきた)最短移動なのです。SLGにおいてどちらが重要で設計が難しいのかといえば、間違いなく前者です。ここをいかに設計するかによって作品の出来が決まってくるからです。最短経路ってのは殆ど固定ルーチンですしね。
 それで、最適探索のアルゴリズムなんですが、これは無数にあると言って良いでしょう。なぜなら最適探索とは実は「条件」の集合体であり、条件なんてものは実に沢山あるからです。前回の(3)では、目標地点として「最もx座標が右側になる場所」というのを与えたりしましたが、これも条件の一つであり、また最適探索のアルゴリズムの一つと呼んで良いのです。もっとも、敵さんがそんな単純な動きをして、主人公を賢く捕まえられるとは思えません。これ一つだけでは最適とは呼べないのです。主人公を撃退するという目的のある敵さんの場合は、いかにしてより良い行動方法を取るか……いくつもの条件を複合させて最終的に目標地点を決めます。これが最適探索、と言うわけです。
 これについて突き詰めていくと、正直とんでもない解説量を必要とします。非常に細かい議論も必要となります。この講座はあくまで入門編的な位置付けがあるので、ここではその一部、基本となる部分だけ紹介して、先に進めていこうと思います。



    :図1
 そろそろ具体的な例が欲しいところですね。お馴染みの(?)画面写真をどうぞ。左側にいるのがお化け……じゃなくて、一応プレイヤーキャラ(PC)で、右側に4体いるのが敵さんです。姿が同じなんで量産型ですね(^^;)。いま、PCのターンが終了して、敵さんのターンに移ったばかりです。さあ、敵さんたちはどう動くと良いでしょうか。もちろん、敵さんにも1ターンに移動できる距離の限界は決まっています。
 妥当な答えとしては、「各々、移動できる場所の中で、もっともPCに近づくことができる場所に移動する」と言ったところでしょうか。移動可能地点それぞれにおいて、PCのX座標、Y座標との差分を取ればいいんです。そうすると、図に示したような矢印のルートを通って、にじり寄って来くるはずです。さあ主人公は大変……って、本当にアルゴリズムはこれでいいと思いますか?
 文意からも察していると思いますが、これではダメダメです。戦いでは陣形やパワーバランスが重要です。確かに数の力は絶対と言えば絶対ですが、持ち場を離れて狂死病にかかったように突進してくるのでは、何とも芸がありません。主人公側が守る側に居れば良いのでしょうが、たいていゲームのPCは、攻める側に属します。PCが攻めて、敵さんたちはその守備位置を活かしていやらしく待ち伏せや遠距離攻撃武器で応戦するのが理想と言うものでしょう。それも踏まえて考える事こそ「最探索」なのです。「最探索」ではない理由はもう分かりましたね。
 ということで、最初の制約、すなわち条件をつけておきます。

【ルール】
1) 敵ユニットは無闇に動きません。PCとの単純距離差が x以内になった時点で、「各々、移動できる場所の中で、もっともPCに近づくことができる場所に移動する」。
2) xの値を問わず、すでに自分の移動できる場所の隣接にPCが居れば当然そこに移動する。(本当はこの後攻撃になるのですが、今回は攻撃の事は考えないで下さい。後でちゃんとやります)

 単純距離差というのは、地形による移動量減少などを無視して、画面の見た目の距離の差のことです。通常はx,y座標のそれぞれの差の和ですが、一方向スクロール(右か/左か)のSLGの場合は、片方の座標だけで判断します。
 さて、このxというのは不定数です。この値は製作者が自由にいじってください。xをいじると、具体的に次のような効果が得られます。

《1:xをとても大きくしてあげると?》
いわずもがな、大抵PCを追いかけてきます。90あたりにしておけば、PCがどこに動こうが追ってきますね。先の図にあった敵さんのようになるでしょう。

《2:xを自分の移動距離よりは大きくしてあげると?》
PCが近づいてきたら、じわじわと移動を開始します。距離が遠かったら、ぽつーんと止まれモードです。基本はこれです。

《3:xが小さめだったら?》
基本的には動きません。PCが攻撃できる範囲内に居るときのみ移動を開始します。

 それで、この中でどれが望ましいのかというと、一意に決める事はできません。それは、ゲームの設計者の意図により決める問題です。守りに徹したいのだったら「2:」や「3:」でしょうし、攻撃に徹したいなら「1:」でしょう。それも、全てのユニットに対して同じというのではなく、前線に居る敵さんは歩哨として「1:」、後衛に居る敵さんは「2:」を設定したりと、それは自由です。
 いま示したものは最適探索のもっともベーシックな形です。探索のパターンは山ほどあります。しかし、これだけでも最低限の戦術SLGとして機能しうるものになり得ます。



 その他の「戦術SLGでは代表的な」最適探索の条件、要素をいくつか軽く紹介しておきます。細かくは各自考えて、実装に取り組んでみてください。

1、地形効果
 マップフィールドは単に移動ウェイトを持つのみならず、しばし防御効果なる特性を持っています。これを計算しながら動かすと、プレイヤーをうまく苦しめる事ができます。

2、弱小キャラ狙い撃ち
 攻撃するキャラを選ぶ場合、弱くて倒せそうなキャラを狙うのは自然ですね。市販のSLGでもしばし取り入れられ、魔法使いたちはよく狙われると言うわけです(^^;

3、ユニット相性
 有名なのが「歩兵は弓兵に勝ち、弓兵は騎兵に勝ち、騎兵は歩兵に勝つ」といった相性相関です。但しここは複雑化が可能で、1のような地形によって相関を変えることもできます。城壁周辺では騎兵は歩兵すら負けるとか、そこらへんは各自のリアリティなりを追及してみると良いでしょう。

4、武器の射程
 剣での攻撃は大抵接触して行いますが、槍や弓、魔法などはマスマップにおいてはしばし2マス以上離れた場所からの遠隔攻撃ができます。上の移動ルーチンには本来、この武器の射程も含めて考えなくてはいけません。これだけは戦術SLGにおいては基本的な概念なので、この講座でも最終的には実装させます。この射程の概念を導入した場合、敵は可能な限りPCと距離を空けつつ攻撃できる地点を探さねばいけません。普通弓兵が戦士を隣接マスから攻撃するわけがないのです。

5、攻撃方向
 「正面より側面、側面より背後からの攻撃の方が良い」というもっともらしい考え方です。タクティクスオウガでお馴染みですね。ただ、デザインに気をつけないとお互いに相手の尻を追い掛け回すOの字戦闘になってしまいます(^^;)。

 こういった条件を「複合」していき、よりよい最適探索を行うわけです。もう少し言葉に厳密な定義を与えなおしておきましょう。

    「最適探索とは原則的に、数ある選択の中から、もっとも自分に都合が良く、相手に都合が悪い選択を選ぶアルゴリズムである」
 ということになります。これはゲーム理論でいう「ゲーム木」という概念と一致します。「ゲーム木」について細かく説明するとそれだけで1セッション使ってしまいますし、それはかなり高度な所に突っ込まざるを得ないので、このSLG移動講座では扱いません。今はそういうものだと思っていてください。

 今回はこれくらいにしておきましょう。基礎の部分である最短移動も最適探索も終わりましたから、次回からはいよいよデザイン&プログラムです。



 今回はなんだかんだ「SLGならさも当然」的な部分でしたから、読みごたえは無かったかも知れませんね(^^;)
 ちなみに今回の文のほとんどは、11月中に書き上げていたのですが、それを完成させる前にすっかり立て込んでしまいまして……(^^;)。次回は1ヶ月も待たせないと思います。いよいよ佳境ということで、アルゴリズムとプログラムの雪崩モードになると思います。でも、順を追って進めていきますから、心配はする必要はないですよ。ではまた次回お会いしましょう。

- 鷹月 ぐみな



  Session6:戦術SLGの移動アルゴリズム5 (2000/2/10)



カレッジの入り口に戻る
鷹月ぐみな情報局2号館

Written by. gumina(鷹月 ぐみな)