前言
本篇之前的内容介绍了瞄准策略,让大家明白了如何能让我们的雷达更好的锁定到敌人,本篇将分享给大家一个非常高效的雷达,供大家参考。
主要内容复习
第一, heading 角度系
如图所示,所谓heading角,即从Y轴出发,然后顺时针绕回Y轴的这么个角度区间,取值范围: [0,360]
第二, bearing角度系
所谓bearing 角,即从Y轴顺、逆时针出发,绕半圈回到Y轴所形成的两个角度区间,取值范围:顺时针[0,180) ;逆时针[0,-180]
好的,我们已近复习了两角度系,下面我们来学习这个非常高效的雷达
public void onScannedRobot(ScannedRobotEvent e) {
//注意 这里的计算都以弧度为单位
double absBearing=0d;
//雷达转动角度
double radarTurnAngle=0d;
//得到绝对角度差
absBearing=robocode.util.Utils.normalRelativeAngle(e.getBearingRadians()+getHeadingRadians());
//根据absBearing角算出Radar要调整的角度
radarTurnAngle=Math.sin(absBearing - getRadarHeadingRadians());
//转动雷达,注意是向右
setTurnRadarRightRadians(radarTurnAngle);
}
分析:
说明:
e.getBearingRadians(),如图中的∠FBC所示
是敌机(Enemy)与自己车头方向(你使用setAhead(正值)前进的方向即为车头方向,如BC箭头所示)所成的角,因为是以BC为Y轴的bearing角,所以这个角在这个例子中是个负值。
getHeadingRadians(),如图中∠ABC所示
是以自己的车头方向与屏幕垂直正上方为Y轴所成的heaing角。
absBearing=robocode.util.Utils.normalRelativeAngle(e.getBearingRadians()+getHeadingRadians());
所以absBearing角即为∠FBA,即自己与敌机的连线,与Y轴所成的bearing角,取值范围为[-180,180)。
∠FBE=absBearing - getRadarHeadingRadians(),在这里计算出来为负值。即雷达需要转动的角度。
最后通过Math.sin(absBearing - getRadarHeadingRadians())进行角度修正得到最终值radarTurnAngle。
因为setTurnRadarRightRadians(radarTurnAngle)是向右旋转,所以若radarTurnAngle为负则雷达向左旋转。
下一期将会给大家带来一个具体的实例供大家参考。
好啦,本期内容就到这里喽,我是不会玩游戏却非得写游戏的陈老师,一起来学习JAVA吧!
网友评论