中年engineerの独り言 - crumbjp

LinuxとApacheの憂鬱

robocode・移動&回避

移動の基本

反重力移動
障害物や弾を避ける常套手法。
近寄りたく無い座標に仮想反重力点を設定し距離に応じた斥力を受けるように移動する。
この手法の優れた点は斥力は近寄れば強くなり離れれば弱まる点にある。
別に現実重力をシミュレーションしたい訳ではないので距離の2乗でなくとも良く、目的に応じて調整すれば良い。
その他
色々な移動モードを持つ機体があるが自分的には反重力移動+αで良いと思う。
反重力移動万能論
反重力点

実際に設定すべきもの

言わずもがな
味方機
言わずもがな
敵機
場合によっては体当たりも辞さないが・・・
味方弾
正確に把握できるので20tick後の座標まで20個設定
敵弾
後述の予測射線にとりあえず20個置く(要最適化)
移動用
ある程度機体をコントロールする為の反重力(磁石で車を押すイメージ)
引力では近づく程大きくなり上記脅威を無視してしまうので距離依存の斥力である事が大きなポイント
ランダム性を持たせてパターン予測を避けたり敵機との距離をコントロールする為に色々置いて良い。
もう一工夫

距離依存の斥力が優秀な反重力移動もやはり距離の最小値を決めて置くとよい。

恐らくロボットサイズ前後の値が妥当。

そうする事で詰み弾幕に挟まれた時などより薄い方に移動する事ができる。

(これをサボると弾幕の真ん中でただただ震える事に・・・)

回避
敵弾回避1
敵のHPの変動から射撃を検知できる。
敵のHPが0.1〜3.0減った場合は射撃された可能性がある。
ただし味方の弾HIT報告や敵の予測軌道が壁衝突。他機衝突の場合を除く。
敵弾回避2
敵の射撃方向は解らないので自分が狙われたものとする。
ただし敵は上記射撃モードの何れかを選択してくると想定。
不運にも被弾した場合は軌道計算から敵がどの射撃モードで射撃したかを類推する。

以上を踏まえていつもの画像

回避の有効性

色々試した結果、上記の3モードを敵毎に得点制で判断すると
生存率が約3倍向上ようだ。

回避の有無だけが違う機体の戦績
3vs3
100戦100勝
1vs3
100戦69勝31敗

回避は十分有効な事が解る。

弾幕シューティング

回避って重要!!

HP100から始めて100残しなのでほぼ避け切ったの図

>>チーム戦