import robocode.AdvancedRobot;
import robocode.ScannedRobotEvent;
public class RadarTrace extends AdvancedRobot{
public void run(){
setTurnRadarLeft(400);
execute();
}
/**
* 消除错误的角度
* @param errorDegree
* @return
*/
double clearErrorDegree(double errorDegree){
errorDegree = errorDegree % 360;
if(errorDegree > 180){
errorDegree = -(360 - errorDegree);
}
if(errorDegree < -180){
errorDegree = 360 + errorDegree;
}
return errorDegree;
}
/**
* 计算雷达请转角度
* @param e
* @return
*/
double caculateDegree(ScannedRobotEvent e){
double degree = 0.0;
double heading = getHeading();//得到自己机器人的正方向
double radarHeading = getRadarHeading();//得到雷达的正方向
double bearing = e.getBearing();//从雷达事件的参数中得到敌人和自己机器人的夹角
degree = radarHeading - heading - bearing;//得到回扫角度
//处理异常角度
return clearErrorDegree(degree);
}
/**
* 旋转雷达
* @param degree
*/
void turnRadar(double degree){
setTurnRadarLeft(degree * 1.3);//雷达锁定
}
/**
* 雷达锁定
*/
void radarTrace(ScannedRobotEvent e){
//计算雷达回转角度
double degree = caculateDegree(e);
//按角度旋转
turnRadar(degree);
}
public void onScannedRobot(ScannedRobotEvent e){
//必须让雷达跟踪住敌人
radarTrace(e);
}
}