弾幕回避アルゴリズムについて1

前に1とかかいたけど忘れてね!

僕はゲーム等で弾幕を避けていると、人工知能弾幕を避けないかなーと思ってしまうような人なので、前々からいつか弾幕回避のアルゴリズムを実践してみたいと思っていた。

それで、今回wonderflでいろいろつくったので、それをまじえながらアルゴリズムについて解説する。

その前にいくつか勝手に作った造語を説明する。
弾幕の弾の位置・速度が、ランダム要素を一切含まないものを固定弾幕とする(一般的な追尾弾もこれに入る)。対してランダム要素を含むものをランダム弾幕とする。これらは出現前にシミュレートできるかどうかが異なる。
また、自機を動かす際、位置を直接変更できるときの回避を速度回避、速度しか変更できないときの回避を加速度回避とする。前者は一般的なシューティングゲームで使われ、後者は実世界上の動きによく使われる(フライトシミュレータ等)。動ける次元数を頭につけたりもする。

一番最初にwonderflに投稿したのは、等速弾のランダム弾幕の1次元加速度回避のための回避関数。最小値が最適選択。加速度0が中央で、「この加速度を1度だけかけてあとは等速」の場合の弾との衝突時間等から関数を構成してある。

そしてこれらのパラメータ調整をして出したのがこれら。

それなりに避けているように見えるけど、このときは壁(端)に当たるという意識があまりなく、適当に実装してしまったため、上下端では結構もろくなる。

最新のだとぬるぬる避ける。