トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

オブジェクト指向プログラミング(H16)2004/10/28

1対1での対戦に対するロボットのプログラミング

 静止しているロボットへの対処

サンプルの中にあるSittingDuck?という何もしないロボットと対戦する。攻撃してこないので連続して攻撃する。

処理の流れ

  1. 相手を探す
  2. 相手を見つけたら動いているかを確認する
  3. 相手が動いていなければ、連続して砲弾を発射する
  4. 勝利したときの動作を実施
  • 敵に関する情報はフィールド(変数)に記憶させておく
    • どんな情報が必要か
    • 敵に関する情報はonScannedRobot?メソッド内でScannedRobotEvent?のメソッドを使って取得する
  • 砲台、レーダーをどう動かすか
  • 自分のロボットはどう動かすか
  • メソッドの優先順位に注意
  • ロボットの初期設定はrun()メソッドの冒頭部に記す。
  • レーダーで敵を発見したらonScannedRobot?()メソッドに実行が移る。
  • 敵のロボットが停止しているかは速度を調べればよい。
  • 砲弾を発射すると砲台は熱せられ、熱の大きさが0になるまで次の砲弾は発射されない(fireメソッドは実行される)。
発生する熱=1+発射エネルギー÷5
熱の下がる速度=0.1/時間
    • 砲台の熱の大きさはgetGunHeat?()メソッドで取得できる
if(getGunHeat <= 0){
  file(1);
}

onScannedRobot?メソッドなどのイベントメソッドはイベント発生後に1回だけ実行される。敵を発見後、レーダーの向きが固定されている場合、onScannedRobot?()メソッドは実行されないのでrun()メソッド内でscan()メソッドを使って敵を再スキャンする必要がある。

 演習

上記やAPIの文書を参考にロボットのプログラムを考え、実際の対戦で動作を確認する。