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

📄 walls.java

📁 java的机器人大战
💻 JAVA
字号:
package samples;

import AIplatform.robot.*;
import AIplatform.event.*;
import java.awt.geom.Point2D;

/**
 * 这个机器人会努力地绕着墙走,并且枪口和雷达一直对着场地方向,一扫描到敌人就开枪
 */

public class Walls extends Robot
{
	
    public void onBegin(BeginEvent beginevent)
    {   //战斗开始的时候车身转向0方向
		getBody().turn(-getBody().getHeading());
    }
	public void work(){
		//如果转动完成才开始运动
		if(getBody().getTurnRemaining()==0d){
			getBody().move(8d);
		}
		//炮管和雷达始终保持与车身垂直(车身方向加90度)
		//这样使得炮管和雷达方向一致,并且对这场地中的方向(与墙垂直)
		getGun().turn(standardAngle(getBody().getHeading()+Math.PI/2d-getGun().getHeading()));
		getRadar().turn(standardAngle(getBody().getHeading()+Math.PI/2d-getRadar().getHeading()));
	}
    // -------------------- function for event handle ---------------
   	public void onScannedRobot( ScannedRobotEvent e ) {
		//扫描到敌人,开火,火力为一个与敌人距离有关,越远火力越小,越近火力越大
		double edistance=Point2D.distance(e.getX(),e.getY(),getBody().getX(),getBody().getY()); 
		getGun().fire(Math.min(3,300d/edistance));
	}
   	public void onHitWall( HitWallEvent e ) {
		//如果撞到墙,设置车身速度为0,避免一直撞墙
		getBody().move(0d);
		//转动90度
		if(getBody().getTurnRemaining()==0d){
	    	getBody().turn(Math.PI/2d);
		}
	}
	public void onHitRobot(HitRobotEvent event)
	{
		//撞到机器人也用和撞到墙相同的处理
		onHitWall(null);
	}
	//返回一个规范到-PI到PI的ang。
	public static double standardAngle( double ang ) {	//get the relative angle where - PI < angle < PI
		return Math.atan2( Math.sin( ang ), Math.cos( ang ) );
	}
}//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

⌨️ 快捷键说明

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