首页 / 软件开发 / JAVA / 在Robocode中使用Vector实现敌人列表
在Robocode中使用Vector实现敌人列表2010-11-29 IBM 羌狼前言RoboCode的混战模式中,如何更好的掌握多个对手的情况,从而采取更好的 策略,成为每一个玩家迫切需要解决的问题。而世界级的机器人大都采用了向量 (vector)数组的方式来保存多个对手的信息。而且vector的作用不止于此,上届世界冠军Yngwie还使用vector来保存子弹 的命中率信息,为更好的决策提供依据。当然这超出了我们今天的话题,有兴趣 的朋友可以看一下Yngwie中的Enemy类和Strategy类。好了,让我们正式开始今天的vector之旅吧,如果您对JAVA中的vector还不 是特别了解,没关系,我在最后介绍了一些关于vector的知识。给我们的敌人排个队熟悉JAVA的朋友都知道,vector是用来保存一系列对象的集合。今天我们用 他来保存我们的敌人的一些信息,把这些四处乱跑的家伙都抓进我们的集合还真 不是个轻松的活。孔子云:“万物皆类”。所以,我们首先要声明一个类: Track类。将我们能知道的敌人的属性全都作为这里类中的一个属性:名称、绝 对角度、敌人坦克相对于你车头方向的相对角度、距离、能量、速率和敌人坦克 所面对的方向等。这些都是通过ScannedRobotEvent对象得到的,具体的API函数 请参考Robocode的API帮助。代码如下:/**
* Track类,保存目标的信息
*/
package mytest;
import robocode.*;
public class Track
{
public String Name; //敌人坦克的名称
//敌人的绝对角度,通过计算得出
public double Heading;
//敌人坦克相对于你车头方向的相对角度
public double Bearing;
public double Distance; //敌人坦克的距离
public double Energy; //能量
public double Velocity; //速率
public double FaceHeading; //敌人坦克面向的方向
public double trackX,trackY; //敌人坦克的坐标
//下一个标准时间中敌人坦克所在的位置
public double nextTrackX,nextTrackY;
public void update(ScannedRobotEvent e)
{
Name=e.getName(); //敌人坦克的名称
Bearing=e.getBearing(); //敌人坦克相对于你车头方向的 相对角度
Distance=e.getDistance(); //敌人坦克的距离
Energy=e.getEnergy(); //能量
Velocity=e.getVelocity(); //速率
FaceHeading=e.getHeading(); //敌人坦克面向的方向
}
}