教你玩Robocode(5)——调试技巧

Robocode进阶指南:用IDEA调试机器人战斗策略的5个技巧 本文是一份Robocode进阶指南,详细介绍了如何利用IDEA这一专业IDE的调试功能来优化机器人战斗策略。文章提供了5个核心技巧,包括搭建可调试的开发环境、使用条件断点优化雷达扫描与目标追踪、监控能量管理与射击决策变量、调试多机器人协同作战,以及构建自定义调试工具与自动化测试,旨在帮助开发者将直觉编程转变为数据驱动的精准优化。 阅读详情

我们可以使用三种方式调试Robocode:

1. 通过输出监视程序

这是最简单高效的调试方法,在你的代码中加入System.out.println(…)或System.error.println(…),并通过输出监视你的代码。

所有的系统输出都会输出到Robocode的监视器中,在战场上,点击屏幕右侧某个坦克名称按钮,你可以打开Robocode监视器:

image

2. 通过DEGUG方式进行调试

搞Java的都知道,可以在Eclipse中打断点,以便Debug。我们如果想要Debug自己的坦克,只需要打上断点,然后以Debug方式启动Robocode就OK了。

3. 通过在战场上绘制进行调试

这是Robocode最有特色的调试方式,通过这种方式,你可以达到如下调试效果:

image

每次我都被jk.mega.DrussGT这个坦克(上图中间黄色的那家伙)所震撼!这个坦克是我从网上下载下来的。上图中的DrussGT坦克向屏幕上绘制了以坦克为圆心的园,绘制了预期对方的运动轨迹,绘制了敌方子弹可能覆盖的范围(深蓝色线)。DrussGT坦克实在是非常聪明,非常强大!它沿着优美的弧线快速移动,别人几乎无法摸到他,但同时,它又能根据对手的运动方向和速度预期对手的运动轨迹,并进行带有提前量的攻击!

也许这些都和我们今天要说的无关。我想说的只是,屏幕上纷繁的调试线条,是如何绘制的。

其实并不复杂。在Robot类中,有一个事件方法叫做onPaint(Graphics2D g)。我们可以在这个方法中,利用该方法传入的Graphics2D对象在战场上进行绘图。如下坦克实现了当发现对手时,标出对手的位置以及在自己和对手之间画一条直线:

最终效果如下:

Shows some paintings (a red line and square) on the battleview, where the robot debug.Tracker has spotted the sample.Crazy robot

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

robocode机器人比赛中胜率高达90%的代码 robocode机器人比赛中胜率高达90%的代码,在大赛中获过奖,机器本身还可以变颜色。 立即下载

相关推荐

robocode智能坦克代码

2002 robocode Rumble中级组冠军代码,可以直接import

RoboCode 参考代码

借鉴博客大佬资源 胜率还可以 学校选拔赛取前五 此机器人排名第六 写之记录 package SLTeam; import java.awt.*; import java.awt.geom.*; import java.util.*; import java.util.List; import robocode.*; import robocode.util.*; public c...

查尔多哈的博客 7333

robocode攻略与源码

Robocode是2001年7月在美国IBM 的Web alphaWorks上发布的坦克机器人战斗仿真引擎。与通常玩的游戏不同的是:参赛者必须利用对机器人进行编程,给机器人设计智能来自动指挥它,而不是由键盘、鼠标简单地直接控制。Robocode是一种有趣的竞赛性编程,使用几行简单的代码,就能够让你创建一个活生生的机器人,一个真正的在屏幕上与其他机器人互相对抗的机器人。你可以看到它在屏幕上四处疾驰,碾碎一切挡道的东西。机器人配有雷达与火炮,选手在躲避对手进攻的同时攻击对手,以此来较量得分的多少。Robocode可以让你在娱乐的同时学习与提高Java技术。

世界robocode机器人的四大运动方式分析

世界robocode机器人的四大运动方式分析

alain的专栏 5638

一段robocode经典代码

一段robocode经典代码,教你如何编写robocode

robet 代码

五个IBM.Robocode世界大赛冠军机器人 java代码 代码设计合理 功能强大

Robocode Rumble: 冠军的技巧

Robocode Rumble: 冠军的技巧 Rumble 冠军揭示胜利的机器人背后的策略

alain的专栏 7922

固定翼飞行器建模(二)——MATLAB/Simulink建模、配平及线性化

MATLAB/Simulink固定翼建模、配平及线性化。

2302_80148937的博客 1万+

如何快速入门Robocode:5步创建你的第一个战斗机器人

Robocode是一款极具趣味性的编程游戏,它允许你通过编写Java代码来创建自主战斗机器人,并在虚拟战场上与其他机器人一决高下。本教程将带你快速入门,只需5个简单步骤,即可打造属于你的第一个Robocode战斗机器人。 ## 1. 准备开发环境 首先,你需要准备好Robocode的开发环境。按照以下步骤操作: 1. 确保你的电脑上已经安装了Java开发工具包(JDK)。 2. 克隆Robo

gitblog_00422的博客 927

测试丢包_电信IPRAN承载LTE业务丢包故障处理案例

银川 景旭阳电信IPRAN承载LTE业务丢包故障处理案例一.故障现象某地市IPRAN网络承载LTE基站业务,客户反馈近期丢包严重,基站侧ping侧核心网EPC丢包达到10%左右;且基站数量在10个左右,并分布在同一地区,需要IPRAN网络协助排查;随后查看了IPRAN网络;发现这些业务所在基站的PW-BFD历史告警存在频繁的UP/DOWN告警;综上信息展开故障处理,初步判断由于BFD频繁...

weixin_29740921的博客 1912

Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

【代码】Java全栈AI视频生成开发实战:从DeepSeek接入到剪映自动化(附完整源码)

weixin_39169967的博客 4150

终极Robocode教学指南:如何用编程游戏激发学生学习兴趣的5个技巧

Robocode是一款创新的编程教学游戏,它通过机器人对战的方式让编程学习变得有趣而富有挑战性。这款教育编程工具将复杂的编程概念转化为直观的游戏体验,让学生在学习Java或Kotlin编程的同时,培养算法思维和问题解决能力。无论你是编程新手还是经验丰富的开发者,Robocode都能提供独特的编程学习体验。 ## 🤖 什么是Robocode编程游戏? Robocode是一款基于Java的编程游

gitblog_01046的博客 473

S4 Hana SD -信贷管理 - 02

在S4版本中,客户的信用管理数据在事务代码BP维护,业务伙伴角色是UKM000。在维护过程中,我们并不能直接输入信贷控制范围这个组织架构,而是需要输入一个信用段,并且在信用段的维度下去维护相应信用管理数据。对于信用段,可以分为主信用段(信用段是0000)和其他临时信用段,我们可以通过配置把次级信用段的客户信贷负债汇总到主信用段。当然,在后台也有配置,会把信用段和信贷控制范围这两者进行关联.3.2SPROIMG > 财务供应链管理 > 信用管理 > 信贷风险监视 > 主数据 > 创建信用段。

weixin_46525734的博客 1968

Decap CMS 多语言支持实战:decap-cms-locales 包全解析与界面翻译定制指南

本文以 Decap CMS 仓库中的 `decap-cms-locales` 包及其 [CHANGELOG](https://link.gitcode.com/i/5254b50ab8d685e77e13d2fc7a102190) 为主线,系统讲解 Decap CMS 内置多语言机制的底层原理与实操方法。你将掌握:语言包在仓库中的组织方式、如何通过 `registerLocale` 注册/覆盖语言

gitblog_00272的博客 446

MATLAB出现”警告: 名称不存在或不是目录“的解决方案

MATLAB出现 警告: 名称不存在或不是目录 的解决方案1. 出现错误2. 问题解释3. 解决方法4. 特殊情况5. 问题解决6. 多多点赞交流 1. 出现错误 打开MATLAB突然发现,出现下面的错误: 提示我们不存在这样的路径。 2. 问题解释 这样的错误很明显,我们曾经在预设路径中添加了这个文件夹。 在某种情况下,我们把它删除了,现在MATLAB找不到它了。 (这里我在桌面上添加了新建文件夹,然后将其添加到MATLAB的搜索路径中。之后把新建文件夹删除了,所以就会出现这样的报错) 3. 解决方法

qq_18820125的博客 5万+

信息收集-服务器信息

服务器上面可以运行大量的系统服务和第三方应用服务,如果操作系统或者第三方软件没有及时升级打补丁,攻击者就有可能直接通过服务器上运行的服务进行攻击。

weixin_49349476的博客 1446

在Eclipse下开发Robocode(转)

在Eclipse下开发Robocode(转)2006-07-19 21:30     如果您还不知道什么是Eclipse,请参考这篇文章http://www.loujing.com/Article/ShowArticle.asp?ArticleID=30,或者网上相关资料。    如果您还不知道什么是Robocode,请参考这篇文章http://www.loujing.com/Arti

scut_robocode 1349

Open3D(C++) 点云构建三维Delaunay三角剖分

C++版本的Open3D实现从点云构建三维Delaunay,可视化效果。

点云侠的博客 2247

只有程序员才会玩的游戏

前言这些游戏恐怕只有程序员才会玩了。不信?往下看!Nazo Game这是一个在线解谜游戏,画风简洁,部分关卡需要具备一定的web知识。url地址直接访问,打开浏览器调试等...

守望的博客-编程珠玑 2993

深入解析逆时偏移(RTM)算法及其在C++中的实现

逆时偏移(Reverse Time Migration, RTM)是一种高级地震成像技术,广泛应用于地震勘探中。RTM通过逆时传播波场来构建地震子波,能够提供更高分辨率和更精确的地下构造图像。本文将详细介绍RTM的基本原理,并通过C++代码示例,深入解析如何实现和优化RTM算法。希望这篇文章能够为地球物理学家和C++开发者提供有价值的参考。

qq_38334677的博客 1529

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Robocode教程1——安装、运行、配置

Robocode 的安装 系统安装最小环境要求: CPU:Pentium2/400MHz以上 内存:64MB以上 硬盘:10M以上 对硬件要求也不是完全绝对的,你用小的机器配置,带来的是比较慢的运行速度。当然具备以上硬件条件后,还要具有Java运行环境,需Java JDK 1.3以上,如果您没有安装JDK,去Java.sun.com下载/并正确安装配 置J2SDK. 安装

dawnsun2013的专栏 9910

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

推荐几个只有程序员才会玩的游戏

点击蓝色“五分钟学算法”关注我哟加个“星标”,一起学算法作者 | 守望先生来源 | 编程珠玑前言今天周六,分享几个游戏给大家。不过,这些游戏恐怕只有程序员才会玩了。不信?...

程序员吴师兄的博客 5189

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: 魅力何来?
下一篇: WEB三层架构与MVC
Model_CZ
博客等级 码龄19年 223粉丝 15原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值