创新坦克

来源:互联网 发布:公司网络推广计划书 编辑:程序博客网 时间: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;    }}