1対1での対戦に対するロボットのプログラミング
静止しているロボットへの対処
サンプルの中にあるSittingDuck?という何もしないロボットと対戦する。攻撃してこないので連続して攻撃する。
処理の流れ
- 相手を探す
- 相手を見つけたら動いているかを確認する
- 相手が動いていなければ、連続して砲弾を発射する
- 勝利したときの動作を実施
- 敵に関する情報はフィールド(変数)に記憶させておく
- 砲台、レーダーをどう動かすか
- 自分のロボットはどう動かすか
- メソッドの優先順位に注意
- ロボットの初期設定はrun()メソッドの冒頭部に記す。
- レーダーで敵を発見したらonScannedRobot?()メソッドに実行が移る。
- 敵のロボットが停止しているかは速度を調べればよい。
- 砲弾を発射すると砲台は熱せられ、熱の大きさが0になるまで次の砲弾は発射されない(fireメソッドは実行される)。
発生する熱=1+発射エネルギー÷5 熱の下がる速度=0.1/時間
- 砲台の熱の大きさはgetGunHeat?()メソッドで取得できる
if(getGunHeat <= 0){ file(1); }
onScannedRobot?メソッドなどのイベントメソッドはイベント発生後に1回だけ実行される。敵を発見後、レーダーの向きが固定されている場合、onScannedRobot?()メソッドは実行されないのでrun()メソッド内でscan()メソッドを使って敵を再スキャンする必要がある。
演習
上記やAPIの文書を参考にロボットのプログラムを考え、実際の対戦で動作を確認する。