前言
本篇主要介绍Robocode中如何对敌方进行扫描以便于更好的通过扫描结果不断改变自身的移动和***方式。
扫描策略
扫描策略的主要目标就是能够更好的锁定对方,即让敌方在我们的视野范围之内,或者使用更专业的名词—雷达锁定。
为了锁定目标,我们可以把雷达往反方向扫描。因为雷达旋转很快,而雷达的方向与对方坦克方向的偏移量不大,机器人是有一定大小的。于是扫描线在目标身上来回扫动,实现了雷达锁定。
代码示例如下:
1.double?RadarOffset=敌人的绝对角度-雷达方向??
2.setTurnRadarRightRadians(?RadarOffset?*?1.2?);?
移动策略
移动的方式有很多种,都可以根据对手的情况设定自己的移动方式,例如:
1.明显有规律的运动:
绕墙运动
2.随机性很强的运动:
官方案例中的crazy坦克。
3.对瞄准有干扰性的主动运动:
先以一种很明显的规律运动,等敌人误以为我是那种运动后,立刻改变为另一种运动规律,等敌人意识到现在的运动规律后,我又改为原来那种,来迷惑敌人。
4.依据对方发弹或者运动而采取的被动运动
该种情况可以引出如何让Robot躲避***,以及如何设定自己的瞄准策略(将在下一篇中讲解)。
躲避***:
坦克对于周围环境的了解非常有限。但是,它看不到×××。但是由于对方发射×××时自身的能量会减少,通过判断对方的能量等级的变化,还是可以得知对方是否正在发射×××。(一般在单挑模式下)
示例:
1.public?void?onScannedRobot(ScannedRobotEvent?e)???
2.{//?previousEnergy?记录前一次的能量??
3.????double?changeInEnergy?=?previousEnergy?-?e.getEnergy();??
4.?????if?(changeInEnergy>0?&&?changeInEnergy<=3)?//对方能量变化{??
5.?????//躲避!??
6.????turnLeft(90?-?e.getBearing());//转向×××方向的侧方向????
7.????????setAhead((e.getDistance()/4+25));?//前进以避开×××????????????
8.?????}??
9.??????previousEnergy?=?e.getEnergy();??
10.?}??
原文地址:https://blog.51cto.com/14256902/2423596