Robocode 是一个很容易使用的机器人战斗仿真器,可以在所有支持 Java 2 的平台上运行。您创建一个机器人,把它放到战场上,然后让它同其他开发者们创建的机器人对手拼死战斗到底。Robocode 里有一些预先做好的机器人对手让你入门,但一旦您不再需要它们,就可以把您自己创建的机器人加入到正在世界范围内形成的某个联盟里去和世界最强手对阵。每个 Robocode 参加者都要利用 Java 语言元素创建他或她的机器人,这样就使从初学者到高级黑客的广大开发者都可以参与这一娱乐活动。初级的 Java 的开发者们可以学习一些基础知识:调用 API 代码、阅读 Javadoc、继承、内部类、事件处理等等。高级开发者们可以在构建“最优品种”的软件机器人全球竞赛中提高他们的编程技巧。在本文中,我们将介绍 Robocode,并指导您从构建您平生第一个 Robocode 机器人开始征服世界。我们还将看一下迷人的“后台”机制,正是它使得 Robocode 起作用。下载并安装 Robocode:http://sourceforge.net/project/showfiles.php?group_id=37202&package_id=29609&release_id=545501 或是加入 Robocode  Robocode 系统组件
当您激活 Robocode 时,将看到两个相关的 GUI 窗口,这两个窗口构成了 Robocode 的 IDE:战场 
Robot Editor 
图 1 展示了处于工作状态的战场和 Robot Editor。战场是机器人之间进行战斗直至分出胜负的场地。主要的仿真引擎被置于其中,并且允许您在这里创建战斗、保存战斗以及打开新建的或现有的战斗。通过界面区域内的控件,您可以暂停或继续战斗、终止战斗、消灭任何机器人个体或获取任何机器人的统计数据。此外,您可以在此屏幕上激活 Robot Editor。Robot Editor 是一个定制的文本编辑器,它可以用于编辑生成机器人的 Java 源文件。在它的菜单里集成了 Java 编译器(用于编译机器人代码)以及定制的 Robot 打包器。由 Robot Editor 创建并成功编译的所有机器人都会处于战场上一个部署就绪的位置。Robocode 里的每个机器人都由一个或多个 Java 类构成。这些类可以被压缩成一个 JAR 包。为此,Robocode 的最新版本提供了一个可以在战场 GUI 窗口中激活的“Robot Packager”。对 Robocode 机器人的详细分析
在写这篇文章时,Robocode 机器人是一个图形化的坦克。图 2 是一个典型的 Robocode 机器人的图解。请注意,机器人有一门可以旋转的炮,炮上面的雷达也是可以旋转的。机器人坦克车(Vehicle)、炮(Gun)以及雷达(Radar)都可以单独旋转,也就是说,在任何时刻,机器人坦克车、炮以及雷达都可以转向不同的方向。缺省情况下,这些方向是一致的,都指向坦克车运动的方向。Robot 命令
Robocode 机器人的命令集都收录在 Robocode API Javadoc 中。您将会发现这些命令都是 robocode.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(boolean flag) :如果 flag 被设置成 true,那么坦克车转动时,炮保持原来的方向。 setAdjustRadarForRobotTurn(boolean flag) :如果 flag 被设置成 true,那么坦克车(和炮)转动时,雷达会保持原来的方向。 setAdjustRadarForGunTurn(boolean flag) :如果 flag 被设置成 true,那么炮转动时,雷达会保持原来的方向。而且,它执行的动作如同调用了 setAdjustRadarForRobotTurn(true) 。 
获取关于机器人的信息有许多方法可以得到关于机器人的信息。下面简单列举了常用的方法调用:getX() 和 getY() 可以捕捉到机器人当前的坐标。 getHeading() 、 getGunHeading() 和 getRadarHeading() 可以得出坦克车、炮或雷达当前的方向,该方向是以角度表示的。 getBattleFieldWidth() 和 getBattleFieldHeight() 可以得到当前这一回合的战场尺寸。 
一旦您掌握了移动机器人以及相关的武器装备的方法,您就该考虑射击和控制损害的任务了。每个机器人在开始时都有一个缺省的“能量级别”,当它的能量级别减小到零的时候,我们就认为这个机器人已经被消灭了。射击的时候,机器人最多可以用掉三个能量单位。提供给炮弹的能量越多,对目标机器人所造成的损害也就越大。 fire(double power) 和 fireBullet(double power) 用来发射指定能量(火力)的炮弹。调用的 fireBullet() 版本返回 robocode.Bullet 对象的一个引用,该引用可以用于高级机器人。 每当机器人在移动或转动时,雷达一直处于激活状态,如果雷达检测到有机器人在它的范围内,就会触发一个事件。作为机器人创建者,您有权选择处理可能在战斗中发生的各类事件。基本的 Robot 类中包括了所有这些事件的缺省处理程序。但是,您可以覆盖其中任何一个“什么也不做的”缺省处理程序,然后实现您自己的定制行为。下面是一些较为常用的事件: ScannedRobotEvent 。通过覆盖 onScannedRobot() 方法来处理 ScannedRobotEvent ;当雷达检测到机器人时,就调用该方法。 HitByBulletEvent 。通过覆盖 onHitByBullet() 方法来处理 HitByBulletEvent ;当机器人被炮弹击中时,就调用该方法。 HitRobotEvent 。通过覆盖 onHitRobot() 方法来处理 HitRobotEvent ;当您的机器人击中另外一个机器人时,就调用该方法。 HitWallEvent 。通过覆盖 onHitWall() 方法来处理 HitWallEvent ;当您的机器人撞到墙时,就调用该方法。 
我们只需要知道这些就可以创建一些相当复杂的机器人了。您可以通过战场的帮助菜单或 Robot Editor 的帮助菜单访问 Javadoc 中其余的 Robocode API。现在,我们该把学到的知识付诸实践了。创建机器人
要创建一个新的机器人,请启动 Robot Editor 并选择 File-> New-> Robot。系统将会提示您输入机器人的名称,这个名称将成为 Java 类名。请您在提示符处输入 DWStraight。接下来,系统还会提示您输入一个独一无二的包前缀,它将用作存放机器人(还可能有相关的 Java 文件)的包的名称。请在该提示符处输入 dw。 Robot Editor 就会显示您要控制这个机器人需要编写的 Java 代码。清单 1 是您将会看到的代码的一个示例:package dw;
import robocode.*;
/** *//**
 * DWStraight - a robot by (developerWorks)
 */
public class DWStraight extends Robot
...{
    ...  // <<Area 1>>
    /** *//**
     * run: DWStraight's default behavior
     */
    public void run() ...{
        ... // <<Area 2>>
        while(true) ...{
        ... // <<Area 3>>
        }
    }
      ... // <<Area 4>>
    public void onScannedRobot(ScannedRobotEvent e) ...{
        fire(1);
    }
}下面我们逐区地描述这个第一个机器人将做些什么:Area 1我们没有在这个机器人的程序中指定任何类作用域变量。 Area 2 
为了使机器人处于已知的状态,我们通过 turnLeft(getHeading()) 使它转到 0 度的方向。 Area 3 
在这个重复性的部分,我们使用语句 ahead(1000) 让机器人尽其所能向前移动到最远的地方。当机器人撞到墙或其他机器人时,就会停下来。接着,我们通过 turnRight(90) 使它向右转。在重复执行这一行为时,机器人基本上是在沿着墙按顺时针方向移动。 Area 4 
在此,除处理自动生成的 ScannedRobot 事件并向被发现的机器人直接射击之外,我们还会检测 HitByBullet 事件,并且让机器人在被击中的时候转过 180 度(沿顺时针方向或逆时针方向)。 编译以及测试机器人在 Robot Editor 菜单上选择 Compiler-> Compile编译您的机器人代码。现在我们可以尝试第一回合的战斗了。切换回战场并选择菜单上的 Battle-> New,将会出现一个类似于图 3 中所示的对话框。 请先将我们的机器人 dw.DWStraight 添加到战斗中,然后再添加一个对手机器人,比如 sample.SittingDuck。单击 Finish,战斗就开始了。不可否认,同 SittingDuck 战斗并不怎么有趣,但是您可以目睹这个叫做 DWStraight 的机器人在缺省情况下的行为。试试 sample 文件夹里的其他机器人,看看 DWStraight 同这些机器人的战斗情况如何。 当您准备开始研究另外一个机器人的代码时,请先看看随 参考资料中的代码分发包一起提供的 dw.DWRotater 这个机器人的代码。在缺省情况下,这个机器人将会: 移动到战场中心 
一直转动它的炮,直到检测到机器人 
每次尝试以不同的角度在离被检测到的机器人前方不远的地方射击 
每当它被另外一个机器人击中时,它都会迅速的来回移动 
这段代码简单易懂,所以我们在这里就不做分析了,但是我鼓励您试验一下。Robocode 中的 sample 包还提供了许多其他机器人的代码。随着您设计机器人的水平的提高,机器人的代码主体将充分增长。对这些代码的一种模块化处理方法是把代码分解成独立的 Java 类,然后通过打包器把这些 Java 类打包成一个单独的包(JAR 文件),并将它包括在您的机器人分发包内。Robocode 将自动在它的 robots 目录下的包里找到 robot 类。任何人都可以创建 Robot 子类并添加用于构建机器人的新功能。Robocode 提供了一个叫做 AdvancedRobot 的 Robot 子类,它允许异步 API 调用。虽然对 AdvancedRobot 类的描述超出了本文的范围,但我鼓励您在掌握了基本的 Robot 类的操作后,试验一下这个高级类。 
我们这学期期末考试就要以这个为基础设计一个坦克,然后一起比赛,如果有心者希望能设计你们的代码,我试着运行你们的代码,试试谁是冠军,谢谢大家的参与!!!!!!!!!!!