教你玩Robocode(5)——调试技巧
我们可以使用三种方式调试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)——调试技巧相关推荐
- 教你玩Robocode(1)
最近在上网时发现了一个叫做Robocode的游戏.最近我已经对它上瘾了.Robocode官方网站上对Robocode的介绍: Robocode is a programming game, where ...
- 教你玩Robocode(4)——规则系统
理解Robocode的规则系统,你才能写出更好的坦克.许多规则在Robotcode的Roles类中进行了描述.为了便于大家理解,本文对各种规则参数进行详细叙述. 时间 robocode的时间单位为&q ...
- 教你玩 Robocode(2) —— 使用Eclipse开发Robot
上篇文章对Robocode进行了简单的介绍.本文主要介绍如何使用Eclipse开发Robot. 主要步骤如下: 1. 在Eclipse中,创建一个Java项目. 2. 把Robocode库添加到bui ...
- robocode调试技巧
robocode调试技巧 最初玩robocode的朋友可能会埋怨robocode不好编辑.调试,其实虽然robocode做得很简单,可是它还是给我们提供了很多扩充的功能.只要善于利用,调试roboco ...
- 轻松制作GIF动画!教你玩转PS时间轴之5个小技巧篇
通过前两篇文章,我们已经知道制作动画的基本知识的和技巧,下面通过5个非常有用的知识点跟大家更深入地探索PS时间轴.文末附上PSD,可以下载后自行分析动画技巧. 往期回顾: <新手指南!手把手教你 ...
- 轻松制作GIF动画!教你玩转PS时间轴之进阶技巧篇
上一篇文章跟大家讲过PS时间轴的基础,接下来跟大家分享制作简单GIF动画的一些技巧,(文字动画.颜色渐变.咻一咻动画.模糊动画.旋转时钟以及变化的月亮等等),文章提到的动画都有提供打包下载,想学时间轴 ...
- 安卓玩机搞机技巧综合资源----手机各种代码 查询信息 开启端口 调试选项【十】
接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 [一] 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your de ...
- Xcode的调试技巧
转自:http://www.cnblogs.com/daiweilai/p/4421340.html#biyouji 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Glob ...
- iOS调试技巧(转载)
IOS各种调试技巧豪华套餐(转载) 目录 前言 逼优鸡 知己知彼 百战不殆 抽刀断Bug 普通操作 全局断点(Global BreakPoint) 条件断点(Condational Breakpoin ...
最新文章
- MySQL图形处理软件Navicat字体配置(乱码解决)
- 壁布接缝压条_墙布压条样板
- 文巾解题 8. 字符串转换整数 (atoi)
- Java栈 Stack
- 关于datediff(year,开始日期,结束日期)中year格式的说明,特别注意year两边不能加引号,否则报错...
- 2008中国软件企业出口(外包)20强
- (2021) 18 [代码讲解] 可执行文件
- Java ArrayList isEmpty()方法与示例
- android 下一步,在Android上单击“软键盘下一步”时,移至另一个EditText
- Leetcode 129. 根到叶子结点数字之和
- Centos7中修改Hostname的方法
- 类似纪念碑谷的unity2d素材包_《纪念碑谷》:引领小清新风格的2.5D插画风游戏...
- c#高级编程第11版 pdf网盘_C#高级编程第11版 - 概述
- EasyAR+ZXing实现UnityAR二维码扫描
- 矩阵论(四)——矩阵的广义逆
- python读书心得体会范文_读书心得体会范文5篇
- 名片 - 名片设计的比例
- 有限新息率FRI信号模型
- 音频质量评价体系那些事
- 带你了解什么是MySQL数据库(六)索引原理,如何建立与使用索引
热门文章
- 博客网站软件需求分析说明书-软件工程作业
- CHOPS 音乐驱动动画2
- JNI字段描述符Ljava/lang/String;
- c# skylin 创建图片标注出现png透明边缘覆盖后面元素解决办法
- 2万字系统总结,带你实现 Linux 命令自由?
- php mysql 点餐系统_laravel实现点餐系统,快来点餐吧!
- 随谈时代更迭,以及互联网时代和人工智能时代
- css浮动布局自适应,CSS 几种常用自适应布局
- 数字银行的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 在上海软件行业,我见到的年入50万的众生相——我们该如何努力从而达到这个目标...