Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  java  >  正文 Robocode学习笔记(四)

Robocode学习笔记(四)

发布时间:2018-12-06   编辑:www.jquerycn.cn
jquery中文网为您提供Robocode学习笔记(四)等资源,欢迎您收藏本站,我们将为您提供最新的Robocode学习笔记(四)资源

  上一次我所提到的躲避方法,确实存在一点问题。对方子弹一发射,我的Bot就移动,并且这个移动是规律的来回移动。如果移动距离短了,就可能在回来的时候撞到对方的子弹;如果移动距离长了,就等于做一个直线运动,对方很容易计算得到Bot的运动轨迹。还有一个问题,躲避的时候很有可能撞到墙上……(撞墙是要减energy的:~()

  针对以上的问题,我另写了一个Bot。代码如下:

import Robocode.*;

public class HanicBot extends AdvancedRobot{  private double eDist; //对方的距离  private double move; //移动的距离  private double radarMove = 45; //雷达移动的角度  private double dFirePower;  //火力

  /**   * main func run()   */  public void run() {    eDist = 300;    while(true){      //每过一个周期,运动随机的距离      double period = 4*((int)(eDist/80));  //周期;敌人越接近,周期越短,移动越频繁      //周期开始,则移动      if(getTime()%period == 0){        move = (Math.random()*2-1)*(period*8 - 25);        setAhead(move ((move >= 0) ? 25: -25));      }      //避免撞墙      double heading = getHeadingRadians(); //取得bot方向的弧度数      double x = getX() move*Math.sin(heading); //移动move后将要达到的x坐标      double y = getY() move*Math.cos(heading); //移动move后将要达到的y坐标      double dWidth = getBattleFieldWidth();  //战场的宽度      double dHeight = getBattleFieldHeight();  //战场的长度      //当(x,y)超过指定的范围,则反向移动move      if(x < 30 || x > dWidth-30 || y < 30 || y > dHeight-30){        setBack(move);      }      turnRadarLeft(radarMove); //转动雷达    }  }//end run()

[关闭]