⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 swing.java

📁 java的机器人大战
💻 JAVA
字号:
package samples;
import AIplatform.event.*;
import AIplatform.robot.*;
import java.awt.geom.Point2D;
/**
 *-----------------------------------------------------------------
 * @author:iiley (iiley@hotmail.com)
 * http://www.robochina.org
 * 一个作圆周运动的机器人
 */
public class Swing extends Robot
{
	private double scanedTime;
	private double absBearing;
	private double moveTime;
	private double preferVelocity;
	private double edistance;

    public void onBegin(BeginEvent beginevent)
    {   //初始化
		scanedTime = -10;
		preferVelocity=8;
    }
	public void work(){
		doRadar();
		doMove();
		doGun();
	}

	private void doRadar(){
		//雷达锁定
		if(getTime()-scanedTime>4){ //如果距上次扫描到敌人超过了4个单位时间,视为丢失了敌人,转动一个很大的角度搜寻敌人
			getRadar().turn(Math.PI);
		}else{
			//雷达转向敌人,以实现锁定
	    	double radarTurn=standardAngle(absBearing-getRadar().getHeading());
			getRadar().turn(radarTurn);
		}
	}
	private void doMove(){
		if(moveTime-- < 0d){
			//运动改变方向
			onHitByBullet(null);
		}
		//始终侧对着敌人
		getBody().turn(standardAngle(absBearing+Math.PI/2-getBody().getHeading()));
	}
	private void doGun(){
        //炮管转向敌人,加一定随机量
		double gunTurn=standardAngle(absBearing-getGun().getHeading());
		if(getGun().getPrepareTime()>2){
			getGun().turn(gunTurn);
		}else if(getGun().getPrepareTime()==2){
    		getGun().turn(gunTurn*(1.0+Math.random()*(edistance/(17d-6d))));
		}
		getGun().fire(1d);
	}
    // -------------------- function for event handle ---------------
   	public void onScannedRobot( ScannedRobotEvent e ) {
		//记录下扫描到敌人的时间
		scanedTime = getTime();
		//记录下敌人相对自己的方向
		absBearing=Math.atan2(e.getY()-getBody().getY(),e.getX()-getBody().getX());
		//记录下敌人的距离
		edistance=Point2D.distance(e.getX(),e.getY(),getBody().getX(),getBody().getY()); 
	}
   	public void onHitRobot( HitRobotEvent e ) {
		//运动改变方向
		onHitByBullet(null);
	}
   	public void onHitWall( HitWallEvent e ) {
		//运动改变方向
		onHitByBullet(null);
	}
	//被敌人击中,改变运动方向
	public void onHitByBullet(HitByBulletEvent e){
		getBody().move(preferVelocity);
		if(preferVelocity>0){
			preferVelocity=-5d;
		}else{
			preferVelocity=8d;
		}
		moveTime=15d;
	}
	//把角度规范到-PI到PI之间
	public static double standardAngle( double ang ) {	
		return Math.atan2( Math.sin( ang ), Math.cos( ang ) );
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -