简介
robocode是一个java编写的类似自动机器人软件,你可以编写你的自己的坦克,然后跟机器的坦克对战,或者跟别人的坦克对战,有1对1模式和混战模式,谁能待到最后谁就胜利
官网地址:点击下载就可以了
安装和开始
运行下载的jar
java -jar robocode-1.9.3.9-setup.jar
然后会告诉你robocode.sh文件的地址
在robocode.sh所在的目录下
./robocode.sh
组成
每个坦克有三个部件:坦克本身,炮塔,雷达
可以设置使得三个部件可以独立转动和工作
坦克本身可以转动以及前后移动
炮塔可以开炮
雷达会扫描到敌方炮塔的能量,相对位置,以及敌方和我方之间的距离等
雷达是非常重要的一个组件,他为我们提供了敌方的信息,使我们可以做出决策
坦克有一个重要的属性:能量
所有的坦克开始时的能量是一样的,当能量降到0时,坦克爆炸
开炮会降低能量,炮的威力为0-3之间,相应的降低能量的数值也是0-3之间
炮击中敌方坦克时,自己的坦克就会增加能量,增加的能量也跟炮的威力有关
坦克撞墙会减少能量
坦克装上敌方坦克会减少能量
制作一个坦克很简单,只要继承Robot类就行了
然后就可以重写Robot的一些事件以及调用Robot的一些方法供自己的坦克使用
操作
坦克的行为方法:
- turnRight(double degree):右转
- turnLeft(double degree):左转
- ahead(double distance):向前走一定的距离
- back(double distance):向后走一定的距离
炮的转动方法:
- turnGunRight(double degree):右转一定角度
- turnGunLeft(double degree):左转一定角度
雷达转动:
- turnRadarRight(double degree):右转
- turnRadarLeft(double degree):左转
在坦克工作之前可以设置坦克的炮以及雷达的工作方式:
- setAdjustGunForRobotTurn(true):坦克和炮转动的转动互不影响
- setAdjustRadarForRobotTurn(true):坦克和炮的转动和雷达的转动互不影响
- setAdjustRadarForGunTurn(true):坦克,炮,雷达全部转动互不影响
获取信息:
界面看成一个坐标轴,左下角是原点,使用绝对位置时正上方角度为0
- getX():获取自己坦克的X轴距离
- getY():获取自己坦克的Y轴距离
- getHeading(),getGunHeading(),getRadarHeading():获取坦克,炮,雷达的角度,这个角度是绝对的,使用绝对位置时正上方角度为0,所以如果方向指向右面,返回就是90,如果指向左面,返回就是270
- getBattleFieldWidth(),getBattleFieldHeight():获取场地的宽度和高度,每一场比赛的宽度和高度是可以设置的,不是固定的,所以就需要这两个方法得到场地的宽度和高度
- fire(double power):射击,参数是射击的火力,可以是0-3,同时每一发炮弹自己也消耗一样的能量
事件:
继承Robot后主要重写三个方法:
- ScannedRobotEvent(ScannedRobotEvent e):这个方法会在雷达扫描到敌方坦克时调用,只要扫描到敌方坦克就会调用这个方法,所以这是你可以控制炮向敌方开火,可以调用e的一些方法获取扫描到的敌方坦克的一些信息,e.getBearing:返回敌方坦克的方位,这个返回的角度是相对的,如果敌方坦克在自己的右面,那么返回的数值就是0-180,这个返回的数值是敌方坦克和己方坦克的头的方向的角度,如果是左面就是-180 – 0,
e.getDistance:返回敌方坦克到自己坦克的距离 - onHitByBullet(HitByBulletEvent e):当自己的坦克中弹时自动调用这个方法,这时候应该赶紧移动自己的坦克,别让自己的坦克一直被打,可以低啊用e.getHeading()返回敌方坦克的头的方向
(一直强调头的方向是因为一个坦克有三个方向,坦克的方向,炮的方向,雷达的方向,默认情况这三个方向是相同的,但是前面说了可以设置成三个互不干涉)
onHitWall(HitWallEvent e):当自己的坦克撞到墙或者敌方坦克时自动调用这个方法,这个时候可以调整方向 - HitRobotEvent():这个方法在自己的炮弹击中敌方的坦克时被自动调用
这个程序写一个自己的坦克很简单,要让自己的坦克动起来开炮也很简单,但是要让自己的坦克变动聪明就难了
看了一个YouTube的视频,人家的坦克追着别人打。。。