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

次に2次元速度回避に着手した。まさにシューティングで避けている感覚になる。

数年前にも同じ題材をやったのだが、そのときは、1フレームごとに次の動きを考える方法で再帰をしていたので、直後6フレーム程度しか読めず、簡単にぼこぼこにされていた。
今回は、同じ動きの連続をまとめて1ストロークと考えて、直後2ストロークで一番長い時間生き残れる方法を探すようにした。1ストロークの時間が長いほど、動きが単純になり人間らしい動きにもなる。ストロークの転換点は弾に当たる直前なので、結構危なっかしい動きにも見える。

大玉にしているのは理由があって、小玉よりも簡単に詰みの状況を作りやすい(花映塚でCPUが陰陽玉に弱いのは多分コレ)のと、弾の絶対数が減るので計算しやすいということがある。
このFlashでは、同じ動きを繰り返したときの壁への衝突時間も、弾への衝突時間と同等に扱っているため、壁付近でも特にぶつかりやすくなるということはない。
ストローク再帰では、数十frame先まで読めるが、O( (移動方法の数)^(読むストローク数))の計算時間がかかってしまうため、移動方法を増やしたり、ストローク数を1あげるだけで劇的に遅くなってしまう。

応用版がこちら。この頃はまだ等速直線弾しか受け付けないが、基本的にシミュレートできればどんな弾幕でも構わない。

5ivestar氏の他の弾幕ではうまくよけられないこともわかった。

これはあんまりランダム要素のない固定+追尾弾幕で、追尾弾をうまく誘導すればよけられるが、いきあたりばったりで道を構成する現在のアルゴリズムではちょっと難しい。