Robocode系统实训项目实施方案.doc_第1页
Robocode系统实训项目实施方案.doc_第2页
Robocode系统实训项目实施方案.doc_第3页
Robocode系统实训项目实施方案.doc_第4页
Robocode系统实训项目实施方案.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Robocode系统实训项目实施方案一、项目Robocode简介 Robocode是一位IBM的工程师Mat Nelson用Java语言所创造的机器人战斗仿真引擎。Robocode不是一个完整游戏,它是个半成品,你所做的就是为你的机器人坦克编写智能程序,让它能够移动、进攻、防御、躲避、开火。只用几十行代码,就能立刻创造出一个简单但完整机器人,你可以立即将它装入Robocode 引擎中,再从Robocode 自带的那些水平不一的示例机器人中选取一个进行一番对战,还可以在网上下载由其他程序员编写的水平更高的机器人,与它们比试一下,看看自己的水平到底如何。 开发Robocode,也是一个极佳的学习Java 语言的过程。随着你的机器人的“智力”水平的提高,你的编程能力也就跟着水涨船高了。 二、项目目标通过Robocode系统的开发,要求学生:1、 进一步熟练java面向对象编程方法的设计与实现;2、 如何编写Java代码,如何处理Java中的事件,如何创建内部类;3、 全面实践软件工程项目,总结系统开发的基本方法与步骤;并就开发过程中遇到的问题以及解决的方法进行总结与归纳。三、具体实施通常玩的游戏不同的是:参赛者必须利用对机器人进行编程,给机器人设计智能来自动指挥它,而不是由键盘、鼠标简单地直接控制。Robocode是一种有趣的竞赛性编程,使用几行简单的代码,就能够让你创建一个活生生的机器人,一个真正的在屏幕上与其他机器人互相对抗的机器人。你可以看到它在屏幕上四处疾驰,碾碎一切挡道的东西。机器人配有雷达与火炮,选手在躲避对手进攻的同时攻击对手,以此来较量得分的多少。Robocode可以让你在娱乐的同时学习与提高Java技术。1、游戏安装 Robocode项目已经成为开源项目,Robocode可以 在Robocode首页下载 首页:/ (本项目教师已经下载完毕)提取自中国Robocode第一人,Wave技术的创始人iiley所写的Cigaret机器人中。,进入了解Robocode。/projects/robocode/files/ 下载Robocode在安装过程中,Robocode 将问您是否要使用这个外部的 Java VM 来编译机器人。您也可以选择使用作为 Robocode 分发包一部分而提供的 Jikes 编译器。2、游戏界面与基本角色当激活 Robocode 时,将看到两个相关的 GUI 窗口,这两个窗口构成了 Robocode 的 IDE:* 战场* Robot Editor 战场是机器人之间进行战斗直至分出胜负的场地。主要的仿真引擎被置于其中,并且允许在这里创建战斗、保存战斗以及打开新建的或现有的战斗。通过界面区域内的控件,可以暂停或继续战斗、终止战斗、消灭任何机器人个体或获取任何机器人的统计数据。此外,可以在此屏幕上激活 Robot Editor。Robot Editor 是一个定制的文本编辑器,它可以用于编辑生成机器人的 Java 源文件。在它的菜单里集成了 Java 编译器(用于编译机器人代码)以及定制的 Robot 打包器。由 Robot Editor 创建并成功编译的所有机器人都会处于战场上一个部署就绪的位置。(高手认为它所提供的文本编辑器不怎么好,最后还是用jb来编辑,只要在Requird Libraries 加入解压缩后的robocode.jar就可以了)Robocode 里的每个机器人都由一个或多个 Java 类构成。这些类可以被压缩成一个 JAR 包。为此,Robocode 的最新版本提供了一个可以在战场 GUI 窗口中激活的“Robot Packager”。图 2. 对 Robocode 机器人的详细分析Robocode 机器人是一个图形化的坦克,请注意,机器人有一门可以旋转的炮,炮上面的雷达也是可以旋转的。机器人坦克车(Vehicle)、炮(Gun)以及雷达(Radar)都可以单独旋转,也就是说,在任何时刻,机器人坦克车、炮以及雷达都可以转向不同的方向。缺省情况下,这些方向是一致的,都指向坦克车运动的方向。3、平台参数方向 - 整个战场是以屏幕正上角为0度,按顺时针排列,90,180,270.。 位置 - 整个战场的坐标是以屏幕左下角为原点,高为Y坐标,宽为X坐标。 距离 - 游戏中规定的距离是以像素(Pixels)点为单位,如果你把屏幕缩小了,那就是以缩小后的像素点为单位,反之就是放大后的像素点为单位。 时间 - 游戏中规定的时间是以帧(frame)或滴答(ticks)(有点像时钟滴答),或时间周期(turns),或单独的时间片(simply timeslices)为单位。 回合 比赛回合是比赛中由用户自己设置的比赛次数,默认值为10。 帧速 - 默认为30。 扫描 - 默认为无。 声音 - 默认为无。 4、游戏规则: (1)生命规则: 相撞损失:撞到墙时,生命点损伤度=Math.abs (velocity) * 0.5 -1。撞到另一个坦克时,移动停止,生命点损失6点,扣除积分1.2分。 击中损失:当子弹能量为1时,我们生命点损失=4 * power,如果子弹能量大于1,那么我们的生命损失+= 2 * (power-1)。 发射损失:如果我们的子弹打中别的坦克,我们可以从子弹那窃取到3*power的能量。 (2)炮弹规则: 子弹能量:子弹能量是通过函数getPower()得到的。它大于等于0.1,小于等于 3。 子弹速度:每一颗子弹有着自身的速度,这在处理敌人向你开炮前的移动策略可是很有帮助的。子弹的速度也和它的能量有关: speed = 20 - 3 * power。由于能量范围在0.1到3之间我们可求得子弹的速度范围:11 = bullet speed = 19.7。 (3)炮管规则: 旋转速率:炮管在每一个时间周期内旋转速率=20 度/帧(frame) 炮管热量:当我们开火时,炮管产生的热量由子弹开火时的能量决定。即:热量=1+(firepower/5), 利用函数 getGunHeat()可以得到炮管当时的热量,只有当getGunHeat恒等于0时,我们才能再次发射子弹。 冷却度:有热度当然就有冷却度,不冷却我们的炮管会永远不会开火的。系统设定的默认冷却速度是0.1/tick(时间周期),我们可通过函数 getGunCoolingRate()得到这个参数值。 (4)雷达规则: 旋转速度:雷达以每时间周期45度的速度旋转。也即45 degrees/frame. 扫描面积: 雷达扫描是呈扇形的,它的开始位置到终止位置的长度大约为1200。只要我们放大屏幕可以通过眼睛估算出这个面积。 扫描排列:扫描到的数据有墙,目标,子弹等等。这些是按扫描距离来排列,从离雷达最近的物体开始到最后扫描到的物体。 (5)运行规则: 前进速度:坦克最大的速度(Velocity)为8,函数getVelocity()返回了坦克当前的速度。 加/减速度:加速度为 1 像素(pixel)/帧frame ,减速度为 2 pixel/frame。 参考公式: 设s为距离,Vt为终速度,Vo为初速度,t为时间,a为加速度: 位移公式 sVo*ta*t*t/2 速度公式 Vt Vo a*t 平均速度公式 v(Vt Vo)/2s/t 加速度公式 a(Vt Vo)/t (这些公式高一大家都学过吧?) (6)旋转规则: 旋转速度:机器人的旋转速度和当前的速度有关即旋转速度=10 - 0.75 * getVelocity()。 相互作用参数:雷达安装在炮上,炮安装在机器人上,它们会相互影响。如果我们向左转动炮管,而使雷达向右转动,那么雷达只会向右转动(45-20) =25度;如果两者都向右转动,雷达将向右转(45+20)=65度。同样的道理炮和机器人也是方向同相加,方向反相减。 5、积分规则: Robot Name - 机器人的名字; Total Scroe - 为这次比赛你的总共得分; Survival - 是你存活率的得分; Last Survivor Bonus:你是赢的次数相对对手的分红得分; Bullet Dmg:是你的子弹损失得分也即发射的子弹数的得分; Bonus:是子弹数的分红得分; Ram Dmg *2是你的撞击得分; Bonus:是你撞击得分分红; 最后两项Survival 1sts,是你赢的次数,不算做分数。 所有分数加起来就是你的总分。记住在联赛并不是总分越高越好,它是算综合平均分的。其中撞击分和子弹损失分就要越少越好。你如果观察两大高手比赛的记分牌,你会发现他们的Ram Dmg 和Ram Dmg中的Bonus一般都为0。 6、基本术语在细究API之前,让我们先来了解一些术语。机器人基本上是一些小型的坦克。这些坦克可以旋转,向前或向后移动。它们的顶部有一个用于射击的火炮。在火炮上面还有一个雷达系统,用于侦测其它机器人。机器人的底盘、火炮和雷达系统都可以独立运动,也可以相互“锁定”,一起移动。换句话说,如果将雷达向下锁定,那么它将随火炮一起移动;如果火炮向下锁定,它将随机器人的底盘一起移动。下面是一些你在编写机器人之初用的最多的方法函数: ahead(), back() 向前和向后移动 fire() 开火 setAdjustGunForRobotTurn() 控制火炮是否向下锁定 setAdjustRadarForGunTurn() 控制雷达是否向下锁定 turnRight(), turnLeft() 实现机器人的旋转 turnGunRight(), turnGunLeft() 旋转火炮 turnRadarLeft(), tu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论