import robocode.*;
import java.awt.geom.Point2D;
import java.awt.Color;
public class guopan extends AdvancedRobot
{
double moveDirection;
enemyStat enemy = new enemyStat();
public void run()
{
setBodyColor(Color.red);
setGunColor(Color.red);
setRadarColor(Color.red);
setScanColor(Color.RED);
setBulletColor(Color.RED);
setAdjustGunForRobotTurn(true);
setAdjustRadarForGunTurn(true);
setTurnRadarRightRadians(2*Math.PI); //让雷达一直转
while(true)
{
doFire();
doScannedRobot();
doMovement() ;
execute();
}
}
public void onScannedRobot(ScannedRobotEvent e)
{
enemy.updateStat(e, this);
}
public void doMovement()//随即运动
{ //程序首先判断运动是否完成,若完成,随机选出一个座标点,移动到该点
if( Math.abs( getDistanceRemaining() ) < 1 )
{
double myX = getX();
double myY = getY();
double nextX, nextY; // the next point move to
nextX = Math.random() * ( getBattleFieldWidth() - 100 ) + 50;
nextY = Math.random() * ( getBattleFieldHeight() - 100 ) + 50;
double turnAngle =getAngle(myX,myY,nextX,nextY );
turnAngle = normalizeBearing( turnAngle - getHeadingRadians() );
double moveDistance = Point2D.distance( myX, myY, nextX, nextY );
double moveDirection = 1;
if ( Math.abs( turnAngle ) >Math.PI/2)
{
turnAngle = normalizeBearing( turnAngle + Math.PI);
moveDirection *= -1;
}
setTurnRightRadians( turnAngle );
setAhead( moveDirection * moveDistance ); }
}
public static double getAngle(double x1, double y1, double x2, double y2)
{
return Math.atan2( x2 - x1, y2 - y1 );
}
public void doScannedRobot()
{
if (getTime()-enemy.time>1)
{
setTurnRadarRightRadians(3*Math.PI);
}
else
{
double absolation_bearing=(getHeadingRadians()+enemy.relative_bearing)%(2*Math.PI);
double relative_radar_bearing=getRadarHeadingRadians()-absolation_bearing;
double a=normalizeBearing(relative_radar_bearing);
setTurnRadarLeftRadians(a);
}
}
public double normalizeBearing( double angle )
{
if ( angle < -Math.PI )
angle += 2*Math.PI;
if ( angle > Math.PI )
angle -= 2*Math.PI;
return angle;
}
public void doFire()
{
double heading_offset=enemy.en_heading-enemy.pre_heading+0.000001;