《坦克大战设计.pdf》由会员分享,可在线阅读,更多相关《坦克大战设计.pdf(48页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、湖北大学大二Java课程设计湖北大学湖北大学J J A A V V A A课课 程程 设设 计计 论论题题目目 坦克大战游戏坦克大战游戏姓姓名名 张诚张诚 学学号号 2014221119200156 2014221119200156姓姓名名 柳谦柳谦 学学号号 2014221119200091 2014221119200091专业年级专业年级计算机科学与技术计算机科学与技术 14011401指导教师指导教师 王雷春王雷春 职职称称副教授副教授20162016 年年 5 5 月月计科 1401文文湖北大学大二Java课程设计目录目录绪论 . 41 背景 . 42 课程设计目标及目的 . 52.1
2、 课程设计的目标 . 52.2 课程设计的目的 . 52.3 可行性分析 . 52.3.1 技术可行性 . 52.3.2 经济可行性分析 . 63 概要设计 . 64 详细设计 . 74.1 项目与类的结构图 . 74.2 各类实现的功能概要. 74.2.1 barrier 包 . 74.2.2 lightButton 包 . 74.2.3 Tankwar 包 . 74.2.4 mapediter 包 . 84.3 主要类的的 UML 图及主要成员变量和函数说明. 84.3.1 Barrier 类 . 84.3.2 LightButton 类 . 114.3.3 Mapediter 类 . 1
3、34.3.4 Main 类 . 154.3.5 Boom 类 . 184.3.6 Item 类 . 184.3.7 Missle 类 . 214.3.8 PanelShow 类 . 254.3.9 Tank 类 . 264.3.10 TankWar 类. 335 运行结果 . 396 总结 . 467 参考文献 . 468 附录 . 47坦克大战坦克大战计科 1401湖北大学大二Java课程设计摘要坦克大战是一款最初由日本南梦宫 Namco 游戏公司 1985 年在任天堂 FC 平台上,推出的一款多方位平面射击游戏。一经推出,人气十分高涨,然后又陆续推出了 GB,PC 等版本,玩法也大大扩充,
4、由最初的单人 2D 过关演变到如今的多人 3D 联网对战游戏, 我们小时候应该都体验过,之前 C#课程中已经了解过有关信息,如今就想同样以Java 为载体编写一款坦克大战。本课题展示了如何使用 Java 编写出能够实际运行的单人版坦克大战游戏。课题介绍了项目的功能、类的设计和逻辑难点等重要点。通过本课题,你可以了解到有关 Java 开发在实际运用中的基础知识、并对应用游戏开发有一定的新的认识。计科 1401湖北大学大二Java课程设计绪论绪论Java 是由 Sun Microsystems 公司推出的 Java 面向对象程序设计语言。Sun 公司在推出 Java 之际就将其作为一种开放的技术。
5、 全球数以万计的 Java 开发公司被要求所设计的 Java软件必须相互兼容。其官方定义是:“Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、 多线程和动态的语言。”。其一经推出,就获得了众多程序员的青睐,发展至今已有21 年的历史,仍然是当今最受追捧得的变成语言之一。我们已经初步了解了 Java 的有关知识,想切身体验一下 Java 编程语言的特点,同时老师也要求我们完成课程设计, 加上回想起小时候玩过的坦克大战游戏,于是就有了此设想。1 1 背景背景2015 年 11 月编程语言排行榜中,Java 语言仍然在持续上涨,其份额已经达到了 20%占据
6、榜首。加上基于 java 开发的安卓手机系统是当今无可置疑的市场第一位,同时互联网也发展迅速,而在 web开发领域,java 也处于领导地位,当前很长一段时间之内,java 编程语言的前途十分光明,我们很有必要掌握这门技术。同时人们对游戏的热情经久不衰, 而其中坦克大战作为一个推出已有 10 余年的游戏,其活力仍不减当年,至今仍有各种各样版本的坦计科 1401湖北大学大二Java课程设计克大战在各大平台上运行。于是我们便想运用 java 开发一个简单的坦克大战游戏。2 2 课程设计目标及目的课程设计目标及目的2.12.1 课程设计的目标课程设计的目标运用 Java 编程语言,编写出能够实际运行
7、的单人坦克大战游戏2.22.2 课程设计的目的课程设计的目的1.了解 Java 应用游戏的开发基础2.获取有关 Java 编程开发的实际知识3.锻炼自身动手实践能力4.切身体验 Java 编程开发步骤5.于动手操作过程中验证所学知识2.32.3 可行性分析可行性分析2.3.12.3.1 技术可行性技术可行性我们设计的坦克大战入门版并没有什么高深的技术难题,尚未涉及到联网等事件,经查阅资料,我们认定,补充部分课堂外的知识,自身完全能够制作一个简单的坦克大战。计科 1401湖北大学大二Java课程设计2.3.22.3.2 经济可行性分析经济可行性分析本组制作的坦克大战为入门版游戏,网上资源比较丰富
8、,书籍图书馆也有收藏,除需花费一定时间外,无需其他经济支出,故较容易实现3 3 概要设计概要设计坦克大战入门板关于界面敌人坦克子弹绘制碰撞检测主界面玩家坦克坦克绘制开火逻辑界面显示游戏对象图形绘制游戏逻辑实现本程序是一个有趣且富有挑战性的 2D 单人游戏。本游戏为彩色界面,有主菜单,选择菜单等功能,其中主菜单包含有 Start,Map,Help,Abort,Exit 五个选项。 游戏过程中,玩家操纵己方坦克摧毁敌方坦克保卫己方家园以获得分数奖励。坦克大战帮助界面游戏道具道具绘制升级设置界面背景绘制计科 1401湖北大学大二Java课程设计4 4 详细设计详细设计4.14.1 项目与类的结构图项
9、目与类的结构图barrierTankwarmapediter4.24.2 各类实现的功能概要各类实现的功能概要4.2.1 barrier4.2.1 barrier 包包Barrierlei 类:描述素材的基本属性及排布方法EnemyBorn 类:描述敌人出生点Gold 类:描述金块障碍物Home 类:描述基地Iron 类:描述铁块障碍物SelfBorn 类:描述自身出生点Wall 类:描述砖块障碍物lightButton4.2.2lightButton4.2.2lightButton 包包LightButton 类:实现初始界面的按钮动态点击效果,按下有下凹质感且亮度变化4.2.3Tankwa
10、r4.2.3Tankwar 包包Help 类:主界面 help 按钮呼出文本显示框Boom 类:爆炸判定,效果显示计科 1401湖北大学大二Java课程设计Item 类:随机掉落物品奖励Main 类:游戏主界面Missle 类:炮弹运行PanelShow 类:右边统计栏信息Tank类:坦克基本属性,行动方式Tankwar类:游戏运行主界面4.2.4 mapediter4.2.4 mapediter 包包Mapediter 类:查看地图,编辑新地图并检验地图是否合乎规则,保存地图。4.34.3 主要类的的主要类的的 UMLUML 图及主要成员变量和函数说明图及主要成员变量和函数说明4.3.1 B
11、arrier4.3.1 Barrier 类类BarrierSIZE:intx:inty:inthp:intface:ImageIcon计科 1401湖北大学大二Java课程设计Barrier(int,int)draw(Graphics):voidgetFace():ImagegetHp():intgetX():intgetY():intsetFace(Image):voidsetHp(int):voidsetX(int):voidsetY(int):void主要成员变量含义SIZE:int障碍物方块大小计科 1401湖北大学大二Java课程设计 x:int障碍物 x 坐标 y:int障碍物 y
12、 坐标hp:int障碍物的血量face:Image障碍物贴图主要成员函数Barrier(int,int)draw(Graphics):voidgetFace():ImagegetHp():intgetX():intgetY():intsetFace(Image):voidsetHp(int):voidsetX(int):voidsetY(int):void含义障碍物的坐标素材绘制返回贴图返回血量值返回 x 坐标返回 y 坐标插入贴图赋予血量值赋予 x 坐标赋予 y 坐标计科 1401湖北大学大二Java课程设计4.3.2LightButton4.3.2LightButton 类类LightBu
13、ttonshadowOffsetX:floatshadowOffsetY:floatshadowColor:colorshadowDirection:intnormalButton:ImagenormalButtonPressed:ImagebuttonHighlight:ImageshadowDistance:intsourceInsets:InsetsbuttonDimension:DimensionbuttonForeground:colorbuttonForeground:fontLightButton(string)LightButton(int,int,int,int,string
14、)LightButton(Action)LightButton()loadImage(String):ImagecomputeShadow():voidgetImage(boolean):Image计科 1401湖北大学大二Java课程设计paintComponent(Graphics):voidtileStretchPaint(Graphics,Insets):voidJComponent,BufferedImage,主要成员变量shadowOffsetX : floatshadowOffsetY : floatshadowColor : ColorshadowDirection : int
15、normalButton : ImagenormalButtonPressed : ImagebuttonHighlight : ImageshadowDistance : intsourceInsets : InsetsbuttonDimension : DimensionbuttonForeground : ColorbuttonFont : Font含义阴影向 x 偏移量阴影向 y 偏移量按钮背景颜色投影方向原始图片过度图片修改后图片阴影距离透明度高度及宽度按钮文字颜色字体含义构建按钮按钮参数设置主要成员函数LightButton(String)LightButton(int,int,i
16、nt,int, String)LightButton(Action)计科 1401定义变化湖北大学大二Java课程设计LightButton()tileStretchPaint(Graphics,JComponent,Insets):void加载动态效果绘制动态效果BufferedImage,4.3.3Mapediter4.3.3Mapediter 类类2.dit 类MapEditCOLS:intROWS : intf : JDialogp : JPanelbut : ButtonXimage : Imagepp : JPanelbutLoad : JButtonbutSave : JButt
17、onbutExit : JButtonfs : FileNameExtensionFilterfc : JFileChooser计科 1401湖北大学大二Java课程设计m : MainMapEdit(Main)actionPerformed(ActionEvent):void主要成员变量含义COLS : int地图行数ROWS : int地图列数f : JDialog对话框p : JPanel面板容器地图载体but : ButtonX更改处的方块image : Image素材图片pp : JPanel面板容器对话框载体计科 1401湖北大学大二Java课程设计butLoad : JButto
18、n原地图按钮butSave : JButton保存按钮butExit : JButton退出按钮m : Main新地图主要成员函数MapEdit(Main)actionPerformed(ActionEvent):void含义主函数构建地图检验新地图是否合乎规则,否则输出提示框4.3.4Main4.3.4Main 类类Mainf : JFramep : PanelXbutStart : LightButtonbutEdit : LightButtonbutHelp : LightButtonbutAbort : LightButtonbutExit : LightButton计科 1401湖北
19、大学大二Java课程设计width : intheight : intset : JDialoghelp : Helpabout : Abortmap : Stringmax : intstyle : intMain()main(String):voidover():voidactionPerformed(ActionEvent):voiddialog():voidsetF(JFrame):voidgetF():JFrame主要成员变量含义计科 1401湖北大学大二Java课程设计f : JFramebutStart : LightButtonbutEdit : LightButtonbutH
20、elp : LightButtonbutAbort : LightButtonbutExit : LightButtonwidth : intheight : inthelp : Help开始界面框架开始游戏按钮编辑地图按钮帮助栏按钮关于信息栏按钮退出按钮界面长度界面宽度Help 信息栏主要成员函数Main()main(String):voidover():voidactionPerformed(ActionEvent):voiddialog():void含义构造开始界面主方法构造界面界面渐大效果鼠标监听确定程序走向构造游戏开始前设置界面计科 1401湖北大学大二Java课程设计4.3.5Bo
21、om4.3.5Boom 类类主要成员变量y : intx : intcount : intboom : ImageIcon含义爆炸位置横坐标爆炸位置纵坐标爆炸效果演变计数图片y : intx : intcount : intboom : ImageIconlive : booleanBoom(int, int)drawBoom(Graphics):voidrun():voidisLive():booleanBoom计科 1401湖北大学大二Java课程设计live : boolean主要成员函数Boom(int, int)drawBoom(Graphics):voidrun():voidisL
22、ive():void爆炸是否进行含义位置绘制爆炸效果控制变化过程向后进行判定是否爆炸4.3.6 Item4.3.6 Item 类类Itemr : Randomx : inty : intstyle : intface : Imagelive : booleanflash : booleantanks : ArrayListbooms : ArrayList计科 1401湖北大学大二Java课程设计home : Homeirons : ArrayListItem(ArrayList, ArrayList,ArrayList, Home)draw(Graphics)run():voiduse(Ta
23、nk):voidhomeP(int, int):voidsetLive(boolean):voidisLive():boolean主要成员变量r : Randomx : inty : intface : Imagelive : boolean含义随机生成数横坐标纵坐标游戏素材图片是否存在计科 1401湖北大学大二Java课程设计tanks : ArrayListbooms : ArrayListhome : Homeirons : ArrayList主要成员函数Item(ArrayList,ArrayList,ArrayList, Home)draw(Graphics):voidrun():v
24、oiduse(Tank):voidhomeP(int, int):void坦克爆炸基地添加素材图片含义添加素材绘制效果判断是否被坦克吃掉为坦克添加效果4.3.7 Missle4.3.7 Missle 类类Missle计科 1401计科 1401湖北大学大二Java课程设计x : inty : intspeed : intdir : Directionlive : booleanSIZE : intself : booleanallTanks : ArrayListbooms : ArrayListwalls : ArrayListirons : ArrayListgolds : ArrayLi
25、sthome : Homepower : intMissle(int, int, Tank, ArrayList,ArrayList, ArrayList,ArrayList, Home, ArrayList,ArrayList)run():voidsetLive(boolean):voidisLive():booleandrawMissle(Graphics):void湖北大学大二Java课程设计getX():intgetY():int主要成员变量x : inty : intspeed : intdir : Directionlive : booleanSIZE : intallTanks
26、: ArrayListbooms : ArrayListwalls : ArrayList含义横坐标纵坐标移动速度移动方向是否存活大小坦克爆炸砖块障碍物计科 1401湖北大学大二Java课程设计irons : ArrayListgolds : ArrayListhome : Homepower : int铁块障碍物金块障碍物基地攻击力主要成员函数Missle(int,int,Tank,ArrayList,ArrayList,ArrayList,ArrayList,ArrayList,ArrayList,ArrayList)run():voidsetLive(boolean):voidisLiv
27、e():booleandrawMissle(Graphics):void含义添加元素运动方法炮弹出现是否存活绘制炮弹计科 1401湖北大学大二Java课程设计4.3.8 PanelShow4.3.8 PanelShow 类类PanelShowscore : intselfCount : intenemyCount : intenemy : ImageIconself : ImageIconbg : ImageIconsetScore(int):voidsetSelfCount(int):voidsetEnemyCount(int):voidpaintComponent(Graphics):vo
28、id主要成员变量score : intselfCount : intenemyCount : int含义分数己方坦克剩余数量敌方坦克剩余数量计科 1401湖北大学大二Java课程设计enemy : ImageIconself : ImageIconbg : ImageIcon敌方坦克贴图己方坦克贴图背景贴图主要成员函数setScore(int):voidsetSelfCount(int):voidsetEnemyCount(int):voidpaintComponent(Graphics):void含义计算分数计算己方剩余坦克计算敌方剩余坦克显示界面4.3.9 Tank4.3.9 Tank 类
29、类TankSIZE : inthpMax : intx : inty : inthp : intlevel : int计科 1401计科 1401湖北大学大二Java课程设计style : intpower : intspeed : intdir : DirectionmyPlane_U : ImageIconmyPlane_R : ImageIconmyPlane_D : ImageIconmyPlane_L : ImageIconup : booleanleft : booleanright : booleandown : booleanself : booleanlive : boole
30、anallTank : ArrayListwalls : ArrayListirons : ArrayListgolds : ArrayListhome : Homemissles : ArrayListnoFire : longbooms : ArrayList计科 1401湖北大学大二Java课程设计fireTime : longisProtect : booleangetDir()DirectionTank(int, int, boolean, ArrayList,ArrayList, ArrayList,ArrayList, ArrayList, Home,ArrayList, int
31、)re():voiddrawTank(Graphics):voidmove():voidkeyPress(KeyEvent):voidkeyReleased(KeyEvent):voidnoMove(int, int):booleanfire():voidprotect():voidsetUp(boolean):voidsetLeft(boolean):voidsetRight(boolean):voidsetDown(boolean):voidsetDir(Direction):void湖北大学大二Java课程设计getX():intgetY():intisSelf():booleanset
32、Hp(int):voidgetHp():intsetLive(boolean):voidisLive():booleansetX(int):voidsetY(int):voidsetNoFire(long):voidgetNoFire():longgetPower():intgetLevel():intsetLevel(int):voidsetProtect(boolean):voidisProtect():boolean主要成员变量SIZE : inthpMax : int含义大小生命值计科 1401湖北大学大二Java课程设计x : inty : inthp : intlevel : in
33、tstyle : intpower : intspeed : intdir : DirectionmyPlane_U : ImageIconmyPlane_R : ImageIconmyPlane_D : ImageIconmyPlane_L : ImageIconlive : booleanallTank : ArrayList横坐标纵坐标当前生命等级坦克种类火力攻击速度方向上行坦克贴图右行坦克贴图下行坦克贴图左行坦克贴图是否存活所有坦克计科 1401湖北大学大二Java课程设计walls : ArrayListirons : ArrayListgolds : ArrayListhome :
34、 Homemissles : ArrayListbooms : ArrayListfireTime : longisProtect : boolean砖块障碍物铁块障碍物金块障碍物基地炮弹爆炸攻击速度是否无敌主要成员函数getDir()Tank(int,int,boolean,ArrayList,ArrayList,ArrayList,ArrayList,ArrayList,ArrayList ,含义获得行进方向添加对象计科 1401湖北大学大二Java课程设计ArrayList, int)re():voiddrawTank(Graphics):voidmove():voidkeyPress(
35、KeyEvent):voidkeyReleased(KeyEvent) :voidnoMove(int, int):booleanfire():voidprotect():voidsetUp(boolean):voidsetLeft(boolean):voidsetRight(boolean):voidsetDown(boolean):voidsetDir(Direction):voidgetX():intgetY():intisSelf():booleansetHp(int):voidgetHp():intsetLive(boolean):voidisLive():boolean计科 140
36、1重新开始游戏绘制坦克坦克移动按键按下按键复位是否开火无敌道具生效上行左行右行上行坦克的移动方向设置得到坦克的游戏坐标 X得到坦克的游戏坐标 y在对象集合中判断是否是玩家赋予 hp 值获得 hp 值设置坦克的生命值判断坦克是否存在湖北大学大二Java课程设计setX(int):void设置坦克的游戏坐标 XTankWarsetY(int):voidsetNoFire(long):voidgetNoFire():longgetPower():intgetLevel():intsetLevel(int):voidsetProtect(boolean): voidisProtect():boolea
37、n设置坦克的游戏坐标 Y设置坦克开火的冷却时间得到坦克开火的冷却时间得到火力数值得到等级数值设置坦克的等级坦克获得无敌状态判断坦克是否处于无敌状态4.3.10 TankWar4.3.10 TankWar 类类计科 1401湖北大学大二Java课程设计TIMEOUT : booleanf : JFramegamePanel : JPanel计科 1401messgePanel : PanelShowp : myPanelmyTank : TankAREA_WIDTH : intAREA_HEIGHT : intmissles : ArrayListallTanks : ArrayListboom
38、s : ArrayListwalls : ArrayListirons : ArrayListgolds : ArrayListitems : ArrayListenemyBorns : ArrayListselfBorn : SelfBornhome : HomeenemyTank : Tankr : RandombackGround : ImageIconmap : String计科 1401湖北大学大二Java课程设计tankMax : intover : booleanselfMax : intwin : booleanflash : booleantw : TankWarSCORE
39、: intmainF : JFramestyle : intTankWar(String, int, JFrame, int)init():voidkeyTyped(KeyEvent):voidkeyPressed(KeyEvent):voidkeyReleased(KeyEvent):voidaI(Tank):voidinitMap(File):voidaddTank():voidaddMyTankLives():voidover():voiddrawOver(Graphics):void主要成员变量TIMEOUT : booleanf : JFramegamePanel : JPanelm
40、essgePanel : PanelShowmyTank : TankAREA_WIDTH : intAREA_HEIGHT : intmissles : ArrayListallTanks : ArrayListbooms : ArrayListwalls : ArrayListirons : ArrayListgolds : ArrayListitems : ArrayListenemyBorns:ArrayListselfBorn : SelfBornhome : HomeenemyTank : Tankr : RandombackGround : ImageIconmap : Stri
41、ngtankMax : intover : booleanselfMax : intwin : booleanSCORE : intmainF : JFrame计科 1401自身出生点基地敌方坦克随机数控制敌方坦克行动背景图片地图敌方数量游戏是否结束自身生命数量是否胜利分数游戏界面湖北大学大二Java课程设计主要成员函数TankWar(String,JFrame, int)init():voidkeyTyped(KeyEvent):voidkeyPressed(KeyEvent):voidkeyReleased(KeyEvent):voidaI(Tank):voidinitMap(File):
42、voidaddTank():voidaddMyTankLives():voidover():void计科 1401含义int,构成游戏运行界面初始化键盘输入键盘按下键盘复位敌方坦克行动模式地图读取增加场上坦克数量加血设定游戏结束判定湖北大学大二Java课程设计drawOver(Graphics):void游戏结束画面5 5 运行结果运行结果主界面开始运行结果计科 1401湖北大学大二Java课程设计Start 复选界面计科 1401湖北大学大二Java课程设计地图制作界面计科 1401湖北大学大二Java课程设计计科 1401湖北大学大二Java课程设计Help 信息栏界面:Abort 信息栏
43、界面:计科 1401湖北大学大二Java课程设计游戏进行界面:计科 1401湖北大学大二Java课程设计游戏结束界面计科 1401湖北大学大二Java课程设计6 6 总结总结在开发的过程中,本小组遇到了不少问题,各种开发包的缺少,严谨的各种参数合理的设置, 解决开发中遇到的 bug 等等,但是经过上网搜索和自己尝试,终于解决了问题。在这个过程中,不仅积累了知识,学会了团结合作,更重要的是学会了寻找信息的方法,对于日后的学习大有帮助。由于能力不足,尚有很多设想未能实现,比如过关的游戏模式,boss 的加入等等,我们将继续深入学习 java,不断完善游戏的模式。7 7 参考文献参考文献1.Java
44、 2 实用教程清华大学出版社 20112.Java 游戏编程科学出版社 20043.Java 游戏编程原理与实践教程人民邮电出版社 20134.韩顺平_循序渐进学 java_从入门到精通_课件_笔记_坦克大战全过程 http:/ 1401湖北大学大二Java课程设计http:/ 8 附录附录1.小组分工.docx2.代码文件:tankedanzhan1srcbarrierBarrier.javatankedanzhan1srcbarrierEnemyBorn.javatankedanzhan1srcbarrierGold.javatankedanzhan1srcbarrierHome.java
45、tankedanzhan1srcbarrierIron.javatankedanzhan1srcbarrierSelfBorn.javatankedanzhan1srcbarrierWall.javatankedanzhan1srclightButtonLightButton.javatankedanzhan1srcmapediterMapEdit.javatankedanzhan1srctankwarAbort.javatankedanzhan1srctankwarBoom.javatankedanzhan1srctankwarHelp.javatankedanzhan1srctankwarItem.java计科 1401湖北大学大二Java课程设计tankedanzhan1srctankwarMain.javatankedanzhan1srctankwarMissle.javatankedanzhan1srctankwarPanelShow.javatankedanzhan1srctankwarPanelShow.javatankedanzhan1srctankwarTank.javatankedanzhan1srctankwarTankWar.java计科 1401