advancedbody.java

来自「java的机器人大战」· Java 代码 · 共 59 行

JAVA
59
字号
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 + =
减小字号Ctrl + -
显示快捷键?