创新坦克

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值