書き物

技術とか作った物の話とか愚痴文句感想など

敵の頭脳の状態分け

以前状態移行についてのレポートを書く際、敵の脳を作る一つの手段を例に挙げました。この記事自体は状態移行のアルゴリズムを使ってソースを少しでも見やすくしようという企画でしたが、今回はこの時挙げた例が問題です。

敵の頭脳を作るアルゴリズムの定石というものを、自分なりにでもまだ固まっていないこの状態を打開すべく、ちょっと思いついたことを書いておきます。

上の例では、

  • 待機
  • 移動
  • 攻撃

という3つの状態を関数で分けてプログラムすることによって脳を作っていました。この3つの状態は、言わば「敵の見た目の動作」という単位で状態を分けています。ちょっとうまく文章にできませんが、何もキーを押していないなら「待機」、横ボタンを押せば「移動」、攻撃ボタンを押せば「攻撃」という、考え方自体はシンプルで、具体的に行動ごとに状態化できているのでそれはそれで1つの状態分けの方法だと思います。

今回思いついたのは、この状態を「動作」で分けるのではなく、「したい事」で分けるというものです。動作じゃなく、脳の考え方で状態分けするということです。ちょっと分かりにくいので例を1つ。

  1. 攻撃対象を目視で探す
  2. 攻撃対象を探す場所を変える
  3. 攻撃対象を追いかける
  4. 攻撃する

状態移行については後ほど。1は言わばキョロキョロするわけです。攻撃対象を目で見て探します。2は、自分の場所を変えます。同じ場所でキョロキョロしても攻撃対象が見つかるとは限りません。3はそのまま、攻撃対象を追いかけます。4もそのまま、攻撃対象を攻撃します。

状態移行は、1でキョロキョロし、攻撃対象を見つけたなら3へ移行し、その対象を追いかけます。キョロキョロしても攻撃対象を見つけることができなければ2へ移行し、移動なりジャンプなりして探す場所を変更します。2で探す場所の変更が完了したなら再び1へ移行し、再びキョロキョロします。3で攻撃対象を追いかけて、攻撃範囲に入ったなら4へ移行し、攻撃します。

敵の脳を作っているのだから、考え方での状態分けというのは理にかなっているようにも思えます。

「動作」での状態分けは、プログラム上でのキャラクターの待機、移動、攻撃といった動作単位で分けることができるので、一番分かりやすいように思います。ただ、待機という状態の関数内で、待機しているときにできる行動を一つずつリストアップしてすべて分岐できるようにしなければならず、脳を作る上では作り手の頭の整理という面では不利かもしれません。

「したい事」での状態分けは、脳を作る作業を敵目線で作ることができるので、作り手がもしも自分が敵を操作するなら...という目線で作りやすいので、制作効率は前者よりも良いように思います。

果たして何か役に立てることができるのでしょうか。