シューティングにおける人工知能
STGが弾幕主流になって久しいが、私の中でのシューティングは実は「ZANAC」で終わっていたりする。
シューティングとは、現在の主流では決まった時間に決まった敵が出現するいわば「シナリオ」のあるゲームである。その意味ではRPGよりもまだ一本道であると言える。(先に進むこと自体がつらいのだが)RPGではランダムエンカウンターの敵がおり、ユーザーは様々な方策でそのエンカウントを調整することができるからだ。(ドラクエの聖水とか、逆に適当にうろついて経験値を稼ぐとか。)
その中でZANACはシナリオを否定しアドリブを謳った。人工知能によりプレイヤーの技量に合わせた難易度の敵が出現するのだ。と言っても、数値とエリア(面)によってだいたい決まってくるようだが。
実際にどのようにしてプレイヤーの技量を計測していたかは推測するしかないが、人工知能によって出現する敵を変えると言う発想は現在でも面白さを失っていない。
そこで同じ発想で考えてみる。
単位時間を決めて、その間に現在の強さに合わせた敵を出現させる。単位時間終了時に状況を見て計測することができるだろう。
- 敵がどうなったか
- 被撃墜率が勘案される。
- 敵弾の発生数
- 少なければ、出現と同時に敵が破壊されていることになる。つまり、ぬるい攻撃だった証左である。
- アイテムの回収率
- 低ければ激戦であった証拠になる。
- ボムの減少
- あれば、激戦であった証拠になる。
- 時機の減少
- 同上。
このような基準によって、さきほどの単位時間の攻撃がプレイヤーの技量にとって相対的にどうであったかを計測できる。
……別に人工知能言うほどじゃないような気もするなあ。
恐らく、プレイヤーに特定難易度の攻撃をぶつけるためには、既存の攻撃パターンを組み合わせてみることだと思われる。
そこでニューロンネットな技法が使えることがわかる。単純なリンゴの袋詰問題である。敵の出現パターンがリンゴの重さで、難易度が期待する全体の重さになるだろう。
なぜ世界は予測できないのか? - 人工知能に関する断創録より。
作り出した本人にも「それ」の振る舞いが予測できず、驚愕させてくれるものを作りたい。そのヒントがほしいな。
プログラマー自身にも予想がつかない挙動をするプログラムって現実にはどんなものがあるのかな。
シューティングならば、多分、自機のドット単位での位置とかが乱数のかわりに使えるような。
従来のシューティングの作法も使える。
人間の集中力には山があるので、およそ三分間隔で難易度を上下させるとよいらしい。しかし完全に規則正しいとアレなので、そこにカオスを介在させる余地がある。
まー、考えるだけなんだけれども。