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;
}
}
创新坦克
最新推荐文章于 2022-05-23 15:07:41 发布