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