我们可以使用三种方式调试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对象在战场上进行绘图。如下坦克实现了当发现对手时,标出对手的位置以及在自己和对手之间画一条直线:

public class MyRobot extends Robot{
//存储最后发现敌人的坐标:
int scannedX = Integer.MIN_VALUE;
int scannedY = Integer.MIN_VALUE;
public void run() {
//让雷达不停旋转
while (true) {
turnRadarRight(360);
}
}
// 当雷达发现敌人时执行此方法
public void onScannedRobot(ScannedRobotEvent e) {
// 计算目标的夹角
double angle = Math.toRadians((getHeading() + e.getBearing()) % 360);
// 计算目标坐标
scannedX = (int)(getX() + Math.sin(angle) * e.getDistance());
scannedY = (int)(getY() + Math.cos(angle) * e.getDistance());
}
// 在战场上绘制目标的位置和自己和目标的连接线:
public void onPaint(Graphics2D g) {
g.setColor(new Color(0xff, 0x00, 0x00, 0x80));
g.drawLine(scannedX, scannedY, (int)getX(), (int)getY());
g.fillRect(scannedX - 20, scannedY - 20, 40, 40);
}
}

最终效果如下:

但要注意的是,在默认情况下,游戏是不开启onPaint事件的。要开启onPaint事件,需要你在监视窗口点击Paint按钮。

教你玩Robocode(5)——调试技巧相关推荐

  1. 教你玩Robocode(1)

    最近在上网时发现了一个叫做Robocode的游戏.最近我已经对它上瘾了.Robocode官方网站上对Robocode的介绍: Robocode is a programming game, where ...

  2. 教你玩Robocode(4)——规则系统

    理解Robocode的规则系统,你才能写出更好的坦克.许多规则在Robotcode的Roles类中进行了描述.为了便于大家理解,本文对各种规则参数进行详细叙述. 时间 robocode的时间单位为&q ...

  3. 教你玩 Robocode(2) —— 使用Eclipse开发Robot

    上篇文章对Robocode进行了简单的介绍.本文主要介绍如何使用Eclipse开发Robot. 主要步骤如下: 1. 在Eclipse中,创建一个Java项目. 2. 把Robocode库添加到bui ...

  4. robocode调试技巧

    robocode调试技巧 最初玩robocode的朋友可能会埋怨robocode不好编辑.调试,其实虽然robocode做得很简单,可是它还是给我们提供了很多扩充的功能.只要善于利用,调试roboco ...

  5. 轻松制作GIF动画!教你玩转PS时间轴之5个小技巧篇

    通过前两篇文章,我们已经知道制作动画的基本知识的和技巧,下面通过5个非常有用的知识点跟大家更深入地探索PS时间轴.文末附上PSD,可以下载后自行分析动画技巧. 往期回顾: <新手指南!手把手教你 ...

  6. 轻松制作GIF动画!教你玩转PS时间轴之进阶技巧篇

    上一篇文章跟大家讲过PS时间轴的基础,接下来跟大家分享制作简单GIF动画的一些技巧,(文字动画.颜色渐变.咻一咻动画.模糊动画.旋转时钟以及变化的月亮等等),文章提到的动画都有提供打包下载,想学时间轴 ...

  7. 安卓玩机搞机技巧综合资源----手机各种代码 查询信息 开启端口 调试选项【十】

    接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 [一] 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your de ...

  8. Xcode的调试技巧

    转自:http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Glob ...

  9. iOS调试技巧(转载)

    IOS各种调试技巧豪华套餐(转载) 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoin ...

最新文章

  1. MySQL图形处理软件Navicat字体配置(乱码解决)
  2. 壁布接缝压条_墙布压条样板
  3. 文巾解题 8. 字符串转换整数 (atoi)
  4. Java栈 Stack
  5. 关于datediff(year,开始日期,结束日期)中year格式的说明,特别注意year两边不能加引号,否则报错...
  6. 2008中国软件企业出口(外包)20强
  7. (2021) 18 [代码讲解] 可执行文件
  8. Java ArrayList isEmpty()方法与示例
  9. android 下一步,在Android上单击“软键盘下一步”时,移至另一个EditText
  10. Leetcode 129. 根到叶子结点数字之和
  11. Centos7中修改Hostname的方法
  12. 类似纪念碑谷的unity2d素材包_《纪念碑谷》:引领小清新风格的2.5D插画风游戏...
  13. c#高级编程第11版 pdf网盘_C#高级编程第11版 - 概述
  14. EasyAR+ZXing实现UnityAR二维码扫描
  15. 矩阵论(四)——矩阵的广义逆
  16. python读书心得体会范文_读书心得体会范文5篇
  17. 名片 - 名片设计的比例
  18. 有限新息率FRI信号模型
  19. 音频质量评价体系那些事
  20. 带你了解什么是MySQL数据库(六)索引原理,如何建立与使用索引

热门文章

  1. 博客网站软件需求分析说明书-软件工程作业
  2. CHOPS 音乐驱动动画2
  3. JNI字段描述符Ljava/lang/String;
  4. c# skylin 创建图片标注出现png透明边缘覆盖后面元素解决办法
  5. 2万字系统总结,带你实现 Linux 命令自由?
  6. php mysql 点餐系统_laravel实现点餐系统,快来点餐吧!
  7. 随谈时代更迭,以及互联网时代和人工智能时代
  8. css浮动布局自适应,CSS 几种常用自适应布局
  9. 数字银行的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  10. 在上海软件行业,我见到的年入50万的众生相——我们该如何努力从而达到这个目标...