快速业务通道

Robocode高手的秘诀 - 圆周瞄准 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
  return new Point2D.Double(newX, newY); }

改进结果

如果您已经试过清单 1 中的代码,那么您会发现对付 spinbot(沿圆周移动 的样本机器人)的情况明显好多了,但您很可能还会注意到,机器人发出的炮弹 中仍有不少没有命中目标。这不单单是因为瞄的不准;还要归因于您对子弹要花 费多长时间才能到达目标的估算不准。要提高您的技术,可以通过使用一个非常 简单的迭代来估算一下时间,然后把这个估算值送入瞄准系统得到当子弹到达目 标时您与目标之间的距离的更精确的估算值。反复执行几次这一步,您将得到近 乎完美的估值。

清单 2. 迭代代码 /**This function predicts the time of the intersection  between the bullet and the target based on a simple iteration. It then  moves the gun to the correct angle to fire on the target.**/ void doGun() {    long time;    long nextTime;    Point2D.Double p;    p = new Point2D.Double(target.x, target.y);    for (int i = 0; i < 10; i++){      nextTime =    (intMath.round((getRange(getX(),getY(),p.x,p.y)/(20- (3*firePower))));      time = getTime() + nextTime;      p = target.guessPosition(time);    }    /**Turn the gun to the correct angle**/    double gunOffset = getGunHeadingRadians() -           (Math.PI/2 - Math.atan2(p.y - getY(), p.x -  getX()));    setTurnGunLeftRadians(normaliseBearing(gunOffset)); } double normaliseBearing(double ang) {    if (ang > Math.PI)      ang -= 2*PI;    if (ang < -Math.PI)      ang += 2*Math.PI;    return ang; } public double getrange(double x1,double y1, double x2,double  y2) {    double x = x2-x1;    double y = y2-y1;    double h = Math.sqrt( x*x + y*y );    return h; }

改进圆周瞄准的性能

作为瞄准系统,圆周瞄准基本成形了;也就是说,既在我们能力所及范围内 又能在此基础上更进一步的事并不多。但是,能改善性能的小改动有两处:

平均速度:您也许愿意保持一个补偿加速效应的移动平平均速度,而不是根 据目标的最后速度进行计算。

每一回合方向的平均变化:测量在每一回合内目标方向变化绝对量的平均值 有助于我们对付那些不如 spinbot 有规律的目标。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号