} /**
bPower = 2.5;
} */
else if ((280 < enemy.getDistance())&&( enemy.getDistance()<= 360)){
bPower = 3;
}
else if ((360 < enemy.getDistance())&&( enemy.getDistance()<=450 )){ }
else if ((450 < enemy.getDistance())&&( enemy.getDistance()<= 540)){
bPower = 2;
bPower = 3;
}
else if ((540 < enemy.getDistance())&&( enemy.getDistance()<= 630)){ bPower = 2; }
else if ((630 < enemy.getDistance())&&( enemy.getDistance()<= 720)){ bPower = 1.5; }
else if ((720 < enemy.getDistance())&&( enemy.getDistance()<= 810)){ bPower = 1.5; }
else if ((810 < enemy.getDistance())&&( enemy.getDistance()<= 900)){ bPower = 1; }
else if ((900 < enemy.getDistance())){ bPower = 0.5;
}
return bPower;
* 调炮 */
private void gun(){
double increment = circle();
setTurnGunRightRadians(increment); }
private double preHeading1= 0.0 ; //圆周扫描初始角度 private double preTime1= 0.0 ; //前一个扫描时间
/* * 圆周瞄准
* @see robocode.Robot#run() */
double t =0 ;// 就是那圆周运动时候用来存储角度 // 1. 计算敌人目前的坐标
double ea = Utils.normalAbsoluteAngle(getHeadingRadians() + enemy.getBearing());//
private double circle(){
敌人的所在方向角度 double ex = getX() + enemy.getDistance() * Math.sin(ea);// 敌人目前的X坐标 double ey = getY() + enemy.getDistance() * Math.cos(ea);// 敌人目前的Y坐标
//求角速度
double offsetHeading = enemy.getHeading()- preHeading1; double dv = offsetHeading /(time1- preTime1);//q求角速度dv if( dv > 0){ //boolean know = false;
if(Math.abs(dv) < 0.00001){ dv = 0.00001;
}
double r =enemy.getSpeed() / dv;//半径?????????? double preDistance = enemy.getDistance(); for(int i = 0; i < 8 ;i++){
double bulletTime = preDistance / Rules.getBulletSpeed(bPower) ;
double nextHeading = enemy.getHeading()+dv * bulletTime ;//子弹飞行时间里转过的夹角后的角度
nextx
= =
ex ey
+r +r
* *
Math.cos(enemy.getHeading())-r* Math.sin(nextHeading)-
r*
double Math.cos(nextHeading);
double nexty Math.cos(enemy.getHeading());
preDistance = Point2D.distance(getX(),getY(),nextx,nexty);
t = Math.atan2(nexty - getY(), nextx - getX());//计算敌人即将到达的位置的
角度
} return Utils.normalRelativeAngle((Math.PI -getGunHeadingRadians())%(2*Math.PI));
} else { }
// 2. 直线运动计算敌人即将运动距离 double s = 0;// 保存敌人运动距离
if (enemy.getSpeed() >= (Rules.MAX_VELOCITY - 0.1) ){
s = enemy.getSpeed() * time;
double as = (Math.pow(Rules.MAX_VELOCITY, 2) - Math.pow( enemy.getSpeed(), 2)) / 2 * Rules.ACCELERATION;// 加速运动的距离
double vs = ((time) - (Rules.MAX_VELOCITY - enemy.getSpeed()) } else if (enemy.getSpeed() > 0.0) {
/ 2 - t
/ Rules.ACCELERATION)* Rules.MAX_VELOCITY;// 匀速运动的距离 s = as + vs; } else { }
s = 0.0;
//3.直线运动计算敌人即将出现的坐标
double nextx = ex + s * Math.sin(enemy.getHeading()); double nexty = ey + s * Math.cos(enemy.getHeading()); distance = Point2D.distance(getX(), getY(), nextx, nexty);
t = Math.atan2(nexty - getY(), nextx - getX());// 计算敌人即将到达位置的角度 return Utils.normalRelativeAngle((Math.PI / 2 - t - getGunHeadingRadians()) % (Math.PI * 2));
}
public void run(){
//第一步:要给机器人一身漂亮的行头,车身,跑和雷达及扫描狐妖桌上独特的颜dressing();
//第二部:要让机器人的车跑和雷达分离,不不影响。 severance();
//让雷达转一圈,以触发雷达扫描事件 while(true){
if(!discover){ setTurnRadarLeftRadians(Math.PI *2.1 ); execute(); } else{
色
}
}
}
//第三步:要确定机器人如何移动的算法
movement();
//第四步:要确定机器人如何选择获利的算法 double fire = firePower();
//第五步:要确定机器人如何锁定其他机器人的算法
doScan();
//第六步:要确定机器人如何计算并调整炮口瞄准敌人的算法 gun();
if(getGunTurnRemaining()<= 10){
//开枪 setFire(fire); //loseTarget();
//execute();
}
//判断敌人是否丢失 loseTarget(); execute();
} /**
* 判断是否丢掉敌人》》》》????????? * @return
*/
private void loseTarget() { }
if((getTime() - time1) >= 4){ discover = false; }