基于java的游戏坦克大战学士论文.doc

上传人:仙人指路1688 文档编号:2387420 上传时间:2023-02-17 格式:DOC 页数:53 大小:588.50KB
返回 下载 相关 举报
基于java的游戏坦克大战学士论文.doc_第1页
第1页 / 共53页
基于java的游戏坦克大战学士论文.doc_第2页
第2页 / 共53页
基于java的游戏坦克大战学士论文.doc_第3页
第3页 / 共53页
基于java的游戏坦克大战学士论文.doc_第4页
第4页 / 共53页
基于java的游戏坦克大战学士论文.doc_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《基于java的游戏坦克大战学士论文.doc》由会员分享,可在线阅读,更多相关《基于java的游戏坦克大战学士论文.doc(53页珍藏版)》请在三一办公上搜索。

1、 目 录摘 要IABSTRACTII第一章 绪论11.1课题研究的背景11.2 课题研究的任务1第二章 系统分析22.1课题的可行性分析22.2 需求分析2第三章 系统总体设计33.1游戏总体流程设计33.2游戏界面设计4第四章 游戏详细设计64.1各个类的实现64.2 程序的详细设计7第五章 测试95.1 软件测试说明95.1.1 软件测试的目标95.1.2 软件测试的原则95.2 测试计划105.2.1 进行通过测试105.2.2 进行有效类测试105.3 测试用例10总 结10参考文献11致谢12附录一 坦克大战中的类 15附录二 坦克大战程序 31毕业设计(论文)原创性声明和使用授权说

2、明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。作 者 签 名: 日 期: 指导教师签名: 日期: 使用授权说明本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以

3、采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。作者签名: 日 期: 学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。作者签名: 日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和

4、借阅。本人授权 大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。涉密论文按学校规定处理。作者签名:日期: 年 月 日导师签名: 日期: 年 月 日指导教师评阅书指导教师评价:一、撰写(设计)过程1、学生在论文(设计)过程中的治学态度、工作精神 优 良 中 及格 不及格2、学生掌握专业知识、技能的扎实程度 优 良 中 及格 不及格3、学生综合运用所学知识和专业技能分析和解决问题的能力 优 良 中 及格 不及格4、研究方法的科学性;技术线路的可行性;设计方案的合理性 优 良 中 及格 不及格5、完成毕业论文(设计)期间的出勤情况

5、优 良 中 及格 不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范? 优 良 中 及格 不及格2、是否完成指定的论文(设计)任务(包括装订及附件)? 优 良 中 及格 不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义 优 良 中 及格 不及格2、论文的观念是否有新意?设计是否有创意? 优 良 中 及格 不及格3、论文(设计说明书)所体现的整体水平 优 良 中 及格 不及格建议成绩: 优 良 中 及格 不及格(在所选等级前的内画“”)指导教师: (签名) 单位: (盖章)年 月 日评阅教师评阅书评阅教师评价:一、论文(设计)质量1、论文(设计)的

6、整体结构是否符合撰写规范? 优 良 中 及格 不及格2、是否完成指定的论文(设计)任务(包括装订及附件)? 优 良 中 及格 不及格二、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义 优 良 中 及格 不及格2、论文的观念是否有新意?设计是否有创意? 优 良 中 及格 不及格3、论文(设计说明书)所体现的整体水平 优 良 中 及格 不及格建议成绩: 优 良 中 及格 不及格(在所选等级前的内画“”)评阅教师: (签名) 单位: (盖章)年 月 日教研室(或答辩小组)及教学系意见教研室(或答辩小组)评价:一、答辩过程1、毕业论文(设计)的基本要点和见解的叙述情况 优 良 中

7、 及格 不及格2、对答辩问题的反应、理解、表达情况 优 良 中 及格 不及格3、学生答辩过程中的精神状态 优 良 中 及格 不及格二、论文(设计)质量1、论文(设计)的整体结构是否符合撰写规范? 优 良 中 及格 不及格2、是否完成指定的论文(设计)任务(包括装订及附件)? 优 良 中 及格 不及格三、论文(设计)水平1、论文(设计)的理论意义或对解决实际问题的指导意义 优 良 中 及格 不及格2、论文的观念是否有新意?设计是否有创意? 优 良 中 及格 不及格3、论文(设计说明书)所体现的整体水平 优 良 中 及格 不及格评定成绩: 优 良 中 及格 不及格(在所选等级前的内画“”)教研室主

8、任(或答辩小组组长): (签名)年 月 日教学系意见:系主任: (签名)年 月 日第一章 绪论1.1课题研究的背景如今我们的生活节奏越来越快,每个人的生活压力也在不断变大,长期紧绷着神经容易产生心理和生理上的双重伤害,人们需要在工作和学习之外放松自己,玩玩游戏正是放松自己的方式之一。坦克大战,一个众所周知的小游戏,曾经在红白机时代风靡一时。其界面简单,耐玩,关卡多,可玩性高,没有局限的年龄层。Java是现在全球最时髦的开发工具之一,它拥有庞大且完善的类库,内置了其他语言需要靠库甚至是操作系统才能支持的功能,拥有一个虚拟机,总之,Java的出现,确实给整个程序界带来了巨大的冲击,也许现在还无法准

9、确评估Java为整个IT业带来的影响,但是有一点毋庸置疑Java将不可避免的影响一带程序员。使用Java作为开发工具,来做坦克大战这个小游戏,是一种很理性的选择。Java游戏可以在本地桌面系统下运行,也可以在Web浏览器下运行。我在大学四年中学到了很多计算机的知识,JAVA语言,软件工程,数据结构,软件工程等课程。如今我将用我所学的知识来完成一个坦克大战游戏,来锻炼自己的动手能力,独立作出一个小程序。1.2 课题研究的任务本文中所做的主要工作如下:(1) 介绍了制作坦克大战游戏的意义和目的。(2) 设计坦克大战游戏各个类,实现各类效果和目标。 (3) 分析并解决游戏中的若干技术问题。(4) 完

10、成坦克大战游戏,进行测试并分析结果.第二章 系统分析2.1课题的可行性分析1、课题要求(1)与实践活动和相关的文件和资料由教师提供。(2)本课题要求学生有熟练的Java开发能力,有较强的自学能力。(3)具体问题再做详细调查研究并与指导老师面谈。2、可行性分析技术可行性:游戏对机器没有多大要求,现在无论什么电脑,只要能安装J2SDK,就能在电脑上开发这款游戏。制作出来的游戏可以在本地桌面运行,也可在WEB上运行,现在JAVA语言非常成熟,完全能够完成这个游戏。经济可行性:开发这个游戏除了耗费自己的时间和精力以外,不需要其他的资金问题,完成后放到网上开放下载,无需任何费用,有兴趣的人可以自己下载来

11、玩。2.2需求分析 在游戏中需要实现的功能:(1)能够通过键盘自由控制坦克移动和发射子弹;(2)敌方坦克能够随机移动和随机发射子弹;(3)子弹和不同阵营坦克碰撞后会产生爆炸;(4)消灭敌方坦克后会有个计分板记录玩家得分(5)游戏进行到一半时可以暂停退出,下次打开游戏时选继续游戏可以继续之前的游戏。第三章 系统总体设计3.1 游戏总体流程设计开始新游戏时,先进行初始化,然后调用敌方坦克类和我方坦克类,实现键盘监听功能,战场显示所有坦克的移动,发射子弹。判断子弹和敌方坦克的碰撞,调用爆炸类,调用记录类,修改玩家总得分。图3.1 总体流程图3.2游戏界面设计(1)开始菜单界面左上角设置个游戏菜单,里

12、面含有“开始新游戏”、“继续游戏”、“存盘退出”、“退出游戏”这几个下拉选项,玩家可通过这些选项控制游戏的开始,存盘,与结束。图3.2 开始菜单 (2)战场 窗口中间是坦克大战的战场,里面显示敌我双方坦克,以及各自发出的子弹,坦克的一切行为都会显示在战场上。图3.3 战场 (3)坦克剩余数 战场正下方显示我方坦克剩余生命和敌方坦克剩余数量。图3.4 坦克剩余数 (4)玩家总成绩 战场右边显示玩家击毁敌方坦克所得到的的总成绩。图3.5 玩家总成绩第四章 游戏详细设计4.1各个类的设计(1) 坦克类是系统中最主要的一个类,坦克的属性:速度(X轴和Y轴速度),坦克的大小,坦克所在坐标,坦克的方向,坦

13、克存活与否。这些属性都有一个初始化值,游戏一开始就可以运行。 设计过程中,坦克出现的位置是由坦克的坐标而定。玩家的位置由键盘监听方向,按照指定方向以一定的速度前进这个速度是全局静态变量,当没有键盘控制的时候,坦克就会保持静止。敌方的坦克是用随机数来控制方向和路径的。通过TouchotherEnemy()来判断是否碰撞到别的敌方坦克。 我方坦克的方向和子弹发射都是由键盘来控制,所以在坦克类里用keypressed()方法来接受键盘的按键监听,接受到相应的信息后,例如接到X,则表示发射子弹,此时就要调用坦克类里的fire()方法。接受到方向键,则会对坦克坐标做出相应的变化。图3.1 坦克类图3.2

14、红色我方坦克 黄色敌方坦克(2) 子弹类需要依附坦克类,每个坦克都可以发射子弹,子弹的方向和速度都在子弹类里。当子弹碰到敌方坦克或跑出战场后,子弹线程便会结束。图3.3 子弹类图3.4 红色我方子弹 黄色敌方子弹(3)爆炸类是取决子弹类。每当子弹碰到敌方坦克时,子弹线程结束,并调用爆炸类,爆炸类会读取坦克即时的坐标,并用连续的三张图片显示出爆炸效果。 图3.5 爆炸类4.2 程序的其他设计(1)图形用户界面要用抽象窗口工具AWT和Swing来实现,在选择开始新游戏前,实现屏幕中央关数的闪屏效果。class StartPanel extends JPanel implements Runnabl

15、eint time=0;public void paint(Graphics g)super.paint(g);g.fillRect(0, 0, 900, 600);if(time%2=0)g.setColor(Color.yellow);g.setFont(new Font(宋体,Font.BOLD,30);g.drawString(stage:1, 400, 250);Overridepublic void run() / TODO Auto-generated method stubwhile(true)try Thread.sleep(100); catch (InterruptedE

16、xception e) / TODO Auto-generated catch blocke.printStackTrace();time+;/重画this.repaint();(2)游戏开始时播放经典坦克大战的游戏音。AePlayWave apw=new AePlayWave(111.wav);apw.start();第五章 测试5.1 软件测试说明软件测试是对软件需求分析、设计和编码的审查,通过全面的测试,发现各阶段的问题。软件分析、设计、编码是为了建立一个系统结构,实现系统;而测试主要任务是实现软件开发问题,“破坏”已经做好的软件系统。都是为了能够做出一个好的软件系统。5.1.1 软件测

17、试的目标如今对于软件大家都明白,不可能存在没有缺陷的软件。软件是人开发出来的,人不可避免的会产生错误,而产生软件缺陷。软件缺陷可能在项目初期就存在了。随着软件不断的开发,缺陷造成的影响不断扩大,可能造成无法弥补的损害。所以,软件测试的目标是:以最少的代价找出软件存在的错误和缺陷。在软件系统的开发过程中,软件测试是保证软件质量的关键,它是需求分析、设计和编码的最后审核。确实做到尽可能的将软件中存在的问题找出来,以保证软件质量。5.1.2 软件测试的原则软件测试需要一些原则,Myers提出了以下几个测试原则:1. 程序不能由其程序员来测试。测试是为了找错。从心理学角度上讲,程序员对自己做的程序会觉

18、得不会有多少错误。而且如果程序员的理解错误,程序员自己测试肯定是查不出错误的。2. 在程序测试时,测试人员应有正确的输入和明确的输出结果。3. 程序测试需要合理的输入数据,也要不合理的输入数据。保留素有的测试案例,并作为一个软件组件。花费相当多的精力来射击测试用例。不加以保存,一旦程序错误修正或改进需要重新测试,就要重复上述工作。这是不是太浪费了,人们一般不愿重新设计测试用例,测试时难免会没有第一次测试那么认真。这往往无法发现因修改而产生的缺陷。程序中有错误的概率和在那段程序中已经发现的错误成比例。程序中的错误总是一起出现,对这种现象,现在还没有令人满意的解释。但这样的现象表明,为了提高测试的

19、效率,应当特别对待那些容易出错的程序段。5.2 测试计划5.2.1 进行通过测试在软件测试过程中,我们要明白软件能够做什么,不会去测试额外的功能。因此用最简单的测试计划,来检测软件基本功能的运行。5.2.2 进行有效类测试在保证软件能够正确运行之后,就能用各种“非正常”操作和数据来暴露缺陷。纯粹是为了破坏软件而设计的测试。5.3 测试用例打开坦克大战的运行文件,可看到新开启的窗口如下。图5.1 开始窗口打开游戏下拉选框,可看到“开始新游戏”、“退出游戏”、“存盘退出”、“继续游戏”这几个选项。图5.2 开始选项框点击开始新游戏即可开始游戏,并且能听到游戏开始的声音,能看到界面上显示出来的信息,

20、通过上下左右可以操作我方坦克的移动,按住方向键不动,坦克会不停的向那个方向移动。图5.3 坦克的移动按X键可以发射子弹,子弹会击毁地方坦克,图为敌方坦克爆炸。图5.4 坦克的爆炸我方坦克最多发射5发子弹,必须等子弹消失后才能再次发射子弹。图5.5 坦克的子弹系统可以保存退出,记录坦克的坐标,玩家总成绩。图5.6 存盘退出总 结 经过这两个月的学习,研究和开发,坦克大战游戏的基本功能已经实现出来。玩家可以通过操作坦克去击毁敌方坦克,游戏开始有游戏音效,坦克被击毁时有爆炸效果,可以存盘和读档。因为自己知识上的欠缺,最开始设想的一些内容无法实现,但还是可以基本完成坦克大战的功能。通过这次坦克大战的毕

21、业设计我学到了许多知识,第一次独立完成了一个小项目,过程中碰到了一些麻烦和不足,都在同学和老师的帮助下一一找到了解决的方法。从碰到难题,到自己查书,到与同学讨论,再到向老师请教,使得我的毕业设计不断的完善,并且学到了宝贵的知识。参考文献1 Java语言编程基础教程宋振会 编著,清华大学出版社20052 Java 语言程序设计郎波 编著,清华大学出版社 20053 Java 核心技术卷:基础知识 Cay S.Horstmann、Gary Cornell 编著,机械工业出版社 20084 Java游戏设计2荣钦科技 编著,清华大学出版社5 Java JDK实例宝典夏先波 编著,电子工业出版社200

22、76 Java面向对象编程孙卫琴 编著,电子工业出版社 20067 Java编程思想(第4版)(美)埃克尔 编著,陈昊鹏 译,机械工业出版社 20078 Java编程模式与范例严桂兰 刘波 刘甲 编著,机械工业出版社 20029 优秀动漫游戏系列教材交互式漫游动画-Virtools+3ds Max虚拟罗建勤 张明 编著 201010 锐风行技法 3ds Max/After Effects 电视品牌形象包装完全解码肖艺 孙春星 雷荣祖 编著, 人民邮电出版社 2010.11 Java 典型应用彻查1000例-图形与网络游戏开发(DVD)贾蓉生 胡大源 林金池 编著,科学出版社 2009致谢经过两

23、个多月的辛苦忙碌,本次毕业设计完成了,由于经验匮乏和业务逻辑不熟悉,难免会有很多考虑不周到和不完善的地方,但在指导老师和同学的帮助下许多问题都得以解决,在此本人要特别感谢他们对我的帮助。首先我的毕业设计能够顺利完成,和李林老师的全力指导和热心帮助是分不开的,无论是在初期的设计阶段还是后期的运行阶段都得到了李林老师的鼓励和帮助,在毕业设计过程中,给我提示游戏设计的逻辑思路;给我提供参考书籍;给我提供了很多技术资料。在碰到问题时,总是鼓励我迎难而上。特别是论文格式的修改,让我明白了一个标准的论文,其格式的重要性,哪怕是一个标点符号都要严格要求。没有李林老师的帮助,我是做不出这次毕业设计的。其次我还

24、要感谢大学四年来的所有老师,为我们打下的基础。以前总觉得学习的课程用处不大,但当自己真正去完成一个设计的时候,才发觉每门课程的重要性。然后我要感谢我的几位同学,在毕业设计的开发过程中,但我遇到难题时,他们给予我支持,鼓励和帮助,帮忙查阅资料,与我共同解决难题。通过这次毕业设计,不仅完成了我的学业,更重要的是让我从开始的需求分析到具体功能的实现,再到最终的测试和维护的软件工程有了进一步的的理解,这种思维方法对我的思想产生了极大的影响。我的动手能力和独立解决问题的能力得到了很大的锻炼和提高。我还要感谢学校提供这次毕业设计的机会,让我在学业即将结束的时候有认识自己的机会,意识到自己的优势和不足,在这

25、次毕业设计中明白了责任的重要性,从而提高了自己的责任心。最后,感谢答辩组对我的毕业设计的考核,如能够得到答辩老师们的认可,即是对我的学习和工作最大的鼓励。你们的客观评价和建议一定牢记于心,在今后的工作中,更加严格要求自己。附录一 坦克大战中的类敌人坦克类package myTankGame;import java.util.*;import java.io.*;import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSys

26、tem;import javax.sound.sampled.DataLine;import javax.sound.sampled.SourceDataLine;class AePlayWave extends Thread private String filename;public AePlayWave(String wavfile) filename = wavfile;public void run() File soundFile = new File(filename);AudioInputStream audioInputStream = null;try audioInput

27、Stream = AudioSystem.getAudioInputStream(soundFile); catch (Exception e1) e1.printStackTrace();return;AudioFormat format = audioInputStream.getFormat();SourceDataLine auline = null;DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);try auline = (SourceDataLine) AudioSystem.getLine(

28、info);auline.open(format); catch (Exception e) e.printStackTrace();return;auline.start();int nBytesRead = 0;byte abData = new byte512;try while (nBytesRead != -1) nBytesRead = audioInputStream.read(abData, 0, abData.length);if (nBytesRead = 0)auline.write(abData, 0, nBytesRead); catch (IOException e

29、) e.printStackTrace();return; finally auline.drain();auline.close();/敌人坦克点和方向构成的对象类(记录点)class Nodeint x;int y;int direct;public Node(int x,int y,int direct)this.x=x;this.y=y;this.direct=direct;/记录类,同时可以保存玩家的设置class Recorder/记录没关有多少敌人private static int enNum=20;/设置我有多少生命值private static int myLife=3;/

30、记录总共消灭多少敌人private static int allEnNum=0;private static Vector ets=new Vector();public static Vector getEts() return ets;public static void setEts(Vector ets) Recorder.ets = ets;/从文件中恢复记录点private static Vector nodes=new Vector();/完成读取任务public static Vector getNidesAndEnNums()try fr=new FileReader(d:T

31、ankGame.txt);br=new BufferedReader(fr);String n=br.readLine();/将字符串转换成int型allEnNum=Integer.parseInt(n);while(n=br.readLine()!=null)String xyz=n.split( );Node node=new Node(Integer.parseInt(xyz0), Integer.parseInt(xyz1), Integer.parseInt(xyz2);nodes.add(node); catch (Exception e) / TODO Auto-generate

32、d catch blocke.printStackTrace();finallytry br.close();fr.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();return nodes;/把玩家击毁敌人坦克的数量保存到文件中private static FileWriter fw=null;private static BufferedWriter bw=null;private static FileReader fr=null;private static Buffe

33、redReader br=null;/把玩家击毁敌人坦克数量保存到文件中public static void keepRecording()try fw=new FileWriter(d:TankGame.txt);bw=new BufferedWriter(fw);bw.write(allEnNum+rn);/+rn是要换行 catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();finallytry bw.close();fw.close(); catch (IOException e) / TO

34、DO Auto-generated catch blocke.printStackTrace();/从文件中读取记录public static void getRecoring()try fr=new FileReader(d:TankGame.txt);br=new BufferedReader(fr);String n=br.readLine();/将字符串转换成int型allEnNum=Integer.parseInt(n); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();finallyt

35、ry br.close();fr.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/存盘退出后保存敌人坦克坐标public static void keepRecAndEnemTank()try fw=new FileWriter(d:TankGame.txt);bw=new BufferedWriter(fw);bw.write(allEnNum+rn);/+rn是要换行/保存当前活着的敌人坦克坐标和方向for(int i=0;iets.size();i+)/取出坦克Ene

36、myTank et=ets.get(i);if(et.isLive)String st=et.x+ +et.y+ +et.direct;/写入bw.write(st+rn); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();finallytry bw.close();fw.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();public static int getAllEnNu

37、m() return allEnNum;public static void setAllEnNum(int allEnNum) Recorder.allEnNum = allEnNum;public static int getEnNum() return enNum;public static void setEnNum(int enNum) Recorder.enNum = enNum;public static int getMyLife() return myLife;public static void setMyLife(int myLife) Recorder.myLife =

38、 myLife;/减少敌人的数量public static void reduceEnNum()enNum-;/玩家总成绩public static void addEnNum()allEnNum+;/坦克类class Tank int x=0;int y=0;boolean isLive=true;public Tank(int x,int y)this.x=x;this.y=y;public int getX() return x;public void setX(int x) this.x = x;public int getY() return y;public void setY(int y) this.y = y;int direct=0;public int getDirect() return direct;public void setDirect(int direct) this.direct = direct;/坦克的速度int speed;public int getS

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号