格ゲーをプログラミングコンテストにするには

結論から、対戦相手の行動を20フレームくらい前の行動を渡せば、結構問題が解決される気がする。

結構、障害が大きい。

まず、最大の障害は対戦できるゲームを準備することだけど、これは既存のストリートファイター系の格ゲーが使えるとする。

人間用のゲームをAIがやることによって、問題が起こることが多い。格ゲーに関して言えば、リアルタイムで処理するのか、ゲームの実行と描画は別にするかで大きく異なるが、リアルタイムの処理は入出力が難しいというかどうやるのかわからない、かつ標準入出力でリアルタイム処理は無理な気がするから、言語を縛らないといけないし、データ構造も指定しなきゃいけなくてかなり微妙。
よって、AIの処理と描画?は別にする。

話を戻して、格ゲーをAIがやることによって発生する問題は

  • 1フレーム前の相手の入力がわかる場合は、無敵技があると先出しした方が必ず負けるゲームになって成立しない
  • 飛びとか人間だと反応できないことが前提になっている攻めが成立しない
  • バランスが悪くてリスクが全くなく相手にダメージを与えられる可能性のある行動が発見されると、それしかしないAIみたいになって見栄えが悪い
  • 格ゲーは基本攻める側がリスクを負うもので、それで成立するのは受ける側がミスしやすいからだけどAIだとミスという概念がないから、攻めにリスクだけ残って攻めさせるための仕掛けが必要

がある。

目標は、人間が対戦しているみたいな駆け引きがある対戦になること、なのだけど上記の問題を解決してもそれが達成されるかどうかはわからない。

結論を先に書いたけど、20フレーム前の行動を渡すと致命的な1番目の問題は回避される。
反面、問題が起こるのが20フレーム前の行動が分かるのは良いのだけど、自分がダメージ受けた時はAIからすると突然ダメージを受けることになって、人間がプレイする時は自然と自分がダメージを受けていることが認識できるけど、AIの場合は例外的に自分がダメージ受けたことを通知するしかないが、どこまで通知するのかダメージ量はもちろんとして、相手の技も識別できた方が良いのか、相手がその技を振ったフレームも通知した方が良いのか、とか考える必要がある。

バランス調整も難しいし、やっぱり難しいかなぁ