package FlyE;
/**
*东师范大学
*山信息科学与工程学院 * 王赛
*Blog:http://blog.sina.com.cn/u/1878725434 * * * * * * */
import java.awt.Color;
import java.awt.geom.Point2D;
import robocode.*;
import robocode.util.Utils;
public class FlyE extends AdvancedRobot{ /** * 扫描到敌人的时间
*/
private double time1 = 0;
private Enemy enemy = new Enemy();
private boolean discover = false; //敌人是否被发现的属性 private double heading = 0.0; private double radarHeading = 0.0; public double bPower = 2;
private double distance = 800;//敌人即将到的距离 private double time ;
public void onScannedRobot(ScannedRobotEvent e){
discover = true ;
preTime1 = time1;//保存之前扫描到的时间 time1= getTime();//保存当前扫描到的时间
//初始化敌人
enemy.setBearing(e.getBearingRadians());
preHeading1 = enemy.getHeading();//之前扫描到敌人的 heading/// enemy.setHeading(e.getHeadingRadians());
}
enemy.setSpeed( e.getVelocity()); enemy.setDistance(e.getDistance());
time = distance / Rules.getBulletSpeed(bPower);
/**
* 子弹相撞时 */
public void onBulletHitBullet(BulletHitBulletEvent event) { bPower = 0.5; } /**
* 坦克相撞时 */
public void onHitRobot(HitRobotEvent event){ if(getRadarTurnRemainingRadians() <( 0.01) ){ setTurnRadarLeftRadians((Math.PI ) + 0.35);
setBack(20); }
} /**
* 被子弹击中时,??>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>需要继续改进
<<<<<<<<<<<<<<<<<<<<<<< */
public void onHitByBullet(HitByBulletEvent e){ if(getDistanceRemaining() < 1){ setAhead(6);
execute(); } //scan();
} /** * 打扮 */
private void dressing(){ setBodyColor(Color.black);
setRadarColor(Color.yellow); setBulletColor(Color.red); setScanColor(Color.GREEN);
} /**
* 车炮和雷达分离 */
private void severance(){ } /**
* 移动 */
private void movement(){
//随机选点摆脱敌人算法
if(getDistanceRemaining()< 1 ){ double nx = 0;
double ny = 0;
double safDis =68 ;
//随机生成的x,y坐标
nx = Math.random() * (getBattleFieldWidth() - 2 * safDis)+ safDis; ny = Math.random() * (getBattleFieldHeight() - 2 * safDis)+ safDis;
double headArg = (90 - Math.atan2(ny - getY(), nx - getX()));// 计算我们车身要旋headArg = Utils.normalAbsoluteAngle(headArg);
double dis = Point2D.distance(getX(), getY(), nx, ny);// 计算我们的机器人移动的
if (headArg - getHeadingRadians() >= Math.PI / 2) { setTurnRightRadians(headArg - getHeadingRadians() + Math.PI); setAhead(dis); } else { }
setTurnRightRadians(headArg - getHeadingRadians()); setAhead(-dis);
setAdjustGunForRobotTurn(true); setAdjustRadarForGunTurn(true); setAdjustRadarForRobotTurn(true);
转的角度 距离
}
//来回摆动拜托敌人算法 /*
double safDis = 68;
-safDis))) ){
double ex = getX();// 自己目前的X坐标 double ey = getY();// 自己目前的Y坐标 double battleh = getBattleFieldHeight(); double battlew = getBattleFieldWidth();
//if 选择垂直半径方向,切线圆周移动 else选择随机选择安全点移动
if(((ex >= safDis)&&(ex<= (battlew -safDis)))&&((ey >= safDis)&&(ey<= (battleh if(getDistanceRemaining()< 1 ){ double increment = 0;
if (enemy.getBearing() > 0) { increment = Math.PI / 2 - enemy.getBearing();
setTurnLeftRadians(increment);
} else { increment = Math.PI / 2 + enemy.getBearing(); setTurnRightRadians(increment); }
double forba = (int) (Math.random()*200);
forba = forba - 50;
System.out.println(Math.random()*200);
setBack(forba); execute();
} } else { double halfw = battlew / 2 ;//获得战场中心x double halfh = battleh / 2 ; //获得战场中心x
double heading = getHeadingRadians(); // 获得自己的方向角 double a = Math.atan2(halfh-ex, halfw - ey); a = Math.PI - heading - a; // 车身转过的角度 if(getTurnRemainingRadians() <= 0.2){ setTurnRightRadians(a); execute();
if(getTurnRemainingRadians() <= 0.0){
} /**
} */
}
}
setBack(4);
//setAhead(2); execute();
if(((ey >= safDis)&&(ey<= (battleh -safDis)))) { }
setAhead(5);
//setTurnLeft(90); execute();
* 雷达锁定 */
private void doScan(){ } /*
* 选择火力 */
private double firePower() { if(enemy.getDistance() <= 280)
bPower = 3; /*
else if ((178 < enemy.getDistance())&&( enemy.getDistance()<= 280)){ //判断是否扫描到敌人 if(discover){ }
//计算雷达旋转地角度
heading = this.getHeadingRadians();
radarHeading = this.getRadarHeadingRadians();
double temp = radarHeading - heading - enemy.getBearing(); //处理异常角度
temp = Utils.normalRelativeAngle(temp); temp *= 1.3;
//设置机器人的雷达回扫
setTurnRadarLeftRadians(temp); //开始执行机器人初始的设置