您当前位置: 圣才学习网首页 >> IT类 >> Java程序设计

Robocode坐标锁定的实现(5)

扫码手机阅读
用圣才电子书APP或微信扫一扫,在手机上阅读本文,也可分享给你的朋友。
评论(0
   
来源:网络 作者:未知
 
  Cos函数返回三角的余弦函数,参数a是一个以double类型的弧度表示的角值,返回类型为double.
 
  有人会问为什么不使用ScanndeRobot事件中的getRadarHeadingRadians()方法直接得到弧度。哦,你来看看 Robocode中华联盟iiley的一段说明:
 
  public void onScannedRobot(ScannedRobotEvent event) {
 
  enemyX=Math.sin(Util.standardMathDirRadians (getRadarHeadingRadians()))*event.getDistance();
 
  enemyY=Math.cos(Util.standardMathDirRadians (getRadarHeadingRadians()))*event.getDistance();
 
  }
 
  看起来好像正确的,但是你实践一下会发现他很不准确,为什么呢?原因在getRadarHeadingRadians()函数,当你调用此函数的时候实际上雷达已经不在刚刚扫描到敌人的那个角度了,他已经转过了十几度甚至更多。雷达默认转动速度是45/robocode单位时间,实际上一般来说你用getRadarHeadingRadians()得到的值总是45度的整数倍。(一些情况除外,比如说你用了turnRadarLeft 11)类似的语句以后)。
 
  Robocode 也遵循数学应用中的基本法则用两种方法来表示方向的角度:角度制和弧度制,本文的代码及以前文章中的代码我们一直用的是角度制。另外一种方法就是利用 ScannedRobotEvent.getBearingRadians()robot.getHeadingRadians()得到敌人以弧度表示的方向,这个方法在本文章中没有说明了,有兴趣的朋友可以自己试试用Java.util 类库来实现. 也可参考文 "精确计算敌人的坐标"。大家也可比较两种方法各自特点,这将是个很有意思的过程。
 
  移动锁定
 
  当然,即使是最简单的机器人也不会坐在那一动不动等着你来消灭。它会躲避你的进攻以及扫描,当你向它原来坐标处开火,说不定它已经跑得老远了,当然这一切都不是我们所希望看到的。我们的目的是要消灭它:不管他是移动或静止的。下面我们就结合方向系统与坐标系统,来锁定我们移动的目标。创造一个我们自己的高级扫描机器人。建议你在此处下载源代码( resource)并看看演示效果再回到我们的文章中来。显示如图5:
 
5
 
 
 
相关阅读
 
 

小编工资已与此挂钩!一一分钱!求打赏↓ ↓ ↓

如果你喜欢本文章,请赐赏:

已赐赏的人
最新评论(共0条)评论一句