Robocode坦克机器人源代码2(2)

2020-03-26 21:53

} /**

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; }


Robocode坦克机器人源代码2(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:DAEMON Tools Pro(虚拟光驱)v5.1.0.333 中文特别版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: