JAVA乐趣之坦克大战系列7
前言
本篇主要介绍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. }
- Java__线程---基础知识全面实战---坦克大战系列为例
- [原]Java web学习系列之 Java web开发中的Spring整合Hibernate
- Java-Web进阶系列(二)--Struts2-action 线程安全
- 【Java故事系列】Java虚拟机的10年
- 创建电信网络实时监控图――电信网管中的Java客户端系列(四)
- 概率语言模型及其变形系列(5)-LDA Gibbs Sampling 的JAVA实现
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
- 【java面试系列之操作系统】进程和线程、死锁、内存管理方式
- Java系列学习(四)-运算计算
- Java总结篇系列:Java多线程(二)
- Java多线程系列--“JUC集合”07之 ArrayBlockingQueue
- 网易云课堂Java进阶学习笔记系列04 -- 第8周 控制反转与MVC模式
- 系统学习java高并发系列二
- 编程经验系列-Java学习杂谈(三)
- Java-Web进阶系列(三)--eclipse 配置maven
- 死磕 java同步系列之ReentrantLock VS synchronized——结果可能跟你想的不一样
- 深入Java集合学习系列:HashMap的实现原理
- 回归基础系列-选择排序[JAVA]
- Groovy(Java笨狗)系列---断言
- java环境搭建系列:JDK环境变量详细配置