世界robocode机器人的四大运动方式分析 - 编程入门网
线运动了,这时如果你的炮管冷却度 为0的话,你采取第二次射击,你怎么办?用对付Corner的当前位置射击方法? 你显然打不中它,因为它在动,但是如果用对付Walls的直线提前量射击方法的 话,你能肯定它不会在下一个周期(滴答)停下?这是一种典型的对瞄准有干扰 性的主动运动,优秀的机器人Wolverine就是采用了这种方法,它能探测敌人什 么时候发弹,在敌人发弹的一瞬间改变运动方式如图6:(具体请见 躲避子弹)
图6 这样的运动方式通过代码已经很难掌握它的具体变化规律,因此在Wolverine 刚出来的时候没有几个机器人能打败Wolverine。后来优秀的机器人不断进展, 有的能计算敌人停留了多久就会动,动了多远又会停止,虽然不能很精确,但是 总能时而击中它了。 更先进的干扰运动有先小距离来回运动,然后走一 段比较长的距离(比如xieming的CX1.33,文件名为cx.MinixHT_1.33);还有先 往一个方向直线运动,估算敌人子弹快要击中自己的时候改变运动方向,下一个 子弹快击中时又改变方向(如Glyn Davies的Mooserwirt2)等等。很多优秀的机 器人都采用了类似的运动方式,怎样才能不被干扰?怎样才能识别干扰?没有一 种识别所有干扰的万能方法,因此只能针对特定一种或某一类干扰进行处理,比 如CX1.33的干扰,你可以记下它的较长运动距离平均(这里用L表示)是多少?当 他运动距离超过了小距离来回运动的那个距离的时候,你就不要以为他还会掉头 回去或者就一直走下去,它应该大概在走了L距离后返回。对于众多的运动方式 ,怎样识别一个干扰又是一个难题,所以在射击优秀的机器人时,命中率一般不 会太高。 怎样让别人不断的被干扰成为设计一个优秀运动的重点,也是 乐趣所在。当你设计的运动方式不断的迷惑敌人的时候,你是否有种嬉笑欢快的 感觉呢!:) 依据对方发弹或者运动而采取的被动运动 前面我们 讲到的Wolverine在敌人发弹后才开始运动,是否他也属于这一类呢?的确,它 的运动方式也应该同时属于依据对方发弹或者运动而采取的被动运动。 还有一些优秀的机器人很类似Wolverine,它们也是在敌人发弹后才开始运动, 但是他们又有很多不同,如果敌人不发弹,一般来说他就一直不动(Wolverine 也许会开始靠近你,虽然这也许是个好方法),比如我写的cx.ChookMT,每次如 果它探测到了敌人发了弹,它会采用自己的分析策略自动分析生成一个 EnemyBullet对象,然后实时监控会不会有某个特定的EnemyBullet对它有危险( 快要击中它),如果有危险,那么分析哪个方向没有危险就往哪个方向运动,这 样如果它分析并生成的EnemyBullet和真正的敌人的Bullet(子弹)运动方向一 致,那么它几乎将永远不会被击中。显然这不太可能总是一致,虽然不能达到永 远不被击中的效果,但是你会发现他仍然是难以被击中的。 类似策略的 还有 Daniel Pereira的EveKingpin和Eve等。另外Fermat的运动方式也应该属于 这一类,虽然很难肯定它的具体躲避策略,但是从对战中它总能在敌人子弹快要 击中它的时候改变速度和方向等等(其实它的运动很难看懂,它总在动,有时候 还不停的调整运动方向等)看出来,它应该记录了敌人的子弹。还有很多机器人 多多少少都有保持自己与敌人的距离的特点,最明显的莫过于Wolverine和 Fermat,前者总是与敌人保持一段很小的距离(大概200个像素点左右),而 Fermat总要与敌人保持相当远的距离,你也许经常看到Fermat被敌人追着跑的现 象(这并不意味着Fermat害怕它哦^_^),当你发现你在远处或者近处的时候你的 射击非常准或者别人的射击非常不准的时候,你就该考虑你的机器人是否也应该 与敌人始终保持一定的距离了。 总 结 通过这些分析是否会发现 第三第四种运动方式比第一第二种高级,这是显然!:)但是你要知道后 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |