📄 walls.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 + -