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

Robocode 机器人坦克游戏开发环境介绍     Robocode历史概况:    1995年,Mat Nelson进入IBM,开始接触JAVA。2000年,随着JAVA语言成熟,Mat Nelson这个狂热的玩家看到了创建这个他一直想玩的游戏的机会,着手开始创建Robocode。    2001年,IBM以 alphaWorks 下载的形式发布。    2008年1月,Robocode1.5.2 最新版本发布。源代码及安装文件下载: 阅读详情

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

时间

robocode的时间单位为”轮”(turn)。因此,在描述移动速度时,单位为”像素每轮”(pixels/turn)。“轮”是独立于真实时间的抽象时间单位。游戏速度越快,单位时间内执行的轮数就越多。

image

在Robocode提供的类中,许多类都提供了getTime()方法。该方法返回从该局开始到现在或事件发生时的轮数。如在我们自己写的坦克类中,我们可以通过this.getTime()取得代码执行到该行时的时间。又如,在雷达扫描到目标事件发生时,会调用方法:

onScannedRobot(ScannedRobotEvent event)

该方法的参数event代表了扫描到目标事件。因此我们可以使用event.getTime()获得事件发生的时间。

移动速度和加速度

在robocode中,坦克不会是匀速移动的!因为在robocode中,有加速度的概念。总的来说,坦克的移动速度介于0-8之间。robocode会自动管理速度。例如:坦克从一点移动到另一点的过程一般是:  开始移动-加速-减速-停止。我们可以通过Robot.getVelocity()方法取得坦克当前移动速度。

除了坦克有移动速度外,子弹也有移动速度,只不过子弹的移动速度是匀速的。在Robot类中,有两个用于射击的方法:

void fire(double power) //以指定的能量开火

Bullet fireBullet(double power)  //以制定的能量开火,并返回子弹对象

这里要说的是,开火时的能量越高,子弹移动速度越快。Robocode API中提供了一个Rules类,这里面包含了许多常量以及一些静态方法。 我们可以使用Rules.getBulletSpeed(double bulletPower)根据能量计算子弹速度。

方向及转向

Robocode中,”朝向”是一个绝对概念,就像我们现实生活中的“东南西北一样”。在Robot类中,提供了获得Body、Gun、Radar朝向的方法:

getHeading() //取得Body朝向

getGunHeading() //取得Gun朝向

getRadarheading() //取得Radar朝向

image

在本系类的第一节我们就介绍了坦克的转向方法,现将与转向相关的API截图如下:

image

如果你想做一个“见着就打”的坦克,实际上再简单不过:

首先,在run方法的循环中,只写一行语句: turnGunLeft(20), 这样你的坦克就会不停地旋转炮塔,而雷达会随着炮塔的旋转一同旋转,一旦目标处于雷达正前方,onScannedRobot方法会被触发。在onScannedRobot方法中,你只需要this.fire(1) 就可以了。不过,这样的坦克在战场上生存能力是很有限的,因为:

1. 该坦克不移动,会成为“活靶子”

2. 该坦克无法命中移动目标,除非瞎猫碰着死耗子

对于车身来说,转向的速度不总是相同的,这跟坦克当前速度有关,速度越快,转向越慢(跟我们开车一样,当过弯的时候,需要减速)。车身的转向速度最快为10度/turn。

对于炮塔和雷达,转向速度是固定的,分别为:20度/turn 和 45度/turn。

能量、生命、GunHeat

在我玩的这个Robocode版本中,已经废除了生命的概念。此版本的规则是: 开炮和被对手击中需要耗费能量,击中对手会获得能量,当能量耗尽时,坦克就死了。

开炮的能量为0-3之间的double值。开炮能量越大,GunHeat越大,GunHeat需要一段时间才能冷却,冷却后,我们才能再次开炮。因此,开炮的能量越大,开炮的威力越大,开炮间隔越长。反之亦然。

下面列出一些规则公式:

  • 每次击中回复能量: 3*firepower
  • 火炮过热(gunHeat) : 1 + firepower/5 ;
  • 如果火炮过热(gunHeat>0)则不能开炮。
  • 在游戏开始时所有的坦克都是过热的。
  • 给对手造成伤害: 4*firepower
  • 附加伤害: 如果firepower>1 ,附加伤害=2*(power-1)
  • 能量补充: 当你击中对手,你会获得3 * power能量补充

碰撞

碰撞到别的坦克,或者碰撞到边界,都会使自己的速度立减为零,而且会有不同程度的伤害。

碰撞: 双方0.6伤害.
撞墙: 1.2伤害

RobotCode2015:2015 年机器人代码 RobotCode2015 2015 年机器人代码 设置 为了在 eclipse 中构建代码和查看源代码没有错误,必须安装正确的 FRC 软件,并且必须将 WPI 库链接到项目。 按照以下说明为 Eclipse 安装 FRC 软件: : 克隆项目时,eclipse 可能会显示未绑定的类路径错误。 当 eclipse 找不到 WPI 库 JAR 文件时会发生这种情况,即使安装了正确的软件也可能会发生这种情况。 要解决此问题,请将缺少的 JAR 文件添加到类路径: 在 Eclipse 中右键单击项目并选择属性。 在属性窗口中选择 buildpath 并打开库选项卡。 更改 wpilib 和 networktables 的类路径变量以指向正确的 JAR 文件。 默认情况下,Windows 可以在 C:\users\[username]\wpilib\java\current\li 立即下载

相关推荐

robotcode2021:包含2021年FRC4139机器人的所有代码

不要擅自掌握 机械手代码2021 这是2021年机器人代码-2020年机器人代码的扩展。 请使用简洁明了的提交,以便人们可以了解您在做什么。 要从GitHub Desktop下载代码,请转到文件>克隆存储库> FRC4139 / robotcode2021。 将其存放在您会记得的地方。 要处理该代码,请启动先前安装的WpiLib VSCode,然后转到“文件”>“打开文件夹”,然后选择robotcode2021文件夹(不要双击它;单击它,然后单击“选择文件夹”)。 应对挑战的团队(建议的潜在客户加粗): 挑战一-Saatvik A. ,Kevin X. 挑战二-凯文X. ,卢卡斯C. 挑战三-卢卡斯C. ,大卫T.,瓦尔什尼G. 挑战四-David T. ,Taruni M.,Anagh S.,Pratham S.,Albert L. 挑战五-Dillion K. ,Grace L.

【亲测免费】 RobotCode:提升您的Robot Framework自动化测试体验

RobotCode:提升您的Robot Framework自动化测试体验 项目介绍 RobotCode是一款专为Visual Studio Code设计的扩展插件,它极大地增强了对Robot Framework的支持。此工具包提供了一站式的解决方案,包括自动补全、智能感知、运行及调试功能,助力您在VS Code中更高效地进行自动化测试开发。RobotCode旨在简化配置过程,优化编辑器环境,并支持...

gitblog_00382的博客 860

Robocode

Robocode 入门

【亲测免费】 RobotCode:为Visual Studio Code带来强大的Robot Framework支持

RobotCode:为Visual Studio Code带来强大的Robot Framework支持 项目介绍 RobotCode是一款专为Visual Studio Code(VS Code)设计的扩展,旨在为Robot Framework提供全面的支持。Robot Framework是一个通用的开源自动化框架,广泛应用于测试自动化和机器人流程自动化(RPA)。RobotCode通过集成丰富的...

gitblog_00254的博客 910

RobotCode2021:2021年家用挑战赛的机器人代码

机械手代码2021

robotcode编程游戏 Java 版

关于robotcode 的资料,可以帮助你了解robotcode 游戏编程以及 提高你的java编程能力,值得下载。

【亲测免费】 推荐项目:RobotCode——让你的Robot Framework编程体验飞升!

推荐项目:RobotCode——让你的Robot Framework编程体验飞升! 在自动化测试的星辰大海中,有一颗璀璨的新星正在升起,那就是专门为Visual Studio Code设计的RobotCode插件。这是一款旨在提升Robot Framework用户开发效率和代码质量的神器,让自动化测试工程师在编码旅程上如虎添翼。 项目介绍 RobotCode是针对Visual Studio Cod...

gitblog_00279的博客 1058

GemsRoboticsRobotCode2014:这是 2014 赛季的 gems 机器人代码

GemsRoboticsRobotCode2014 这是 2014 赛季的 gems 机器人代码

robocode机器人案例

1、游戏规则: 生命规则: ​ 相撞损失:撞到墙时,生命点损伤度=Math.abs (velocity) * 0.5 -1。撞到另一个坦克时,移动停止,生命点损失6点,扣除积分1.2分。 ​ 击中损失:当子弹能量为1时,我们生命点损失=4 * power,如果子弹能量大于1,那么我们的生命损失+= 2 * (power-1)。 ​ 发射损失:如果我们的子弹打中别的坦克...

weidajiangjiang的博客 2843

2020RobotCode2:第二个

2020RobotCode2:第二个

OCC入门指南:从零开始掌握Open CASCADE Technology

本文是Open CASCADE Technology(OCC)的入门指南,详细介绍了这款开源C++三维几何建模内核的核心概念与价值。内容涵盖从零开始搭建开发环境、编写第一个显示立方体的程序,到深入理解其几何与拓扑核心、掌握Draw测试工具及Handle内存管理等关键编程范式,旨在帮助开发者快速掌握这一工业级CAD/CAE/CAM应用开发利器。

java5的博客 1276

Robocode教程4——Robocode的游戏物理

Robocode/游戏物理 现在我们来了解Robocode的一些物理参数。 坐标系统:Robocode采用了笛卡尔坐标系统,也就是我们最常用的左下角为(0,0)点。这与通常的java与c++编程有所区别。 方向约定: 【绝对方向系】:Robocode中不管机器人在哪个方向都是以静态战场屏幕为参照物的绝对角度(Heading),正上方为0度角。即是向北为0,向东为90,向南为180,向西

for_nothing的专栏 1101

Vue3实战:从零构建ElementPlus后台管理系统全流程

本文详细介绍了从零开始使用Vue3和ElementPlus构建后台管理系统的全流程。内容涵盖环境准备、项目初始化、Vite配置、SCSS样式体系搭建、ElementPlus组件库引入与配置,以及封装可复用的SvgIcon组件进行图标管理,旨在帮助开发者快速搭建现代化、可维护的中后台应用。

weixin_29011239的博客 160

Robocode扩展开发指南:如何创建自定义机器人类型和游戏规则

Robocode是一款基于Java的机器人战斗编程游戏,允许开发者通过编写代码创建智能机器人,在虚拟战场上进行自动对战。本文将详细介绍如何扩展Robocode,创建自定义机器人类型和游戏规则,帮助你打造独一无二的机器人战斗体验。 ## 自定义机器人类型开发基础 ### 机器人接口体系 Robocode提供了多层次的机器人接口,位于`robocode/robotinterfaces/`目录下,

gitblog_01133的博客 527

生物信息学名词解释 | K-mer (长度为k的短序列)

K-mer 何谓K-mer 所谓Kmer,即为一段长度为k的DNA片段,是由测序reads剪切一部分得到的。k为一个奇数,k=几,就为几mer。 比如:我的测序reads长度为100bp,我将这100bp打断成17bp的短片段,打断后的17bp段片段就叫17mer,可以获得(100-17+1)条k-mer序列。 Table1 k-mers for GTAGAGCTGT. k k-mers 1 G,T,A,G,A,G,C,T,G,T 3 GTA,TAG,AGA,GAG,AGC,GCT,CT

qq_50637636的博客 2万+

CentOS7下快速修复libssl.so.1.1缺失问题(附腾讯云镜像加速下载)

本文详细介绍了在CentOS7系统中快速修复libssl.so.1.1缺失问题的工程化实践方案。通过编译安装OpenSSL 1.1.x版本、配置动态链接器及创建符号链接等步骤,有效解决共享对象文件缺失问题,并提供了腾讯云镜像加速下载的优化方案,帮助开发者高效部署现代应用。

weixin_33711647的博客 371

代码吃鸡:Python-Robocode

最近看到一个很有“未来感”的新闻:一辆特斯拉在拉斯维加斯出了车祸,撞“死”了一个……emmmm……机器人。不知道是意外还是炒作,又或者是这位机器人故意碰瓷,反正人们也无法从受害者口中了解“被特斯拉撞是怎样一种体验”了。图为受害者,情绪看起来很稳定随着“人工智能”的应用场景越来越多,此类新闻以后可能也会越来越频繁。但愿这些机器人们能严格遵守阿西莫夫三定律:机器人不得伤害人类个体,或者目睹人类个体将遭...

Crossin的编程教室 3770

【UML】第12篇 序列图(1/2)——基本概念和构成

序列图(Sequence Diagram)是一种用于显示对象之间交互的图形化表示。它描述了在特定场景下,对象之间按照时间顺序进行的消息传递和协作过程。在序列图中,对象被表示为带有垂直虚线的矩形,虚线表示对象的生命周期。对象之间的交互通过箭头表示的消息来表示,箭头从一个对象的生命线指向另一个对象的生命线,表示消息的发送和接收。

AI人人懂 3051

蓝鲸 CMDB 开放接口实战:find_host_biz_relations 查询主机业务归属关系

本篇技术指南聚焦蓝鲸智云配置平台(BlueKing CMDB)的开放接口 `find_host_biz_relations`,讲解如何根据主机 ID 批量查询主机与业务、集群、模块之间的归属关系,覆盖请求参数约束、调用与响应示例、底层数据表与核心调用链,帮助开发者在二次开发、主机盘点与业务拓扑对账场景中准确使用该接口。 ## 接口概述:从网关路径到内部实现 `find_host_biz_rel

gitblog_00959的博客 933

手把手教你学Simulink--单相逆变器模糊逻辑控制策略仿真

本文介绍了在Simulink中设计单相逆变器模糊逻辑控制策略的完整流程。主要包括:1)构建单相逆变器模型;2)使用FuzzyLogicToolbox设计模糊控制器,定义输入输出变量和模糊规则;3)将控制器集成到Simulink模型;4)添加干扰源和示波器;5)配置仿真参数并分析结果。该方法利用模糊控制处理非线性系统的优势,可实现输出电压的精确跟踪,具有良好的鲁棒性。文中提供了详细的步骤说明和示例代码,强调准确设计隶属函数和规则库对控制性能的关键作用。该仿真设计为电力电子控制系统的开发提供了有效支持。

MHD0815的博客 203

YOLOv11改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

实时检测器架构的轻量级设计GsConv。

Limiiiing的博客 2313

Robocode机器人类型对比:从Robot到AdvancedRobot的进化之路

Robocode是一款极具挑战性的编程游戏,玩家通过编写Java代码控制虚拟机器人在战场上战斗。本文将深入解析Robocode中最核心的机器人类型,帮助新手理解从基础Robot到高级AdvancedRobot的功能进化,掌握不同类型机器人的适用场景与实战技巧。 ## 一、基础机器人:Robot类的核心能力 Robot类是所有机器人的基础,提供了最核心的移动、转向和射击功能。通过继承`Robot

gitblog_00492的博客 937

FAST-LIVO2 源码精读(五):IMU 运动模型、离散传播与去畸变原理

本文是「FAST-LIVO2 激光-惯性-视觉里程计源码精读」专栏第五篇,数学基础篇章(第 4–7 篇)的第二篇。上一篇在 SO(3) 流形上建立了姿态表示与右扰动模型;本篇聚焦 IMU 预积分的核心问题:一帧激光扫描横跨约 100 ms,帧内每一个点的采集时刻各不相同,如何利用 200 Hz 的 IMU 量测将全帧点云统一对齐到帧末时刻?答案完整封装在(587 行)的函数中,本篇逐段拆解其四阶段逻辑,并推导协方差矩阵随误差状态转移矩阵F_x逐帧演化的物理含义。

PX4-SLAM-PNC 158
上一篇: 教你玩Robocode(3) —— 坦克基础知识
下一篇: 魅力何来?
Model_CZ
博客等级 码龄19年 223粉丝 15原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值