
软件工程设计课程设计报告.doc
18页. .. . 学号2013-2014学年 第二学期1008210138《软件工程设计》课程设计报告题目:自主模式匹配攻击双坦克运动规划程序设计专业:计算机科学与技术班级:10级(2)班:项莹莹学号:1008210138指导教师:王源成绩:计算机与信息工程系2014年5月24日目 录1.绪论 32. 开发环境介绍 33.课程设计的目的与要求 43.1 课程设计目的 43.2 课程设计的实验环境 43.3 课程设计的预备知识 43.4 课程设计主要容 44.系统分析 54.1可行性分析 54.1.1技术可行性 54.1.2经济可行性 54.2需求分析 55.课程设计容 75.1 程序中的主要方法、变量和函数 75.2程序具体设计 75.3游戏主窗口 115.3.1游戏数据的输入以及运行 115.3.2游戏数据的输出以及保存 146.设计体会与小结 157.参考文献 158.源程序 15.. .. .. .. 1.绪论Java是一种简单的,跨平台的,面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。
当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的存空间,使得程序员不用再为存管理而担忧Java 不同于一般的编译执行计算机语言和解释执行计算机语言它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性目前,Java语言不仅是一门被广泛使用的编程语言,而且已成为软件设计开发者应当掌握的一门基础语言因为很多新的技术领域都涉及到Java语言,国外许多大学已将Java语言列入本科教学计划,而IT行业对Java人才的需求也在不断的增长,因此,掌握Java已经成为共识2. 开发环境介绍Robocode 是2001年7月在美国IBM 的Web 站点alphaWorks 上公开的机器人(其图形为坦克的形状) 战斗仿真引擎。
与通常玩的游戏不同的是:你必须利用Java 对机器人动作进行编程,给机器人设计的智能来自动指挥它, 而不是由键盘鼠标来控制它不管你是初学者还是顶级程序员,你都可在Robocode 的世界中找到旗鼓相当的对手把你写的机器人放到战场中,在与别人编写的机器人的战斗中考验自己的编程水平在不断的完善过程中你将体会到学习所带来的无穷乐趣当你的机器人融入了你的思想你将会发现你已经打开了Java编程甚至任何编程语言的大门由于Robocode 是基于Java 而产生的软件,所以它也具备了Java“一处编写,到处运行”的特点Robocode 这个游戏为全世界的Java 开发者实现这个愿望,它把游戏风潮变成了教学工具,Robocode的小东西有着巨大的能量,Robocode 是一个比较上瘾的游戏,人们对它的上瘾程度令人吃惊战场是机器人之间进行战斗直至分出胜负的场地主要的仿真引擎被置于其中,并且允许您在这里创建战斗、保存战斗以及打开新建的或现有的战斗通过界面区域的控件,您可以暂停或继续战斗、终止战斗、消灭任何机器人个体或获取任何机器人的统计数据图2中三个机器人活动的地方就是战场此外,在编译器界面下您可以通过菜单调用Robot Editor,它是Robocode本身自带的Java 语言编辑器,这个编辑器是发挥你创意的所在。
它可以用于编辑生成机器人的 Java 源文件3.课程设计的目的与要求3.1 课程设计目的《JAVA面向对象程序设计》是计算机科学与技术专业的必修专业基础课程,其实践性、应用性很强实践教学环节是必不可少的一个重要环节本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA面向对象程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学容的理解和掌握,使学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础3.2 课程设计的实验环境JAVA程序设计语言及相应的集成开发环境,J2SDK和Robocode开发工具3.3 课程设计的预备知识熟悉JAVA语言以及Robocode软件3.4 课程设计主要容坦克大战游戏是在Robocode环境下编程的游戏,其中包括对坦克移动策略的编写、坦克射击策略的编写、坦克模式匹配策略的编写、构造函数的编写等等游戏主要实现的功能有:(1).坦克可以随机移动;(2).坦克可以根据模式匹配策略射击敌方坦克;(3).坦克可以按照一定的策略的发子弹;(4).我方坦克打败敌方坦克时,会显示爆炸效果并消失;(5).我方坦克被击中后,会显示爆炸效果;4.系统分析4.1可行性分析4.1.1技术可行性Robocode软件使用面向对象设计语言JAVA技术实现,这已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现使用这些技术是可行的。
Robocode软件为你处理好一切细节你所做就是为你的机器人坦克编写智能程序,让它能够移动、进攻、防御、躲避、开火而它的对手就是跟你一样其他程序员编写机器人程序这就是Robocode魅力所在,最简单,只用几十行代码,就能立刻创造出一个简单但完整机器人,你可以立即将它装入Robocode 引擎中,再从Robocode 自带的那些水平不一的示例机器人中选取一个进行一番对战你可以不停的修改你的程序,设计新射击模型、躲避模型、移动模型,当你打败了那些示例机器人,你还可以在网上下载由其他程序员编写的水平更高的机器人,与它们比试一下,看看自己的水平到底如何开发Robocode,也是一个极佳的学习Java 语言的过程对于初学者来说,这是学习各种基本语法好途径:类,方法,事件处理等等当你入门之后,需要进一步提高机器人的“智力”水平,就需要使用更好的策略:如何预测对手的行动路线,如何躲避对手的攻击......你不得不创建更多类来应对更多情况,你将学习使用接口、继承等等Java 高级语言特性随着你的机器人的“智力”水平的提高,你的编程能力也就跟着水涨船高了4.1.2经济可行性本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务,从而增加收入,若使用者寥 寥无几,将再次分析是否重新策划软件或者放弃开发,以减少损失。
硬件要求也比较低,系统安装最小环境要求:CPU:Pentium2/400MHz 以上存:64MB 以上硬盘:10M 以上4.2需求分析利用Robocode软件的编译器,将所有游戏的元素都在此界面上表现出来界面中包含我方坦克、敌人坦克、双方坦克的生命值、比赛的速度、比赛的回合等坦克:坦克分为两种:我方坦克和敌方坦克我方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放,这些都可以在程序中设计坦克之间不能穿越,碰撞到后自动调换方向墙:游戏中的边界王家的坦克和敌人的坦克都不能越过,坦克的子弹也不能穿过我方的坦克要满足离墙不能太近,而且如果要过去这一点,我需要的用方向要满足不能和当前正在运动的方向相差太少,意思就是说,方向要变多些,不能看起来跟没改变差不多,也不能向着敌人冲过去运动方式:随机运动,这种运动方式主要用来混乱敌人的预测爆炸:当子弹射击到对方坦克身上时,要产生爆炸效果子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以根据雷达觉察到敌人时有所动作机器人保持与敌人成30度倾向角自身成 90 度角静止并逐渐接近目标。
如果机器人觉察到能量下降介于 0.1 和 3.0 之间(火力围),那么机器人就立即切换方向,向左或向右移动直到碰到障碍物就消失敌方坦克受到子弹多次攻击后会爆炸从而导致死亡,死亡后坦克消失我方受到子弹攻击后会减少寿命,此时如还有敌方坦克存在,则我方输掉本次游戏战场:战场是机器人之间进行战斗直至分出胜负的场地主要的仿真引擎被置于其中,并且允许您在这里创建战斗、保存战斗以及打开新建的或现有的战斗通过界面区域的控件,您可以暂停或继续战斗、终止战斗、消灭任何机器人个体或获取任何机器人的统计数据getBattleFieldWidth()和getBattleFieldHeight()可以得到当前这一回合的战场尺寸射击策略:射击策略主要思路是用一个800长度的数组来纪录一个直线提前量每个记录点都记录从自己子弹到敌人这段时间(子弹假定能量为3,敌人假定为不动,虽然这样不精确,但是也只能这样,你知道敌人怎样动?如果知道你还计算啥?) 需要射击时,寻找一个历史中(所有以前的记录节点中)完成了累加的,而且与目前的预测角度值最相似的记录节点(也就是以预测角度值最相似就视为运动方式最相似),那么,敌人以后的运动因该和历史中的那段运动情况很相似(也就是历史重现)。
找到了历史要重现的地方了,那么用那段历史中的平均预测角度值作为射击角度射击,这种射击方式就是寻找历史中和你现在运动相似的情况,所以如果我方坦克的运动有规律的话,敌方坦克能很好的找出我方坦克下一步会怎样走,那么,我方坦克被命中的几率就很大,这也正是采用随机运动的原因5.课程设计容5.1 程序中的主要方法、变量和函数getX( ) , getY( )捕捉机器人的坐标setMaxVelocity( )设置机器人最大的运动速度setAhead( )让机器人向前移动一定距离setTurnRightRadians( )向右随机的旋转机器人setTurnGunRightRadians( )向右随机的旋转火炮setTurnRadarRightRadians( )向右随机的旋转雷达反射镜setBodyColor( )设置车身的颜色setGunColor( )设置炮管的颜色setRadarColor( )设置雷达的颜色setBulletColor( )设置子弹的颜色setAdjustGunForRobotTurn()控制火炮是否向下锁定setAdjustRadarForGunTurn()控制雷达是否向下锁定double firePower设置坦克火力的大小double linearPredictionAngle计算需要射击的角度double distToWall检查坦克离墙壁的最短距离static double[][] pattern存储所有关于敌人的信息 public void run()坦克运动函数public double angle_180( double ang )设置坦克的转动角度的函数5.2程序具体设计因为Robocode软件自带图形用户界面的游戏窗口,所以就不需要另外设计游戏窗口了。
游戏的运行也是自动完成的,只需要在游戏开。
