ゲープロ講座セッション5:戦術型SLGの移動アルゴリズム(4)
- 最適探索 〜コンピュータがプレイヤーと相対するために |
3ヶ月ぶりのご無沙汰、鷹月ぐみなです。皆さん待ちくたびれて、さっさと自分でSLG作っちゃったでしょうか(^^;)。前回書いてから、とっても忙しくなっちゃいまして、ゆっくり記事を書く暇がなかったんです。ようやくこの講座を書く時間が取れましたので続けていきます。続き期待してくれた皆さん、ほんとありがとうございました。 |
間が空いたので、私自身の思考も整理させるために今までの概要を思い返してみましょう。 SLG講座(1)で、SLGの移動ルーチンにはしっかりとしたアルゴリズムを与えてあげなくてはいけない事を説明しました。(2)にて、その基本となる「最短移動」について触れ、サンプルアプリケーションを提供しました。(3)では、最短移動に探索幅という条件を加えた、ちょっとしたコーヒーブレイク、ここで条件いかんでいろんなバリエーションが出る事を説明しました。 皆さんも思い出しましたか?ここからは、(1)〜(3)は完全に話の前提としますので、ちょっと忘れちゃった方は見直しておいてください。では、いきますよー。
|
もうプレイヤーの移動に関しては卒業です。今回のセッションからいよいよ、敵さんにスポットを当てて進めていこうと思います。さて、プレイヤーと敵さん、何が違うんでしたっけ? 当たり前な回答ですが、プレイヤーは自分のキャラをどこに動かすかを自由に決める事ができます。対して敵さんはアルゴリズムによって自動的に決めます。移動に関する部分はそれだけが違いです。目標地点までの経路選択と移動プロセスは違いはないはずです。(2)でやったように、自動的に最短移動をする以外に良い方法はないわけですから。 さてここで、新しい概念が一つだけ必要になります。今まで私たちはプレイヤーにスポットを当てていたため、「あの場所は移動可能か?」もしくは「あの場所に行くにはどのように動けばいいか」という事だけを考えてきました。こと敵さんになると、プレイヤーは無意識で考えていた「さてどこへ行くのが一番良いだろう」という問題について考える必要が出てくるのです。これは何と呼べば良いでしょうか。 実は(3)の話はここに続いてきます。あるユニットが、自分の行くべき場所を選ぶ際、最も良いであろう場所を選択する……これを「最適探索」ないしは「移動最適化」と呼びます。「最短移動」と何となく似ていますが、似て非なるもので、私たちはこれらを使い分けなくてはいけません。まとめると次のようになります。
◆ 最適探索(移動最適化)
◆ 最短移動
これからよく出てきますんで、しっかりと頭に入れておいてください。誤解の元になりやすいところですから。はじめに最適探索ルーチンによって(敵側が)どこに行くのかという地点を決めます。そのあとで、目標地点に到るまでの最短経路を選ぶルーチンが(これまでやってきた)最短移動なのです。SLGにおいてどちらが重要で設計が難しいのかといえば、間違いなく前者です。ここをいかに設計するかによって作品の出来が決まってくるからです。最短経路ってのは殆ど固定ルーチンですしね。
|
妥当な答えとしては、「各々、移動できる場所の中で、もっともPCに近づくことができる場所に移動する」と言ったところでしょうか。移動可能地点それぞれにおいて、PCのX座標、Y座標との差分を取ればいいんです。そうすると、図に示したような矢印のルートを通って、にじり寄って来くるはずです。さあ主人公は大変……って、本当にアルゴリズムはこれでいいと思いますか? 文意からも察していると思いますが、これではダメダメです。戦いでは陣形やパワーバランスが重要です。確かに数の力は絶対と言えば絶対ですが、持ち場を離れて狂死病にかかったように突進してくるのでは、何とも芸がありません。主人公側が守る側に居れば良いのでしょうが、たいていゲームのPCは、攻める側に属します。PCが攻めて、敵さんたちはその守備位置を活かしていやらしく待ち伏せや遠距離攻撃武器で応戦するのが理想と言うものでしょう。それも踏まえて考える事こそ「最適探索」なのです。「最短探索」ではない理由はもう分かりましたね。 ということで、最初の制約、すなわち条件をつけておきます。
【ルール】
単純距離差というのは、地形による移動量減少などを無視して、画面の見た目の距離の差のことです。通常はx,y座標のそれぞれの差の和ですが、一方向スクロール(右か/左か)のSLGの場合は、片方の座標だけで判断します。
《1:xをとても大きくしてあげると?》
《2:xを自分の移動距離よりは大きくしてあげると?》
《3:xが小さめだったら?》
それで、この中でどれが望ましいのかというと、一意に決める事はできません。それは、ゲームの設計者の意図により決める問題です。守りに徹したいのだったら「2:」や「3:」でしょうし、攻撃に徹したいなら「1:」でしょう。それも、全てのユニットに対して同じというのではなく、前線に居る敵さんは歩哨として「1:」、後衛に居る敵さんは「2:」を設定したりと、それは自由です。
|
その他の「戦術SLGでは代表的な」最適探索の条件、要素をいくつか軽く紹介しておきます。細かくは各自考えて、実装に取り組んでみてください。
1、地形効果
2、弱小キャラ狙い撃ち
3、ユニット相性
4、武器の射程
5、攻撃方向 こういった条件を「複合」していき、よりよい最適探索を行うわけです。もう少し言葉に厳密な定義を与えなおしておきましょう。
今回はこれくらいにしておきましょう。基礎の部分である最短移動も最適探索も終わりましたから、次回からはいよいよデザイン&プログラムです。
|
今回はなんだかんだ「SLGならさも当然」的な部分でしたから、読みごたえは無かったかも知れませんね(^^;) ちなみに今回の文のほとんどは、11月中に書き上げていたのですが、それを完成させる前にすっかり立て込んでしまいまして……(^^;)。次回は1ヶ月も待たせないと思います。いよいよ佳境ということで、アルゴリズムとプログラムの雪崩モードになると思います。でも、順を追って進めていきますから、心配はする必要はないですよ。ではまた次回お会いしましょう。 - 鷹月 ぐみな |
□ Session6:戦術SLGの移動アルゴリズム5 (2000/2/10)
|