ページ 11

自動避けプログラムの作り方

Posted: 2008年9月08日(月) 17:45
by wing
龍神録プログラミングの館を参考にしています。

以前からこのようなプログラムが作れないかと思っていたのですが、
プログラムで自動的にキャラを操作して、弾に当たらないように動かす事は出来ないでしょうか?

もしよければ理論のアドバイスなど頂けると嬉しいです。

Re:自動避けプログラムの作り方

Posted: 2008年9月08日(月) 18:12
by 管理人
結構難しそうですね。

今存在している弾を10フレーム位先まで計算してやり、当たらない場所を見つける方法のように
一回シミュレートしてみるのが早いんですが、
龍神録プログラミングの館で敵が撃って来るショットは乱数が使われている物がある為、
一回先に計算して、もう一度後で計算すると計算結果が変わってしまいます。
先に計算した結果を後の動作にコピーする方法もあるでしょうが、
今の関数を用いるにはかなりややこしい構造になりそうです。

この仕様を実現する方法はいくつか考えられるのだと思いますが、
私がパッと思いつく方法は、どこのエリアにどれ位の密度で弾があるか計算する方法でしょうか。

赤が自機、青が弾だと思って下さい。

画像

今、こんな感じで弾が存在しているとします。
エリアを外側8区間、内側8区間で区切ってみます。

画像

どのエリアにどれ位弾が存在しているのか計算し、一番弾が存在していないエリアの方向にキャラを動かしてみます。
優先順位は内側です。
外側より内側に弾があったほうが危ないですからね。
これは2層ですが、このエリアを何層にもして計算してやれば結構精度は上がるんじゃないでしょうか。

ただ上の図であるエリアに何%青い領域が占めているか計算する方法はすみません、パッと思いつきません。
積分して面積比を出してやれば何%か計算出来そうですが・・・、もっと簡単な方法があるかもしれません。

Re:自動避けプログラムの作り方

Posted: 2008年9月08日(月) 18:22
by 管理人
安っぽいアルゴリズムですし、これじゃ限界があると思いますが、
フレームごとにシミュレートしてみてもいいかもしれません。

8方向にそれぞれ移動したことにして、それぞれその方向に移動してその場で被弾するか計算します。

左に行ってあたり、静止していたら当たらず、右に行って当たらない時には右に行く。
といったように、なるべく弾から離れるようにし、
全方向どちらに移動しても当たらなければ定位置方向に移動するようにしてみるとか。