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.?}??

原文地址:https://blog.51cto.com/14256902/2423596

时间: 2024-11-05 22:56:19

JAVA乐趣之坦克大战系列7的相关文章

(java项目)坦克大战 2.0

这个版本,只能算是一个雏形,把最基本的东西给完成了,不过,后面可添加的也不多.有一点,还是想去实现,那就是敌方坦克自己寻找对手!也就是游戏AI. emmm, 什么时候可以了解一下这个AI.顺便学学python. 这个帖子只是为了贴上代码,对后续的代码作为优化和添加游戏AI做准备的. 1. 各类接口 package Event; /* *具有攻击力的接口 */ public interface Attackable { /* * 校验具有攻击力的实物, 和, 具有被攻击的实物,是否能撞在一起 *

java课程设计--坦克大战

java课程设计--坦克大战 一. 团队课程设计博客链接 https://www.cnblogs.com/zwtcyt/p/12173572.html 二.个人负责模块和任务说明 墙体类,子弹类,道具类以及音效类的编写,部分GUI的编写 三.代码的提交记录截图 四.负责模块和任务详细说明 墙体类 主墙体即不可摧毁的墙体 该类为所有障碍物的父类,子类继承时改变里面draw方法 草地类 河流类 可摧毁的墙类 音效类 子弹类 子弹与碰撞检测 利用javafx中shape的intersect方法来得出两

坦克大战系列(3.0版)

无论头上是怎样的天空,我准备承受任何风暴.--拜伦 本讲内容:坦克3.0版(面向对象的思想) 要求:画出我方坦克会动并且会发射子弹.画出敌人坦克 一.同一个包下建二个文件分别为:MyTankGame.Members(负责其它成员譬如:制造坦克.子弹等) MyTankGame类 /** * 功能:坦克游戏的3.0版本 * 1:画出坦克 * 2:实现我方坦克移动并且會發子彈,并 画出敌人的坦克 */ package a; import javax.swing.*; import java.awt.*

坦克大战系列(8.0版)

人生在勤,不索何获.--张衡 本讲内容:坦克大战8.0版(面向对象的思想) 一.解决:防止敌人坦克重叠运动 1.定义一个Vector容器,装所有敌人的坦克(为了得到所有坦克坐标) 2.定义一个方法getEts()可以得到敌人的坦克(为了得到所有坦克坐标) 3.在我的我的面板的构造方法调用getEts() 4.定义一个判断是否碰到了别的敌人的坦克的方法isTouchOtherEnemy() 5.在设置敌人坦克随机走动那调用isTouchOtherEnemy() 二.解决:我方坦克死亡(即隐身)后,

坦克大战系列(2.0版)

只有这样的人才配生活和自由,假如他每天为之而奋斗.--歌德 本讲内容:坦克2.0版(面向对象的思想) 要求:画出我方坦克会动.画出敌人坦克 一.同一个包下建二个文件分别为:MyTankGame.Members(负责其它成员譬如:制造坦克.子弹等) MyTankGame类 /** * 功能:坦克游戏的2.0版本 * 1:画出坦克 * 2:实现坦克上下左右移动,并画出敌人的坦克 */ package a; import javax.swing.*; import java.awt.*; import

JAVA写的坦克大战(单机图片版)

第一次写那么大的程序(感觉还是不错) package _25增加配置文件; import java.awt.*; import java.awt.event.*; import java.util.List; import java.util.ArrayList; /** * 这是这款游戏的主窗口,各个类都有他的引用 * @author ☆东★ * */ public class TankClient extends Frame{ private Image offScreamImage = n

坦克大战系列11.0版

好学而不勤问非真好学者. 本讲内容:坦克大战11.0版(面向对象的思想) 一.解决:播放声音 1.定义一个播放声音的类AePlayWave 2.在面板构造方法启动声音 二.同一个包下建二个文件分别为:MyTankGame.Members(负责其它成员譬如:制造坦克.子弹等) MyTankGame类 /** * 功能:坦克游戏的8.0版本 1:画出坦克 * 2:实现我方坦克可以上下左右移动 * 3:可以發射子彈,子彈可以連發(最多可以发5颗) * 4:画出敌人的坦克 * 5:当我方坦克击中敌人坦克

java学习之坦克大战游戏

总结:由于这几天快过年比较忙然后没怎么写,写代码途中一些经验总结现在给忘记了.这次的小项目感觉比上次写的思路清楚了点.没有之前第一次写那么逻辑混乱,结构也搞的比之前的要好,添加功能比较容易.学习了之前的经验,操作对象的方法由对象本身提供.不过这次小项目还有不足和不完善之处,有些可以做的功能没有实现,比如游戏存档,这里应该可以用下对象的序列化,还有游戏难度的设置也可以写个文件弄出来.要过年了,到处走亲戚没什么心思写了,这里只能留个尾巴了. 前言:之前的及时通信项目完成后感觉线程方面和对java的运

分享一下Java写的坦克大战游戏,相信很多人小时候玩过

写在前面 程序是五六年前读书的时候写的,里面会有一些不规范的,我已经将代码传到github上了,有时间会优化修改. 程序运行机制 定义了一个JPanel,然后每隔一小段时间重绘一遍. 重绘的内容如下: 地图信息: 敌方坦克: 我方坦克: 右边游戏基本信息: 炸弹爆炸. 涉及一些逻辑: 重叠判断: 坦克什么时候改变方向: 坦克什么时候射击: 坦克中弹之后的处理: 砖块.铁块.河流中弹,碰撞逻辑: ...等等 如何执行程序 下载源码: 执行maven命令clean package,可在target目