戦術SLGの作り方(コンピュータの思考ルーチン2)

投稿者: | 2012年5月22日

1.はじめに

前回は、索敵の思考ルーチンについて解説しましたが、今回はより大きな視点の戦術ルーチンと局面評価について解説をします。

2.Undoの実装

相手の次の行動を読むのでしたら、処理的にはそれほど難しくありません。しかし、次の次の次の手を読む処理を考えた場合、進めた手を戻す処理が実装されていると色々と楽です。それをUndoといいます。(ようはやり直しです)

Undoを実装する場合には、大きく2つの考え方があります。

  • 全記録法
  • 差分記録法

全記録法では、ある局面における全ての情報を保持します。全ての情報を保持するので、当然データ量は大きくなります。

差分記録法とは、ある地点を基準に、変化した情報のみを保持する方法です。データ量が全記録法よりも少ないので、通常はこちらを利用します。誤差が出る場合や全ての情報を保持してもそれほどデータ量が多くならない場合は、全記録法を利用してもいいかもしれません。

3.戦術ルーチン

戦術ルーチンを考える方法として、おそらく基本となるであろうMinMax法について解説します。

 a.MinMax法

MinMax法とは、相手は常に最善の手を打つと仮定して、もっとも相手の得にならない手を打つという、なんというか、セコセコ作戦です。

例えば、「A」という手を打つと、相手は5トクする手と3トクする手と4トクする手があるとします。また「B」という手を打つと、相手には1トクする手と2トクする手と10トクする手があるとします。

この場合、「B」を打つと、相手が10トクする可能性があるので危険と判断します。「A」であれば、最悪でも相手は5までしかトクになりませんので「A」を選択します。

このように、最悪の場合を想定して、被害が最小(Min)になるようにすれば、利益が最大(Max)になると考えるのがMinMax法です。

 b.MinMax法の注意点

ゲーム的には、MinMax法は面白くない思考ルーチンです。というのは、プレイヤーにしてみれば、ドカンと大きく勝つのが面白いはずです。先ほどの例を考えてみると、10トクするというチャンスを容易くつぶされてしまっているわけで、全然面白くないわけです。

「ゲームを面白くするには、例えばゲームの序盤では、MinMax法で導いた結果を選択しない」という思考ルーチンであるとプレイヤーにとっては面白いかもしれません。逆にゲームも終わりが近づいてきたら、MinMax法ガチガチでやると、きわどい勝負ができて楽しいと思います。

あと、MinMax法は基本的に全ての手を探索するという、いわゆる総当りです。ですが、通常の戦術SLGゲームは移動だけでも何十パターンと手があるので、それをしらみつぶしに探索しては計算に時間がかかりすぎます。

なので、行動パターンはおおざっぱに「移動・攻撃・回復」のように絞って考えます。もう少し深く考える余裕があるなら、移動を「長距離移動・中距離移動・短距離移動」に細分化します。

4.局面評価

MinMax法だけでは思考ルーチンの役に立ちません。なにか行動を取ったら、それに対する評価が必要です。

ある局面に対して静的な評価を求めるのが局面評価です。コンピュータは、「その行動はすごくいい」とか「それはダメだね」といっても判断ができないので、評価を数値化する必要があります。

行動パターンは大きく「移動・攻撃・回復」の3つに分かれると思うので、それらの評価方法の例を挙げてみます。

 a.移動

移動に対する評価として、相手の攻撃範囲に入るかどうか、という考え方があります。相手の攻撃範囲に入れば、当然相手の先制攻撃を受けるので不利です。なので、相手の攻撃範囲のギリギリ外側に移動するのが正しい考え方です。ただ、その場合はどちらにも損得が発生しないので評価は±0です。

もう少し高度なルーチンとしては、「おとり」という考え方があります。弱いキャラでプレイヤーを誘い出しておいて、強力なキャラで不意打ちをする、といった方法です。ただ、「おとり」に引っかからない可能性があるため、MinMax法では正しくないルーチンですね…。

 b.攻撃

攻撃の評価方法は簡単ですね。攻撃により与えるダメージなどを得点化します。主人公キャラや回復系のキャラを倒せる手があるなら、それは最高の評価値となりますね。

 c.回復

回復を選択する場合は、強いキャラを回復するほど評価値を高くします。広範囲の回復魔法がある場合は、単純に多く回復できる手ですね。


おまけ

  • 待機ルーチン…索敵範囲または攻撃範囲に入ったキャラを攻撃する。(ただし、囲まれて袋だたきになる可能性が高い。ボスキャラとかがいいかも)
  • 巡回ルーチン…決まった経路をぐるぐるまわる。強力な敵がこのルーチンであると、見つからないように擦り抜ける、といったメタルギア的なおもしろさを生み出すことができるかもしれないです。
  • 逃走ルーチン…逃げるだけ。ときどき立ち止まるようにしないと、プレイヤーは追いつけないかも。