创新坦克
来源:互联网 发布:公司网络推广计划书 编辑:程序博客网 时间:2024/04/28 15:08
package b2;import robocode.*;import robocode.ScannedRobotEvent;import java.awt.geom.Point2D;import robocode.util.Utils;public class B2 extends AdvancedRobot {final static double BULLET_POWER=3; final static double BULLET_DAMAGE=BULLET_POWER*4;//Formula for bullet damage. final static double BULLET_SPEED=20-3*BULLET_POWER;//Formula for bullet speed. //Variables static double dir=1; static double oldEnemyHeading; static double enemyEnergy; public void run(){setAdjustGunForRobotTurn(true);setAdjustRadarForGunTurn(true);setTurnRadarLeftRadians(Double.POSITIVE_INFINITY);}public void onScannedRobot(ScannedRobotEvent event) {//ウオノ昉トセヤスヌカネdouble heading =getHeadingRadians();//タラエ・トセヤスヌカネdouble radarHeading=getRadarHeadingRadians();//ナレケワオトセヤスヌカネdouble Gunheading=getGunHeadingRadians();//オミホメシミスヌdouble bearing=event.getBearingRadians();//タラエ・ェカッオトスヌカネ double radarTurnLeft=radarHeading-bearing-heading;//ナレケワラェカッオトスヌカネ double gunTurnLeft=Gunheading-bearing-heading; //ミ」ユタラエ・ェカッオトスヌカネ setTurnRadarLeftRadians(1.6*Utils.normalRelativeAngle(radarTurnLeft)); //ラェカッナレケワ setTurnGunLeftRadians(1.6*Utils.normalRelativeAngle(gunTurnLeft)); double absBearing=event.getBearingRadians()+getHeadingRadians(); double turn=absBearing+Math.PI/2; turn-=Math.max(0.5,(1/event.getDistance())*100)*dir; if(enemyEnergy>(enemyEnergy=event.getEnergy())){ if(Math.random()>200/event.getDistance()){ dir=-dir; } } setMaxVelocity(400/getTurnRemaining()); setAhead(100*dir); double enemyHeading = event.getHeadingRadians(); double enemyHeadingChange = enemyHeading - oldEnemyHeading; oldEnemyHeading = enemyHeading; double deltaTime = 0; double predictedX = getX()+event.getDistance()*Math.sin(absBearing); double predictedY = getY()+event.getDistance()*Math.cos(absBearing); while((++deltaTime) * BULLET_SPEED < Point2D.Double.distance(getX(), getY(), predictedX, predictedY)){ predictedX += Math.sin(enemyHeading) * event.getVelocity(); predictedY += Math.cos(enemyHeading) * event.getVelocity(); //Find our enemy's heading changes. enemyHeading += enemyHeadingChange; //If our predicted coordinates are outside the walls, put them 18 distance units away from the walls as we know //that that is the closest they can get to the wall (Bots are non-rotating 36*36 squares). predictedX=Math.max(Math.min(predictedX,getBattleFieldWidth()-18),18); predictedY=Math.max(Math.min(predictedY,getBattleFieldHeight()-18),18); } //Find the bearing of our predicted coordinates from us. double aim = Utils.normalAbsoluteAngle(Math.atan2( predictedX - getX(), predictedY - getY())); //Aim and fire. setTurnGunRightRadians(Utils.normalRelativeAngle(aim - getGunHeadingRadians())); setFire(BULLET_POWER); setTurnRadarRightRadians(Utils.normalRelativeAngle(absBearing-getRadarHeadingRadians())*2); setTurnRightRadians(Utils.normalRelativeAngle(turn-getHeadingRadians())); //サテオミホメヨョシ莊トセ狢・ double dis=event.getDistance(); setTurnRightRadians(bearing); if(dis<400){setFire(3); setBack(50); setTurnLeft(90); } else{ setFire(0.1); setTurnLeft(90); } } public void onBulletHit(BulletHitEvent e){ enemyEnergy-=BULLET_DAMAGE; } public void onHitWall(HitWallEvent e){ dir=-dir; }}