上次向大家简单介绍了一下Robocode的安装,但却没有具体说明如何创建一个Robocode项目。要开发Robocode,需要正确安装JVM(Java Virtual Machine),Robocode程序,以及Visual Studio2008。当然你也可以使用JAVA环境开发,这里假设你使用的是Robocode的.Net版本。
打开Visual Studio2008,点击File->New->Project,在弹出的窗口中选择Visual C#中的Class Library:
输入工程名,比如”MyTank”。这时会生成一个工程,并默认包含了一个Class1.cs文件。因为我们需要使用Robocode的开发库,所以需要添加相关引用,右键点击工程树中的”References”选择”Add Reference”:
在弹出的窗口中选择”Browse”选项卡,选择Robocode安装目录->libs->robocode.dll:
你可以重命名Class1.cs,比如Tank.cs。在弹出的窗口中选择“是”,这个名字将是你的机器人在战场中显示的名字。
打开Tank.cs,在开始几行using下添加一句:using robocode,以便可以引用robocode的API。namespace将决定坦克的前缀,防止机器人命名重复,这里比如说改为YunFei。为了获得一些坦克的基础属性与动作,我们需要让我们创造的坦克类继承robocode中坦克的基类Robot,这时候,我们的代码看上去就像这样:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Robocode; namespace YunFei { public class Tank : Robot { } }
为了能让我们的机器人动起来,我们需要定义Run()函数。Run()函数决定我们机器人的行为,在该函数中对我们的机器人进行初始化,之后进入一个无限循环,在该循环中处理机器人的行为,比如移动、开火、或是躲避敌人的子弹。一个Run()函数可以是这样的:
public override void Run() { // Todo:在这里添加初始化变量 // 开始无限循环 while (true) { Ahead(5000); // 向前5000个单位 TurnRight(90); // 向右旋转90度 } }
有时候,光有主循环还不够,我们需要对一些事件做出反应,比如被击中、比如检测到敌人,这就需要覆盖事件函数。这里举两个例子,比如发生被敌人击中事件时就移动,发生发现敌人事件时就开火:
public override void OnScannedRobot(ScannedRobotEvent e) { Fire(1); } public override void OnHitByBullet(HitByBulletEvent evnt) { TurnRight(10); Ahead(10); }
Fire()函数的参数表示子弹的火力,火力越大敌人的伤害越大,但自己消耗的能量也越大。在Robocode中,发射子弹消耗能量,击中别人获得能量,一旦能量耗尽,机器人也就死亡了。Robocode中还有很多的事件,大家可以阅读相关手册,按照以上模式进行添加。
至此,一个具有简单行为的坦克机器人也就完成了。这个机器人平时会一直前进,之后右转;当检测到敌人时,发射子弹;被别人击中时,偏移一个小角度之后继续移动。整个tank.cs如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Robocode; namespace YunFei { public class Tank : Robot { public override void Run() { // Todo:在这里添加初始化变量 // 开始无限循环 while (true) { Ahead(5000); // 向前5000个单位 TurnRight(90); // 向右旋转90度 } } public override void OnScannedRobot(ScannedRobotEvent e) { Fire(1); } public override void OnHitByBullet(HitByBulletEvent evnt) { TurnRight(10); Ahead(10); } } }
在编译之前,我们需要先进行一下配置,右键点击工程文件,右键选择Properties:
需要改变的选项有两项,一是Assembly_name一项,这个决定输出文件的名字,可以以”队伍名.坦克名_版本号”的方式命名,Default namespace是默认的命名空间,与项目中的namespace一致就行了。
点击Build->Build Solution或按下F7就可以编译项目了,如果没有错误,会在工程目录/bin/debug下看到生成的dll文件,其文件名与你填写的Assembly Name一致。
现在,我们要将我们编写的坦克添加到Robocode的战场中。首先打开Robocode主程序,点击Options->Preferences->Development Options选项卡,点击add按钮:
添加我们刚才生成的.dll文件所在路径,如D:\Projects\MyTank\MyTank\bin\debug。这样Robocode就可以找到我们的机器人了。
这时点击Battle->New,在选择机器人的界面中应该已经能看到我们的机器人了:
点击”Add->”将我们的机器人加入战场,之后可以在sample中随便添加几个对手,点击底部的”Start Batlle”,一场惊心动魄的比赛就开始了!
不用多想,最后的结果一定是惨烈的…因为这个只会乱窜的家伙需要你给它更多的智能。
马上在云飞社区起步你的Robocode之旅吧!
>> 本文章版权归作者所有,如需转载请联系作者授权许可。
>> 原文来自: 云飞机器人实验室
>> 原文地址: 构建你的第一个Robocode坦克
>> 关于我们: 关于云飞实验室
>> 支持我们: 帮助我们可持续发展