AI自動生成の是非を考える

今回AIエンジンを積んだ理由は、それほど複雑でないもののある程度思考回路を自動生成させてもいいかなと。
「いいかな」と思ってるだけで、やると決めてる訳じゃない。
どうせAI作るなら、そういう要望が出た場合に対応出来るようにしとこうという程度。


ということで、自動生成するべきなのか、検討してみる。

前提条件

基本的にゴチャキャラバトルってのはシンプルで、移動と接触による攻撃。
今回はファーストクイーンとは違って、一応接触じゃなくて「攻撃」という明確なアクションを入れるけど、とりあえず移動と攻撃ですねと。


AIの自動生成を考える前には、ゲーム中にどんな行動をとれるのか、はっきりしとかないといけないので、最初にしっかり定義付ける。


今回は魔法無し、攻撃は接触している前方パネルへの攻撃のみ、攻撃の特殊効果は攻撃発動後スキルによって付与される、とする。
つまり「遠距離攻撃のAI」とかは作りようが無いという前提。


また、移動と回転という補助動作がある。
攻撃が「接触している前方パネルへの攻撃」のみなので、接触している前方パネルに敵がいるという状況を作らないと、そもそも攻撃出来ない。
ということで移動したり向きを変えたりする。


移動については、地形があるかどうかは検討中。
戦闘デモ作りながらしっかり考えるけど、今んとこ地形無しのがシンプルかなと思っているので、今日のところは地形無しで考える。
また、移動先のパネルに敵なり味方なりなんらかのキャラクターがいる場合、そこには移動出来ないが、ZOCとかは無い。


あと、検討中なのが休憩の存在。
敵から離れて移動も回転も攻撃もしてなければ、じりじり体力回復っていうファーストクイーン系のあれ。
休憩はAI的には入れると面白いんだけど、戦闘中に回復手段があることで、すごろく場で用意する予定の回復パネルのありがたみが薄くなるので、どうすんべなと。


ということで、AIに必要なのは「移動」「回転」「攻撃」を状況に応じて選択することで、もしかしたら休憩が入るかもという形。
なお、すべての行動と、思考そのものに時間が消費される。

AIによる個性化要素

「遠距離攻撃が無い」っていう制約が結構でかくて、この行動制限だとAIによる個性化って結構難しい。
例えば「臆病な種族」だったら敵と距離とってちまちま弓で撃ったりするわけだけど、それは出来ない、と。


じゃあ移動と回転と攻撃だけでどんな差別化がありえるのよっていうと、移動を工夫するくらいしか無いんだよね。


てことで考えられるのはこういうのだ。

  1. とにかく目の前の敵を殴る種族
  2. 敵の後方に回り込もうとする種族
  3. 敵から一歩距離をとって、突っ込んできたところを叩く種族
  4. 敵に囲まれた状況であれば攻撃より退避を優先する種族
  5. ゆっくり(歩いて?)移動する種族
  6. 速く(走って?)移動する種族
  7. 敵の正面に立つのを避ける種族


他、高度なAIをいれるとこういう事も一応出来る。

  1. 仲間と連携して一匹への集中攻撃を狙う種族
  2. 弱そうな敵から攻撃していく種族
  3. 弱った味方をかばうように戦う種族


さて、これをやる必要あんのかどうなのかと。

実装したらなんか楽しいのかな_と

並べてみるとそれなりに個性化出来るけど、ゲームとしては別に、あんまり楽しくなさそうな気がするんだけど、どうなんだろ。
ただ走って突撃して強いやつが勝ちましたってのでも、シンプルでいいんじゃねーのと。そこであえて複雑化するAIを使う意味はあるのかと。


これは、正直俺には予想つかん。
ファーストクイーンでAIが無かったらどうなのかっていうと、まあ無いなら無いでそれなりに楽しめるけど、あった方が面白い気がする。
まああっちは遠距離攻撃も、休憩も、魔法もありだしな。特に休憩の存在がでかい。追いかける必要があるからね。


んでもこっちは一回の戦闘はファーストクイーン程長くない連戦型でデザインするつもりで、何より全自動戦闘だぜと。
ということで繰り返すけど、いれたところで面白くなるのか正直予想つかん。

実装工数

面白いかどうか予想がつかないんで、手軽かどうかで考えてみる。


前も書いたけど、全自動戦闘なので詰むAIってのが一番困る。
ので、基本形ってのが絶対必要。
その上で、拡張の思考回路を自動的に付与させると。

基本形はこう。ひたすら近づいて殴る。

[判断][隣接][前][敵]
	[攻撃][1]
[判断][方向][敵][前]
	[移動][前][16]
[回転][敵]

これに「相手の正面に立つのが嫌な種族」とかのAIを考えるとこういうのが追加される。相手の向きが前向きだったら横に移動とかね。

[判断][隣接][前][敵]
	[攻撃][1]
[判断][方向][敵][前]
	[判断][方向][敵][前][向き][前][=]
		[移動][左右ランダム][16]
	[移動][前][16]
[回転][敵]

多少プリセットは必要そうだけど、作るだけなら多分簡単。
でも上記のサンプルAIも、横に敵がいたら移動出来ずにひたすら殴られるアホAIになるし、整合性やバランス考えると大変だろうな。

てことで

今のところ、面白いか予想つかん、実装は整合性とるのが結構大変そうって事で、いまいち気がのらねぇなぁってとこすね。


エンジンでAI表現は別にいいと思うんだけど、AIの中身については5種類くらい作って「性格パラメータでAIの種類が決まる」程度でいいかもな。