前言
本篇主要介绍Robocode中如何对敌方进行扫描并且不断调整自身的雷达移动方式以达到长时间瞄准的效果,如果该效果实现了,是不是就会对我们坦克的后续的战斗增加很重要的砝码呢!
直线瞄准策略
官方图
∠AEF= ∠α=敌人与Y轴夹角的绝对角(见前面例子)
子弹的由E到F的运行时间为diff
坦克的运行速度speed=ScannedRobotEvent. getVelocity();
AB=speed*diff
我们可以算出B点的坐标为,A点坐标(x,y)
newX=x+AB*Math.sina(α)
newY=y+EF*Math.cos(α)
炮弹应该转动的角为normalRelativeAngle(α- getGunHeadingRadians())
圆周瞄准策略
其基本原理是:
change in x = cos(initialheading) * radius - cos(initialheading + changeinheading) * radius
change in y = sin(initialheading + changeinheading) * radius - sin(initialheading) * radius
其中initialheading是敌方机器人在初始位置的方向,子弹飞行期间的方向变化为 changeinheading,我们假定它以 radius为圆周半径运动。
官方图
每转的方向变化:
headingchangeperturn =
(heading2 - heading1)/time 得到这个值,其中 time是两次测量的间隔时间;
子弹运动时间:
time = getTime()+(range/(20-(3*firepower))) ,其中 range是发射时我们和敌人之间的距离,而 firepower是我们计划使用的射击火力;
半径:radius = velocity/headingchangeperturn
通过以上公式的设定就可以充分调动雷达及炮管的角度,更加明确自身的战术,做到游刃有余,大家自己根据理解试一下吧。
好啦,本期内容就到这里喽,我是不会玩游戏却非得写游戏的陈老师,一起来学习JAVA吧!