中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

robocode・索敵

索敵の基礎

Robocodeでは自機のレーダーを回転させ敵に当てなければ敵は見えない。
また弾はレーダーでは捉えられない。
敵が見えなければ攻撃も防御も出来ないので実は最重要。

が、、実は突き詰めると答えは一つで差が付かない出来なきゃ減点法の世界・・・

レーダー
レーダーは砲塔の上に乗っている。つまり砲塔を回転するとレーダーを動かす事ができる。
つまりレーダーと砲塔を両方回転する事で通常より広い索敵範囲が得られるのだ!!
具体的には1tick当たり65(20+45)度前後取れ、360/65 = 6 tick で全体を見渡せる事になる。
レーダ単体では360/45 = 8 tick。3/4の時間で索敵出来ればかなり有利になる。
ちなみに機体自体の旋回によってもレーダーは動くが移動・回避の妨げになるのでレーダ範囲の向上には組み込まない
敵加速度
レーダを1回当てるだけでは敵の座標,HP,方向,速度しか解らない。
短い期間に2回当てる事で更に、方向・速度の差分=加速度、HP変化、等が解る。
加速度が解らないと単に円運動している機体にすら弾を当てられない。
実際の敵はもっと複雑な動きをするが加速度の変化パターンをベースとして推察していく。
HP変化
一見何て事ない情報だがrobocodeでは弾を撃つ時にHPが減る為、実は後述の敵弾回避に関わる重要な情報。
広域索敵1

砲塔とレーダーを同じ方向に動かす限り65度の索敵範囲が得られる。
そのままグルグル回転させても良いのだが砲塔は1tick辺り20度しか回らないので一周18tickかかる。
しかし敵を連打する為に砲塔はなるべく正面を向きたい。かといってレーダ範囲は広く取りたい。
更にはなるべく短時間に2度レーダを当てたい。
すると必然的にレーダはこの様な動きになる。














広域索敵2

広域索敵中に全員発見した場合はすぐに折り返し無駄を省く。





更には4隅は90度(2 tick)回せば全体が見える有利な地点。

レーダーロックオン

毎ターン砲塔を射撃座標に固定しつつなるべく広範囲も見たいので、敵機を中心にレーダーを45度往復する。
またこの時は準備が出来次第発砲するので、砲塔は射撃方向に固定しレーダー範囲向上には使わない。
これも突き詰めて考えればこれしか無い自明の動作。



>>砲塔&射撃