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

📄 advancedbody.java

📁 java的机器人大战
💻 JAVA
字号:
package samples.advancedbody;
import AIplatform.event.*;
import AIplatform.robot.*;
import java.awt.geom.Point2D;

/**
 *-----------------------------------------------------------------
 * @author:iiley (iiley@hotmail.com)
 * http://www.robochina.org
 * 一个提供moveTo(x,y)方法的车身类
 * 使用此车身的时候,必须每个单位事件都调用work()方法,否则,机器人将不能正常运动
 * 此车身设计比较简单,机器人只能前进到达目标点,而且行动不很精确,所以在判断机器人是否到大目标点的时候
 * 当距离目标点比较近的时候就视为到达,可以参照MoveTo机器人的用法
 */
public class AdvancedBody extends Body
{
	private Point2D.Double destination;

	public AdvancedBody(Robot robot){
		super(robot);
	}
	/**
	 * 必须每个单位事件都调用此方法,让机器人时时调整运动
	 */
	public void work(){
		if (destination==null)
		{
			return;
		}
		double turnAngle=Util.standardAngle(Math.atan2(destination.y-getY(),destination.x-getX())-getHeading());
		turn(turnAngle);
		if(Math.abs(turnAngle)>Math.toRadians(45d)){
			move(0d);
		}else{
			double distance=destination.distance(getX(),getY());
			if(distance<12 && getVelocity()>7d || distance<2d){
				move(0d);
				turn(0d);
			}
			move(Math.min(8d,distance));
		}
	}
	/**
	 * 设置运动目标点
	 */
	public void moveTo(double x,double y){
		destination = new Point2D.Double(x,y);
	}
	/**
	 * 得到当前距目标点的距离
	 */
	public double getDistance(){
		if(destination==null)
			return 0d;
		else
    		return destination.distance(getX(),getY());
	}
}

⌨️ 快捷键说明

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