zoukankan      html  css  js  c++  java
  • 游戏中寻找学习JAVA的乐趣之坦克大战系列5-坦克的动态参数

    游戏中寻找学习JAVA的乐趣之坦克大战系列5-坦克的动态参数

    前言

    本篇包含Robocode中更为复杂的动态参数,能够充分了解到坦克的运作变化,熟悉坦克的重要指标,为写出优秀的坦克奠定坚实的理论基础。

    生命参数

    整个战斗中数生命点最重要,我们的一切都是为了它而存在,当生命点没有了,也代表着我们输了这场战斗。我们可以用函数getEnergy()得到我们机器人的生命点数。

    1. 损失:相撞损失:我们的坦克撞到墙,或者跟其他坦克相撞,都会损失一定的生命值;击中损失:我们被子弹击中,当然也会损失生命值;发射损失:我们发射子弹也会损失生命值。

    2. 获取:生命值的获取只能通过利用子弹击中其他坦克。

    子弹参数

    由于子弹对生命力的影响很大,我们的每一个子弹要用到要害处,精确计算子弹及其能量值就变得很重要了。

    * 子弹能量:

    子弹能量是通过函数getPower()得到的。它大于等于0.1,小于等于 3。* 子弹速度:

    每一颗子弹有着自身的速度,这在处理敌人向你开炮前的移动策略可是很有帮助的。子弹的速度也和它的能量有关: speed = 20 - 3 * power。

    由于能量范围在0.1到3之间我们可求得子弹的速度范围:11 <= bullet speed <= 19.7。

    炮管参数

    子弹由炮管发射,炮管的方向决定了子弹的方向,炮管的热量也决定着子弹的发射。炮管还会发热?很多人都会很惊奇,不错。真实战争中我们的大炮不一样也会发热吗?Robocode也就是别一个真实的战场,战争中能用到的知识都可应用在Robocode中。方向参数从我们上面的战争静态参数说明中可看到。下面我们来看看炮管的其他参数:

    * 旋转速率:炮管在每一个时间周期内旋转速率=20 度/帧(frame)

    * 炮管热量:当我们开火时,炮管产生的热量由子弹开火时的能量决定也即:热量=1 (firepower/5),我们可以利用函数 getGunHeat()得到炮管当时的热量,只有当getGunHeat恒等于0时,我们才能再次发射子弹。现在你明白了为什么有时候我们生命点非零并且有子弹就是不能开火的原因了吗?炮管过热了!* 冷却度:有热度当然就有冷却度,不冷却我们的炮管会永远不会开火的。系统战斗设定的默认冷却速度是0.1/tick(时间周期),我们可通过函数 getGunCoolingRate()得到这个参数值。我们还可以通过系统设置冷却速度。选择Battle->New ->Rules->Gun Cooling Rate。

    雷达参数

    雷达,是我们在战争中的双眼,它能看到并告诉我们敌人的一举一动,知已知彼才能百战不贻!* 旋转速度:雷达以每时间周期45度的速度旋转。也即45 degrees/frame.* 扫描面积:

    雷达扫描是呈扇形的,它的开始位置到终止位置的长度大约为1200。只要我们放大屏幕可以通过眼睛估算出这个面积。* 扫描排列:扫描到的数据有墙,目标等等。这些是按扫描距离来排列,从离雷达最近的物体开始到最后扫描到的物体。

    坦克车参数

    好了,回到我们的坦克本身了。我们来看看它又有些什么参数。* 前进速度:我们的机器人最大的速度(Velocity)为8,函数getVelocity()返回了我们机器人当前的速度。

    * 加/减速度在这之前我们先来看看物理学中的加/减速度的求法,及相关的一些公式知识。我们设S为距离,Vt为终速度,Vo为初速度,t为时间,a为加速度得到如下:位移公式S=Vot+at2/2速度公式Vt=Vo+at速度-位移公式Vt2-Vo2=2a平均速度公式V=(Vt+Vo)/2=s/t加速度公式a=(Vt-Vo)/t

    我们再来看看Robocode中的加/减速度:加速度为 1 像素(pixel)/帧frame ,减速度为 2 pixel/frame。如果我们的机器人从静止到最大速度,由公式可求得所要的时间(getTime)=8/1也即要8个时间周期,很有意思的计算,我们还可据此计算出更多的相关有用的数据。* 旋转速度: 机器人的旋转速度和当前的速度有关即旋转速度=10 - 0.75 * getVelocity()

    好啦,本期内容就到这里喽,我是不会玩游戏却非得写游戏的陈老师,一起来学习JAVA吧!

  • 相关阅读:
    jmeter接口测试3-正则表达式提取器的使用
    Sublime中Markdown的安装与使用
    python使用you-get模块下载视频
    python BeautifulSoup模块的简要介绍
    python Requests模块的简要介绍
    mongodb基本操作的学习
    python中的常用方法
    网盘的选择,百度网盘、google drive 还是 Dropbox
    python_爬虫一之爬取糗事百科上的段子
    pycharm的使用破解和Anaconda的使用
  • 原文地址:https://www.cnblogs.com/qfchen/p/10980511.html
Copyright © 2011-2022 走看看