1対1の対戦
無駄な動きをやめ、回避を効率的に
敵の攻撃を察知して逃げるロボットのプログラムを次のように作り、Dummy01と対戦させると全敗してしまった。
全勝しないまでも何勝かできるようにしたい。どこを修正すればよいだろうか。各自考えよ。
ただし、攻撃はせず、回避行動を取るだけとする。
- 無駄な動作、時間のかかる動作を極力減らす。
- APIのドキュメント等をよく読む。
package sakabe; import robocode.*; public class BeBe04 extends Robot { double enemyPrivEnergy = 100; double enemyCurrentEnergy; public void run(){ while(true){ turnRight(360); } } public void onScannedRobot(ScannedRobotEvent e){ // 敵のエネルギー量の変化を検出し、変化があれば逃げる enemyCurrentEnergy = e.getEnergy(); if(enemyPrivEnergy - enemyCurrentEnergy != 0){ ahead(200); } enemyPrivEnergy = enemyCurrentEnergy; } public void onHitByBullet(HitByBulletEvent e){ turnRight(90 - e.getBearing()); ahead(200); } public void onHitWall(HitWallEvent e){ if(e.getBearing() < 0){ turnRight(90); } else { turnLeft(90); } ahead(200); } }
攻撃を加える
回避行動だけで5回生存できたら(Survival 1sts)、敵を砲撃するように修正しなさい。このときできるだけ効果的に攻撃できるようにする。
- スコアでDummy01を上回り、10回対戦したら10勝すること。
砲台、レーダーを車体等と一緒に回転させない
次のメソッドを引数にtrueを指定して使う。
- setAdjustGunForRobotTurn?() 車体の回転と逆方向に砲台を回転させる
- setAdjustRadarForRobotTurn?() 車体の回転と逆方向にレーダーを回転させる
- setAdjustRadarForGunTurn?() 砲台の回転と逆方向にレーダーを回転させる
public void run(){ setAdjustGunForRobotTurn(true); setAdjustRadarForRobotTurn(true); setAdjustRadarForGunTurn(true); while(true){ .... } }