我们可以使用三种方式调试Robocode:
1. 通过输出监视程序
这是最简单高效的调试方法,在你的代码中加入System.out.println(…)或System.error.println(…),并通过输出监视你的代码。
所有的系统输出都会输出到Robocode的监视器中,在战场上,点击屏幕右侧某个坦克名称按钮,你可以打开Robocode监视器:
2. 通过DEGUG方式进行调试
搞Java的都知道,可以在Eclipse中打断点,以便Debug。我们如果想要Debug自己的坦克,只需要打上断点,然后以Debug方式启动Robocode就OK了。
3. 通过在战场上绘制进行调试
这是Robocode最有特色的调试方式,通过这种方式,你可以达到如下调试效果:
每次我都被jk.mega.DrussGT这个坦克(上图中间黄色的那家伙)所震撼!这个坦克是我从网上下载下来的。上图中的DrussGT坦克向屏幕上绘制了以坦克为圆心的园,绘制了预期对方的运动轨迹,绘制了敌方子弹可能覆盖的范围(深蓝色线)。DrussGT坦克实在是非常聪明,非常强大!它沿着优美的弧线快速移动,别人几乎无法摸到他,但同时,它又能根据对手的运动方向和速度预期对手的运动轨迹,并进行带有提前量的攻击!
也许这些都和我们今天要说的无关。我想说的只是,屏幕上纷繁的调试线条,是如何绘制的。
其实并不复杂。在Robot类中,有一个事件方法叫做onPaint(Graphics2D g)。我们可以在这个方法中,利用该方法传入的Graphics2D对象在战场上进行绘图。如下坦克实现了当发现对手时,标出对手的位置以及在自己和对手之间画一条直线:
最终效果如下:
但要注意的是,在默认情况下,游戏是不开启onPaint事件的。要开启onPaint事件,需要你在监视窗口点击Paint按钮。