当前位置: 首页 > news >正文

哪些网站专门做细胞的wordpress 百度统计

哪些网站专门做细胞的,wordpress 百度统计,主机怎么做网站二次跳转,做网站太麻烦了关于基于Java的飞机大战游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89313362 基于Java的飞机大战游戏的设计与实现 摘 要 现如今#xff0c;随着智能手机的兴起与普及#xff0c;加上4G#xff08;the 4th Generation mobile communication #x… 关于基于Java的飞机大战游戏.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89313362 基于Java的飞机大战游戏的设计与实现 摘   要 现如今随着智能手机的兴起与普及加上4Gthe 4th Generation mobile communication 第四代移动通信技术网络的深入越来越多的IT行业开始向手机行业转移重心。而手机行业中游戏方面的利润所占比重较大并且手机游戏大多数则是由Java语言开发研制的。所以我想顺应时代发展用学到的Java知识对游戏进行一次深入的了解与创作。 Java语言在我们大学学习中占了很大的比重其优点甚多面向对象可靠安全多平台可移植高性能多线程等。面向对象是相对于c语言的面向过程来说的在面向对象编程中我们用Java去新建一个对象调用其方法就能实现我们的目标并不需要了解这个对象的方法的具体实现过程Java的可靠安全特点体现Java不支持指针禁止第三方访问杜绝了外部风险。所以使用Java开发游戏是一个正确的选择。 大学学习即将结束在毕业之际我想用我4年里学习的知识为自己编写一个属于自己的游戏——飞机大战游戏为我的大学生活画上圆满的句号。 关键词Java游戏面向对象可靠安全多线程 Design And Implementation Of Airplane Wargame Based On Java Abstract Nowadays, with the emergence and popularization of smart phones, plus 4 g (the 4 th Generation mobile communication, the fourth Generation mobile communication technology) the development of the Internet, more and more in the IT industry began to shift to the mobile phone industry center of gravity. Aspect of the game of the mobile phone industry profits account for a large proportion, and most mobile game is developed by Java language. So I want to keep up with the development of The Times, use Java knowledge for an in-depth understanding of the game and creation. Java language learning in our universities accounted for a large proportion of its many advantages: Object-oriented, reliable, secure, multi-platform portable, high-performance, multi-threading. Object-oriented process-oriented with respect to the terms of the c language, object-oriented programming, specifically we use Java to create a new object, call its methods will be able to achieve our goal, we do not need to know the objects method of implementation ; reliable safety features reflect Java Java does not support pointers to prohibit third-party access, to eliminate the external risk. Therefore, the use of Java development aircraft war game, is the right choice. University coming to an end, on the occasion of the graduation, I want to use my four years studying knowledge and made themselves a game of their own - Aircraft war game for my college life painting satisfactory conclusion. Keywords: Java game; object oriented; reliable and secure; multi thread 1  引言 1.1  项目背景 90后的我们童年最开始接触电子游戏是在游戏厅那时候的飞机大战游戏机前往往人山人海绚丽多彩的画面带感操作让人沉醉不能自拔。再后来珍珠港(Pearl Harbor)虎虎虎(Tora! Tora! Tora!)等空战电影中激烈的空战和飞机在天空中的英姿让我彻底爱上了空战所以毕业设计我选择了与飞机战斗有关——基于Java的飞机大战游戏的设计与实现的毕业设计。 而选基于Java的飞机大战游戏的设计与实现为题是对大学期间学到知识的一次实践运用也是对自己大学四年学习成果的一次检验。 柏拉图“游戏是一切幼子生活和能力跳跃需要而产生的有意识的模拟活动。”亚里士多德给游戏的定义是“游戏是劳作后的休息和消遣本身并带有任何目的性的一种行为活动。”可以说游戏是一种一直存在的社会现象有了人类就有了游戏人类与游戏息息相关。游戏也随着人类的进步有了新的发展。 PC机刚开始普及的时候游戏并不能被广泛接受。最主要的原因就是不能充分发挥PC机的性能即游戏程序不能最大化使用PC机的硬件资源导致PC机的早起游戏画面差操作感僵硬可玩度不高所以不被人们所接受。但是随着切硅的技术的提升导致CPU性能的飞跃及Java语言的开发游戏程序对硬件资源的利用率的提高现在游戏的各个方面都有了质的飞跃。比如20世纪末暴雪公司下的《星际争霸1》掀起全球星际流其操作感和画面打击感及游戏可玩性都有很大的提升。当然除了游戏本身的优秀质量以外可以较广的支持不同的硬件设备的功能也不容忽视高中低端PC机都有不错的流畅度。 而飞机大战类游戏中起步较早的还要数由日本公司Cyber Front研制并发行的雷电系列该系列操作简单节奏明快因此可以说成是飞机大战游戏类的经典之作。该系列下的《雷电3》在2016年中旬从PS2平台移植到PC机平台上后更成为当时风靡一时的游戏。 《雷电3》一共有8个关卡分别是病变的森林玄武岩城市。岩石港湾金色的沙漠原子核工厂小行星带大型宇宙舰和地方总部。雷电3的关卡不多而且流程比较短所以主要还是以刷新分数上限挑战操作极限的目的为主考验玩家的手速和反应能力是一款极为经典的游戏即使过去了十几年《雷电3》仍然广受欢迎各大应用商店的点击下载量还是很高衍生出来的游戏更是数不胜数。      1.2  国内外研究现状 Java语言经过多年的发展已经十分成熟。Java语言称霸企业级应用这门多年的事实证明了这门语言适合开发各种项目。当Java语言的运行效率随着发展再次提升了一大截后Java语言的一系列优势就更加明显的体现出来了比如语言严谨高抽象可读性强等。 对于游戏开发由于涉及到各种复杂的问题情况经常遇到新的问题所以在开发过程中需要进行对代码进行不断的修改添加这就需要可以随时随地的修改代码。而Java具有虚拟机特性Java游戏本身也可以用Java来写例如目前的BeanShellGroovy和其他脚本语言可以很容易地无缝地与Java语言的互动我们可以通过脚本随时对游戏进行添加与删除不必要重新开发某个模块。这是大大方便了Java游戏编程。 在游戏的发展中涉及到了大量的Java技术某些技术现在已经淘汰但是也有些技术一直在使用。如Sun公司较早推出了3D技术-- Java3D是一个高度封装的APIOpenGL和Direct 3D都是基于Java3D的可以说是最有名的3D Java技术;Jogl函数则是opengl接口对Java的实现lwjgl函数light weight Java game library是将游戏图形opengl、音效openal、控制输入集合为一以成为Java界的directx不是direct3d而努力joal函数则是Java对openal的一个绑定是Java音效的一个解决方案jinput函数是Java对非标准输入设备游戏手柄操纵杆的解决方案 Project Wonderland是Sun开发的一个3d虚拟世界构建工具等。 由于VRVirtual Reality虚拟现实的发展对游戏的发展影响巨大。科幻电影小说中的科幻游戏玩法有可能成为现实未来游戏也许不需要鼠标键盘只需要一个类似VRBox的头盔设备即可完成指令的输入与输出。 1.3  项目主要工作 本次项目的题目——基于Java的飞机大战游戏的设计与实现主要目的是实现飞机大战这个游戏。期望结果游戏无BUG现在人们将在电脑系统或程序中隐藏着的一些未被发现的缺陷或问题统称为BUG——漏洞简单易上手老少皆宜让玩家“玩不释手”。 从游戏的玩法来说主要就是我方飞机(Hero airplane)和敌方飞机Enemy airplane的对决首先是游戏的开始界面与结束界面然后就是我方飞机Hero airplane的移动方式鼠标移动或者键盘移动我打算选择鼠标移动因为鼠标移动可以转移到手机上现在大多数手机都没有键盘基本靠手指滑动操作接下来就是我方飞机Hero airplane子弹的生成然后是敌方飞机Enemy airplane的出现坐标的选择然后飞机与子弹防碰撞飞机与飞机的防碰撞最后是我方飞机Hero airplane与敌方飞机Enemy airplane的对战结果。 该游戏要满足以下功能性需求 1游戏状态控制功能     游戏的状态控制包括运行、暂停、恢复及结束游戏首先是游戏的开始页面在游戏正在进行时如果你有其他的事情又不想结束游戏你可以将鼠标移出游戏界面或者鼠标在游戏界面单击即可暂停游戏当你的其他事情解决后你还可以选择恢复游戏继续玩下去当游戏结束时会显示游戏结束界面。 2游戏难度的调整      玩家随着玩游戏的时间的增加敌方飞机的数量会增加出现的频率会有所提高移动速度也会提高。 3游戏界面绘画功能      在右上角显示游戏时间游戏难度于时间成正比即游戏时间越长难度越高玩家游戏得分与我方飞机生命值游戏主屏用来显示玩家对我方飞机Hero airplane的控制与敌方飞机Enemy airplane的出现及移动的显示。 4玩家游戏控制功能      玩家可以通过控制移动鼠标或者键盘来控制友机的移动。 1.4  本文组织结构   本文的组织结构如下   第一部分介绍了本文的国内外背景。   第二部分介绍了开发游戏项目涉及到的软件平台与开发语言。   第三部分介绍了项目的需求分析。   第四部分介绍了项目各个模块的实现。   第五部分介绍了对软件测试的过程及结果找到项目的优缺点。 2  开发平台与开发技术 本章主要介绍软件开发平台如何选择。本软件涉及到的开发平台是IntelliJ IDEA开发技术是Java技术。下面将会介绍一下选择IntelliJ IDEA的理由。 2.1  IntelliJ IDEA简介 IntelliJ IDEA是一个Java的 集成开发环境IDE用于开发各种项目的计算机软件。它是由JetBrains公司原名的IntelliJ开发的个人版被Apache 2授权许可商业版则是作为专业版可以用来进行大型的商业开发。 IntelliJ IDEA的第一个版本发布于2001年1月并且是第一个具有先进的代码导航和一个代码重构的综合能力的Java IDE。 IntelliJ IDEA对于系统的要求微软的Windows 10/8/7 / Vista/ 2003 / XPincl.64位最少1 GB内存2 GB RAM推荐300 MB硬盘空间至少1 GB的高速缓存1024×768的最小屏幕分辨率。 IntelliJ IDEA特点   1.编码提示  IDE可以进行代码提示比如结合上下文对当前代码进行补充代码导航可以快速定义到某个声明过的类代码错误提示对于代码错误的地方进行提示并且提供有效的解决方案。   2.内置工具和整合   IDE提供了构建与打包工具如grunt , bower , gradle , 和 SBT 。它支持各个版本的控制系统如 GIT , Mercurial , Perforce , and SVN 。可以直接从IDE对SQL ServerORACLEPostgreSQL和MySQL数据库进行访问。   3.各种各样的插件系统  IntelliJ IDEA支持插件通过插件可以对IDE添加额外的功能。无论是从IntelliJ IDEA的插件库网站或通过IDE的内置插件都可以进行搜索插件和插件的安装。目前的IntelliJ IDEA个人版则拥有1495个可用的插件其中IDE的旗舰版则拥有1626个可用的内置插件。 2.2  IntelliJ IDEA与Eclipse 的比较 我们大学学习中对于Java的开发工具一般都是选择 EclipseMyEclipse开发工具。Eclipse是Sun公司自己开发的Java开发工具优点在于简洁没有插件用户可以根据自己的需求自己寻找安装合适的插件同时这也是它的缺点没有提供插件某些开发就会让人感觉不方便并且插件都是个人开发并不是适合所有人。MyEclipse则需要收费虽然网上有破解版但是并不提倡支持正版从你我做起它实际上是将eclipse和其他常用插件集成在一起的一个庞大开发工具优势就是常用插件齐全不用自行下载安装当然支持自己扩展劣势就是插件太多导致软件繁重运行时占用系统太多资源当然他是收费的对于学生来说这个是致命的。 IntelliJ IDEA更为优秀的原因是IntelliJ IDEA更为智能更贴合用户。以下进行详细说明。 调试  作为调试过程的一部分我们通常希望选中一些表达式来查看它的值。在Eclipse中你需要选择这种表达并且准确选择整个表达式是很重要的否则在Eclipse中无法评估它。在IntelliJ IDEA中你只需按下有关快捷键即可看到表达式的值。自动完成  自动完成功能的好坏是区分任何IDE的标杆。在这方面的感觉的背景下IntelliJ IDEA则有一个定性的优势。IntelliJ IDEA不等待任何按键比如当你输入一个方法函数是它立刻会明白方法函数希望将某个定义过的类作为第二个参数这时会有一个静态变量在类名处呈现可见状态。对于用户来说提供建议和想法是一个的确不错的做法。但是Eclipse做不到Eclipse只能理解你当前输入的字符并不能与前边的联系起来。重构  专业编程人员如果利用IntelliJ IDEA的IDE提供的重构将会事半功倍。所有IDE提供了一个用处非常大的重构。但话又说回来IDEA的重构是非常智能的。它知道你想要什么并提供了大多数情况下适用的不同的建议选项。 如果我们选择一个Java IDE作为开发工具那么IntelliJ IDEA肯定比Eclipse的更好。这不只是一个个人品味的问题。客观来说IDEA的确是第一选择它可以让你快速方便地编写和修改代码建议适当的函数提供适当的方法。它不要求你准确选择表达式但会猜测你想要做什么。 2.3  Java  Java是一个通用计算机编程语言是并发的类型面向对象的。它的目的是让应用程序开发者“一次编写到处运行”也就是说Java可以在任何设备上开发也可以在任何装有Java虚拟机JVM设备上运行而无需再次编译。 Java应用程序通常被编译成字节码可以在任何装有Java虚拟机上JVM的计算机体系结构上运行。 截至2016年Java是最流行的编程语言之一特别是对于客户端服务器的Web应用程序有报道称有900万开发者在使用Java语言进行开发。Java是由詹姆斯·高斯林在Sun Microsystems这已经被甲骨文公司收购创造的并于1995年发布作为Sun Microsystems的Java平台的核心组件开发Java语言多从C和C 中语法派生出来的。 最初有Sun公司对参考实现Java的编译器虚拟机和类库下发专用许可证。截至2007年5月按照Java社区进程的规章制度SunRelicensed GNU下大部分的Java技术都在通用公共许可证下。其他人也开发了Java软件替代和实现了Sun公司下的一些技术如GNU Java编译器字节码编译GNU Classpath标准库和IcedTea项目的Web浏览器插件小程序。   目前2016年6月Java的最新版本是第8个版本这是目前Oracle支持免费的唯一版本单早期版本都是由甲骨文等公司在商业基础上的支持的。 詹姆斯·高斯林迈克·谢里登和帕特里克·诺顿启动Java语言项目是在在1991年6月Java最初设计则是用于交互式电视但它相对于在当时的有线数字电视产业过于超前。后来该项目又由名称Green并最终改名的Java从Java咖啡来自爪哇的一种咖啡得名。高斯林设计的Java与C / C 语法风格相似系统和应用程序的程序员会发现二者有很大程度的相似点。 Sun Microsystems公司在1995年发布了第一个公开的实行版本Java 1.0它承诺“一次编写到处运行”WORA。其相当安全并设有配置的安全标准它对网络和文件实行访问限制。主流浏览器很快将Java程序的能力纳入到网页中运行导致Java迅速走红然而大多数是外面的浏览器但是这并不是原来的计划所以在2016年1月甲骨文宣布基于JDK 9 Java运行时环境将不再支持浏览器插件。Java 1.0编译器由亚瑟·范·霍夫重新用Java编写严格遵守Java 1.0语言的规范。Java 2新的版本可以在不同类型的平台搭建不同的配置。 J2EE包括面向企业级应用的技术和通常在服务器环境中运行的API而J2ME对API功能的移动应用进行了优化桌面版改名为J2SE。在2006年出于营销目的将新版本J2分别命名为Java EEJava ME和Java SE。 1997年Sun Microsystems加入ISO/ IEC JTC 1标准组织后来的ECMA国际组织要求Java正式化但它很快就从组织中退出了。但Java仍然是一个事实上的标准控制Java社区的标准。 2006年11月13日Sun在GNU通用公共许可证GPL条款支持下将其Java虚拟机JVM公布于众。 2007年5月8日Sun完成了开源的所有过程在自由软件/开源分发条款下放出了它所有的JVM的核心代码除了从Sun未持有版权的小部分代码。 2010年4月2日詹姆斯·高斯林Java的主要创始人从甲骨文公司辞职。 3  可行性研究 可行性研究顾名思义研究其的可行性。可行性研究是项目开发之前的重要阶段。在软件开发实践中软件开发人员或者用户对市场的了解不充分对技术的掌握不好对进行开发的各项风险评估不足等因素有些问题不能再预期下得到解决造成不可预估的损失为了避免盲目的软件开发和不必要的损失相关人员需要对开发特定软件项目的可行性进行研究结合资金、时间和环境等各方面的制约条件对该软件产品是否能够解决存在的问题是否能够带来预期的效果和价值做出评估。 3.1  技术可行性   现在开发游戏的语言一般都是Java语言为了保证开发出来的游戏可以在手机、Web浏览器、PC客户端等平台使用所以就要求开发语言可以在多平台移植而Java语言刚好符合这个特性。开发工具IntelliJ IDEA可以下载并且可以免费使用Java的编译工具JDK也可以在Sun官网上直接下载安装其过程十分简单。 3.2  经济可行性 配置较低的电脑也能进行Java游戏的开发一台电脑就行开发成本低。由于Java具有跨平台以及一次编译到处运行的特点开发出来的游戏可以放到各大游戏平台上发售玩家可以在电脑浏览器手机等各种平台运行。而且软件维护简单实用性强一次开发使用即可长久使用当软件满足不了用户需求时只需对用户的需求进行添加即可。   3.3  操作可行性 本游戏操作简单在电脑和浏览器上可以用鼠标键盘操作在手机上可以用手触摸屏幕运行。 3.4  用户使用可行性     本软件操作简单对用户的要求不需要多强技术能力。 3.5  法律可行性 信息产业部已将游戏通用引擎研究及示范产品纳入国家“863计划”这是中国首次将游戏技术纳入国家科技计划当中。 4  需求分析 需求分析是对即将开发的系统确定一个完整的准确的要求。需求分析的结果是否完美解决了用户的问题将直接影响到后面的进程并影响到设计结果是否能让用户接受。软件需求分析对软件系统提出了清楚、准确、全面而具体的要求是对软件使用者意图不断进行揭示与准确判断的过程它并不考虑系统的具体实现而是严密地、完整地描述了软件系统应该做些什么的一种过程。 4.1  系统需求概述 飞机大战主要需要我方飞机和敌方飞机还有子弹特殊nPC开始背景结束背景以及背景音乐。我方飞机可以随意移动敌方飞机无规律出现。游戏玩家通过鼠标移动控制飞机移动我方飞机在游戏开始时就一直能发射子弹当我方子弹碰到敌方飞机时敌方飞机消失。当玩家飞机碰到敌方子弹时生命值减一直到玩家飞机生命值为一时游戏结束。 基于Java的飞机大战游戏的设计与实现有以下几个模块     1游戏状态控制功能模块      2游戏难度的调整模块      3游戏界面绘画功能模块     4玩家游戏控制功能模块 4.2  功能模块设计 4.2.1  游戏状态控制功能模块  游戏的状态控制包括运行及结束游戏首先进入游戏的开始页面在游戏进行时玩家必须躲避或者击落敌方飞机玩家飞机的生命值降低为0的时候游戏就会结束弹出游戏结束界面。 4.2.2  游戏难度的调整模块  玩家玩的时间越长游戏的难度越高敌方飞机的数量越多、敌方飞机出现的频率越高玩家保证飞机的存活的难度越高操作难度相应也高。 4.2.3  游戏界面绘画功能模块 左上角会显示玩家飞机当前生命值游戏时间当前分数其他地方用来输出玩家对我方飞机的控制与敌方飞机的动作显示 4.2.4  玩家游戏控制功能模块  玩家可以通过控制鼠标或者键盘来控制方飞机Hero airplane的移动。 4.3  游戏难点分析 4.3.1  绘图美化 清新靓丽的游戏界面将给用户带来愉悦的美感。因此在这个游戏中主要参考原始的游戏画面敌我飞机的形象也应该是美丽的。 4.3.2  多线程技术的实现 应用程序线程机制的基石实现了游戏游戏的刷架的控制装上各种角色的资源和背景如飞机机友的要求以实现整个游戏实现自动控制线程 控制。 4.3.3  防碰撞问题的解决 例如敌方飞机与玩家飞机防碰撞敌方飞机与玩家飞机防碰撞等等。防碰撞检测技术实现在不同情况下有不同的防碰撞检测方法。 4.3.4  动画的实现 用图片的阵列动画切片变换形成。图像阵列千变万化的图像画在画布标使动画这是一个图像的形成阵列。使用切片来实现动画所有的帧都放置在相同的图像中以达到爆炸的效果。 5  飞机大战功能实现 5.1  模型图 图1-1  飞机大战游戏的模型图 5. 2  软件功能模块 图1-2  飞机大战游戏的软件功能模块图 5.3 游戏首页的实现 5.3.1 界面实现 飞机大战的界面如图1-3所示。 图1-3 飞机大战游戏开始界面 5.3.2  流程图 游戏开始的流程图如图1-4所示。 图1-4  游戏初始化流程图 5.3.3 核心代码 游戏初始化代码如下 \* *   写于3月20日主要目的完成游戏的初始化过程 *\ public final void paint(Graphics g) { g.setColor(this.bgColor); g.fillRect(x, y, width, height); g.setColor(this.fgColor); g.drawRect(x, y, width, height); this.paintBoxContents(g); } private void paintBlock(int x, int y, int blockType, Graphics g) { int blockX this.boardX (this.blockSize * x); IntblockYthis.boardY(this.blockSize*(y-TetrisConstants.TOP_ VISIBLE_ROW)); if(TetrisConstants.BLOCK_EMPTY ! blockType) { g.setColor(TetrisConstants.COLOR_BLACK); g.fillRect(blockX 1, blockY 1, this.blockSize - 1, this. blockSize - 1); this.setColor(blockType, g); g.fillRect(blockX, blockY, this.blockSize - 1, this.blockSize - 1); } else { g.setColor(TetrisConstants.COLOR_WHITE); g.fillRect(blockX, blockY, this.blockSize, this.blockSize); } } 5.4 游戏开始模块的实现 5.4.1 界面实现 飞机大战的开始界面如图1-5所示。 图1-5  飞机大战开始界面 5.4.2 流程图 流程图如图1-6所示。 图1-6  游戏开始模块程序流程图 5.4.3 核心代码 下面是游戏开始模块的功能代码如下 \* *   写于3月27日主要目的完成游戏的开始界面 *\ private int clearCompletedRows(TetrisPiece piece) { TetrisBoard board this.getBoard(); for(int i 0; i TetrisConstants.FOUR_BLOCKS; i) { int rowY piece.getBlockY(i); if(board.checkRowCompleted(rowY)) { this.markRowCompleted(rowY, true); } } int numClearedRows 0; for(int y TetrisConstants.HEIGHT - 1; y 0; y--) { if(numClearedRows 0) { board.dropRow(y, numClearedRows); } if(this.isRowCompleted(y)) { numClearedRows; this.markRowCompleted(y, false); } } for(int i 0; i numClearedRows; i) { board.clearRow(i); } return numClearedRows; } 5.5 发射子弹模块的实现 5.5.1 界面实现 发射子弹界面实现如图1-7所示。 图1-7  发射子弹界面 5.5.2 流程图 流程图如图1-8所示。 图1-8  发射子弹模块程序流程图 5.5.3 核心代码 发射子弹实现代码如下 \* *   写于4月5日主要目的完成游戏的子弹的自动发射 *\ public void rotate(int pivotX, int pivotY, boolean rotateDirection) { if(TetrisConstants.ROTATION_TYPE_TOGGLE this.rotationType) { // 如果翻转类型为TOGGLE rotateDirection this.rotationToggle; //判断翻转方向 this.rotationToggle !this.rotationToggle; // 如果与canRotate匹配 中心点方块将被使用 } // 重构四个小块每个都转动 for(int i 0; i TetrisConstants.FOUR_BLOCKS; i) { int blockX this.getBlockX(i); int blockY this.getBlockY(i); //  左旋转交换x和y坐标x坐标取反 //  右旋转交换x和以坐标y坐标取反 int dx blockY - pivotY; int dy blockX - pivotX; if(rotateDirection) { // 如向左旋转 dx * -1; } else { // 如向右旋转 dy * -1; } int rotateX pivotX dx; int rotateY pivotY dy; this.setBlockCoords(i, rotateX, rotateY);//得到翻转后的新坐标 } } 选中敌机目标后开始发射子弹。在TetrisBoard.Java中的checkRowCompleted()方法实现了此功能其代码如下 public boolean checkRowCompleted(int rowY) { for(int x 0; x TetrisConstants.WIDTH; x) { if(TetrisConstants.BLOCK_EMPTY this.getBlockType(x, rowY)) { // 选中目标发射子弹 return false; } } return true; } 当击中敌机后积分就会有所变化计算并显示出用户当前的分数。同时等待玩家键入数字选择游戏难度开始新的游戏。其实现由init()方法控制其代码如下 \* *   写于4月12日主要目的完成游戏的难度选择 *\ private void init() { this.board new TetrisBoard(); this.gameCanvas new TetrisCanvas(this); this.activePiece new TetrisPiece(); this.completedRows new boolean[TetrisConstants.HEIGHT]; //初始化数组 this.hiScore this.openAndReadHiScore(); this.nextPieceType TetrisConstants.UNINITIALIZED; this.rand new Random(); // 设置exit/pause/resume命令 this.setuPCommands(); this.gameCanvas.addCommand(this.exitCommand); // 显示title屏 this.setGameState(TetrisConstants.TITLE_STATE); } 5.6 积分模块的实现 5.6.1 界面的实现 飞机大战积分模块界面如图1-8所示。 ​​​​​​​ 图1-8  积分模块 5.6.2 核心代码 积分板实现代码如下 \* *   写于4月16日主要目的完成游戏的积分模块 *\ public void drawCount(Graphics g){ g.setColor(Color.white); Font font new Font(宋体, 1, 20); g.setFont(font); g.drawString(积分: this.score, 0, 470); } 实现积分的增长 if (burst ! null) burst.draw(g_off); for (int i 0; i list.size(); i) { Role chara1 (Role) list.get(i); if (chara1.isDead()) { if (chara1 instanceof Enemy) { chara1.drawBurst(g_off); this.battle.score; } list.remove(i); } } 全屏爆炸时计算炸死几个敌人增长分数 if(GamePanel.skillCount0){ for (int i 0; i GamePanel.list.size(); i) { Role chara1 (Role) GamePanel.list.get(i); if(!(chara1 instanceof Battle) chara1.x0 chara1.y0      !(chara1 instanceof BossA)   !(chara1 instanceof BossB)   !(chara1 instanceof BossC)){ GamePanel.list.remove(i); if(chara1 instanceof Enemy){ this.score; } 实现积分的输出 private void gameOver() { GamePanel.skillCount  10; if (Key.enter) { gameMode  12; stage 1; } else { g_off.setColor(Color.white); Font font new Font(黑体, 1, 28); g_off.setFont(font); FontMetrics fontMetrics getFontMetrics(font); g_off.drawString(Game Over, (450 - fontMetrics .stringWidth(Game Over)) / 2, (500 fontMetrics .getHeight()) / 2 - 50); String score Score: this.battle.score; g_off.drawString(score, (450 - fontMetrics .stringWidth(score)) / 2, (500 fontMetrics .getHeight()) / 2 - 20); if (15 current % 50) g_off.drawString(请按 回车, (450 - fontMetrics .stringWidth(请按 回车)) / 2, (500 fontMetrics.getHeight()) / 2 100); } } 5.7 防碰撞逻辑  判断飞机是否中弹的逻辑非常简单就是在绘制飞机与子弹的时候判断两个图片是否存在重合的部分如果存在则玩家生命值减一之后将中弹飞机从飞机队列中删除子弹同样的处理。   5.7.1 核心代码 防碰撞逻辑核心代码如下 \* *   写于4月24日主要目的完成游戏的防碰撞模块 *\ public boolean checkHit(Role chara) { if ((chara instanceof EnemyA) || (chara instanceof EnemyB)|| (chara instanceof EnemyC) || (chara instanceof EnemyShot)) { if ((x WIDTH) - 14F chara.x x 14F chara.x chara.WIDTH (y HEIGHT) - 12F chara.y y 12F chara.y chara.HEIGHT) { //如果碰到敌人,敌人死亡 chara.dead(); //如果碰到子弹血量减少 if (chara instanceof EnemyBeam){ power--; } power - 50; if (power 0) { dead(); //绘制爆炸图片 GamePanel.burst  new Burst(x, y); } return true; } 5.8 游戏操作的实现 本游戏操作采用鼠标/键盘的移动来实现玩家飞机的移动。 5.8.1 核心代码 游戏操作实现代码如下 \* *   写于4月23日主要目的完成游戏的游戏操作 *\ public void move() { oldx x; oldy y; if (Key.left) { if (Key.xkey) x - (double) speed / 4D; else x - speed; if (x 0.0F) x 0.0F; } if (Key.right) { if (Key.xkey) x (double) speed / 4D; else x speed; if (x WIDTH (float) app.getWidth()) x (float) app.getWidth() - WIDTH; } if (Key.down) { if (Key.xkey) y (double) speed / 4D; else y speed; if (y HEIGHT (float) app.getHeight()) y (float) app.getHeight() - HEIGHT; } if (Key.up) { if (Key.xkey) y - (double) speed / 4D; else y - speed; if (y 0.0F) y 0.0F; } 5.9  特殊NPC蜜蜂 \* *   写于4月30日主要目的完成游戏的特殊NPC的添加 *\ package com.tarena.fly; import Java.util.Random; /**蜜蜂*/ public class Bee extends FlyingObject implements Award{ private int xSpeed1;//x坐标移动速度 private int ySpeed2;//y坐标移动速度 private int awardType;//奖励类型 /**初始化数据*/ public Bee(){ this.imageShootGame.bee; widthimage.getWidth(); heightimage.getHeight(); y-height; Random randnew Random(); xrand.nextInt(ShootGame.WIDTH-width); awardTyperand.nextInt(2);//初始化时给奖励 } /**获得奖励类型*/ public int getType(){ return awardType; } /**越界处理*/ Override public boolean outOfBounds(){ return yShootGame.HEIGHT; } /**移动可斜着飞*/ Override public void step(){ xxSpeed; yySpeed; if(xShootGame.WIDTH-width){ xSpeed-1; } if(x0){ xSpeed1; } } } 6  系统测试 测试是处在开发阶段的最后部分是保证软件质量的重要手段。软件测试是一个软件应用程序或一个所谓的条件处理和评估在控制条件包括正常条件和非正常条件下操作并评价其结果的过程。软件测试过程中应当故意诱导程序发生错误正常情况下它虽然不应该存在但是不确定它有可能在任何时候出现。从本质上说软件测试是“探测”发现“探针”的问题。 6.1 测试的定义及其重要性 6.1.1 测试的定义 软件测试是一项为了给利益相关方提供有关产品质量或者是正在测试的服务的信息而进行调查的过程。软件测试也可以提供一个客观独立的视角来看待软件以便让企业知晓并理解软件实现过程中可能存在的风险。软件测试技术是一种带着为了发现软件或者程序的BUG错误或者其他的缺陷的态度来运行一个程序或者应用的过程。 软件测试涉及一个软件组件或系统组件的执行以评估所关注的对象的一个或多个属性。在一般情况下这些属性表明该组件或系统被测试的程度 1.满足其设计和发展的需要。 2.对各种输入进行正确的相应。 3.在用户可容忍的时间内实现其功能。 4.所有功能都能满足使用。 5.可以在预定的环境中完美安装并运行。 6.可以实现如其利益相关者所期望的正常结果。 由于即使对简单的软件组件所进行的测试数量都是数量巨大的所有的软件测试都运用一些策略去挑选那些无论在时间是对资源都是合适的测试用例。其造成的结果是软件测试通常但也不排除其他情况尝试着带着为了发现软件BUG错误或者其他的缺陷的态度来运行一个程序或者应用。当BUG不被解决时需要反复进行软件测试的工作。它可能解决其他更深层次的BUG但也可能会使得程序出现新的BUG。 软件测试可以为用户和赞助商提供有关软件质量和可能存在的风险等级的信息。当然这种信息是相对客观独立的。 软件测试可以为用户和赞助商提供有关软件质量和可能存在的风险等级的信息。当然这种信息是相对客观独立的。例如例如在软件开发的不同阶段大部分的测试工作总是在系统需求已经被明确定义时才开始的然后在测试过程中实现。与此相反Agile敏捷开发是一种对于经常被用于在线应用程序的开发模型的涵盖性术语方法下需求分析编程和测试经常同时进行。 6.1.2 测试的重要性 尽管测试可以在某些特定假设的前提下确定了软件的正确性但是测试还是不能找出软件中所有的缺陷。相反有些人也许可能会注意到这些问题它对产品的申明和行为进行评论或与其他产品对照比较看是否违反了Oracle公司的原则。这些Oracle的原则可能包括但不限于规范合同类似的产品过去同一版本的产品预期的计划或预期的目的用户或客户的期望相关标准适用法律或其他标准。 测试的主要目的是检测软件故障使得缺陷被发现并且纠正。测试不能证明在所有条件下软件或者程序都能正常的运行它只能检测到在某种特定情况下软件或者程序不能正常工作。软件测试的范围通常包括代码的检查以及在各种环境和条件的代码的执行情况以及检查的代码功能什么是它应该做的如何让它做需要它做的。在软件开发的当前环境中检测团队可以独立于开发团队之外。从软件测试得出的信息可被用来校正开发软件的过程防止出现无法挽回的错误。 每个软件产品都有一些特定的用户。例如用户对视频游戏软件和银行软件有完全不同的看法。因此当一个组织开发或以其他方式投资一个软件产品时软件测试可以评估它的最终用户购买者或者其它利益相关者是否会接受该软件产品。软件测试是试图评估这一信息的过程。 并非所有的软件缺陷是由编码错误引起的。往往因为一些错误会付出巨额的代价这些错误常见的原因之一就是出现在需求方面例如程序员没有完全理解需求从而导程序设计开发时与用户出现分歧。需求的差距往往来自非功能性需求如可测试性可扩展性可维护性可用性性能和安全性。 软件故障在下述情况是发生程序员犯了一个错误失误这将导致在本软件的源代码中出现一个缺陷故障错误如果执行这种有缺陷的代码在某些情况下系统会产生提示出现错误从而引起了故障。当然并非所有缺陷都将导致故障的发生。例如死代码缺陷永远不会导致故障。当环境变化时的缺陷可以成为一个失败的关键。这些在环境变化的例子中包括软件在新的计算机硬件平台运行源代码的改变或用不同软件进行交互一个简单的缺陷可能导致一个软件的失败。 软件测试的基本问题是即使一个简单的产品用所有的输入组合和先决条件初始状态进行测试是不可行的。这意味着一个软件产品的缺陷数量可以是非常巨大的而且很多缺陷是难以在测试中发现的。更重要的是非功能性的属性它应该做什么与它如何做如 可用性可扩展性性能兼容性可靠性是高度主观的; 一个人可能接受其中一个属性的价值却不能认同另外一个。 软件开发人员无法测试所有的东西所有的输入组合和先决条件但他们可以使用组合测试设计来确定他们想要覆盖测试所需的最小数量。组合测试设计使用户用很少的测试用例能够获得很大的测试覆盖率。他们可以使用组合测试设计的方法来构建他们的测试用例是他们的测试速度与测试深度有很大的提升。 6.2 测试方法 软件测试可用许多方法。回归演练或校对被称为静态测试而实际执行程序代码与给定的测试案例被称为动态测试。静态测试往往是隐含的如校对再加上编程工具/文本编辑器查看源代码结构或编译器预编译器检查语法和数据流的静态程序分析。当程序在运行时动态测试发生。动态测试可以在程序100%完成前开始测试以便测试特定的代码也可以应用于分散的功能或者模块中。这个典型的技术使用驱动程序或在调试环境下执行。 程序测试的主要方法分为两大类白盒测试和黑盒测试。 白盒测试也称为清晰盒测试玻璃盒测试透明盒测试和结构测试可以观察源代码测试内部结构或程序的运作而不是暴露终端用户的功能。白盒测试系统用于设计测试用例以及透视内部编程的技巧。测试器通过选择路径输入代码来确定相应的输出。这类似于在测试一个电路节点例如电路测试ICT。 而白盒测试可以应用于单元测试集成测试和系统测试的软件流程但是它通常在单元级别进行的。它可以在集成单元和子系统之间的测试路径上进行系统级别的测试。虽然这种方法测试设计可以发现许多错误或问题但是它可能无法规范检测到或遗漏需求分析未实现的部分。 在白盒测试中使用的技术包括 API测试 -通过公共和私人的应用测试的API应用程序编程接口 代码覆盖率 -创建测试以满足代码覆盖率的一些标准如测试设计人员                                                                                    可以创建测试以使程序中所有的语句至少执行一次 故障注入方法-有意引入故障来衡量测试策略的效果 突变检测方法 静态测试方法 代码覆盖工具可以评估任何方法包括创建了一个完整的测试套件的黑盒测试方法。这允许软件团队可以很少对测试进行检查只确保对最重要的一个系统的部分功能点进行检验即可。代码覆盖率常作为衡量测试好坏的指标甚至用代码覆盖率来考核测试任务完成情况 功能覆盖函数是否执行 语句覆盖语句是否执行 判定覆盖对程序中每个判定条件的真分支和假分支至少进行一次判定 100的语句覆盖确保所有的代码路径或分支在以下方面控制流程至少执行一次。这对于确保功能的正确有很大的帮助但是对于相同代码有可能因为输入的不同而有不同的结果。 黑盒测试把软件作为一个“黑盒子”具有审查的功能而有关内部实现的任何细节都不清楚也看不到其源代码。该测试人员只了解该软件的功能与作用而不清楚它是如何具体实现的。黑盒测试方法包括等价类划分边界值分析全局测试状态表转移决策表测试模糊测试基于模型的测试用例测试探索性测试和基于规范的测试。 基于规范型的测试旨在去测试软件关于适应性要求方面的功能。这种级别的测试通常需要测试人员提供全面的测试用例然后只需验证其中一个给定的输入值输出值(或行为)不管在测试用例中与期望结果是否相同。测试用例的选取是建立在规范和要求下的也就是说应用程序应该做什么。它使用的软件的外部描述包括规格要求和设计以获取测试用例。这些测试虽然有时有用有时无效但是通常是有用的。 基于规范的测试可能只能检测其功能的有效性和正确性但它不足以应对复杂或高风险的情况。 黑盒测试技术的一个优点是不需要专业的编程知识。即使编写程序的编程人员与测试人员有鸿沟一般的编程差距但是测试人员总能从不同的方面给出相应的建设性意见。在另一方面黑盒测试的过程可以被说成是“摸着石头过河。” 因为不需要检查程序的源代码所以在某种情况下测试人员需要写很多测试用例来检查程序但是该程序只能被一种测试用例来测试或者只能测试程序的部分功能。 测试的这种方法可以应用到软件测试的各个方面例如单元测试集成测试系统测试和验收测试。它虽然不能包括测试过程中的所有流程但是在单元测试中却保持着绝对的优势。 6.3 测试结果 软件评价是指软件在正式运行了一段时间之后对它在功能上、技术上和经济上所进行的审核评价。针对本软件的评价如下 1软件功能评价 根据这套软件开发前的目标试运行完成后软件后软件达到了预定的发展目标在实际使用功能可满足用户的需求。 2软件技术评价 该软件设计合理功能达到预期目标软件后运行稳定可靠安全实用。 3软件经济评价 在规定时间内该软件完成后软件分析以确定软件的发展目标符合设计要求投入使用为用户节省了大量的人力物力和财力提高科学管理水平。 7  结论 本次毕业设计到此已经顺利结束。通过这次毕业设计我学习到了很多东西。在以前的三年课程中我学到了很多课程从开始的计算机理论基础到C语言数据结构CJava数据库系统概论等。虽然通过学习对这些课程都是比较肤浅的了解而且也只是停留在堆理论只是的理解阶段对其掌握程度还不够前面和熟悉。这次毕业设计使我将大学四年中所学的课程贯穿整合起来同时在设计中还涉及到一些之前没有学习过的新知识。对这些新知识的学习培养了我快速自学和应用新知识的能力。本次毕业设计不仅仅是我对所学知识的一次综合应用更是对我综合分析试剂问题、处理实际问题的能力的培养和锻炼。 本次设计运用了Java相关知识及软件工程的思路进行开发。在实现功能的同时更加侧重于对开发Java游戏的研究。由于时间、条件有限经验不足等本文所做的工作还有很多不足之处还需要进一步学习和研究。 ​​​​​​​
http://www.dnsts.com.cn/news/54203.html

相关文章:

  • 做代练的网站试用网站开发
  • 利津网站建设哪家好云加速应用于html网站
  • 在线做app的网站建筑网站接单
  • 网站如何做点击链接flash网址
  • 外包网站开发多少钱上海装修公司排名前十强有哪些
  • 杭州做网站软件新乡网站建设设计
  • 牛商网做网站的思路网站备案和备案的区别
  • 外贸企业网站建设方案河南整站百度快照优化
  • 网站首页引导页模版财经资讯网站该怎么做推广
  • 网站漏洞怎么修复网上购物哪个平台是正品
  • 家私网站栏目和功能需求策划软件开发包括什么内容
  • 湖南做网站 地址磐石网络wordpress more标签失效
  • 新开传奇网站刚开一秒第一区合肥网络公司网站建设
  • 石碣做网站网站开发作业代做
  • 个人网站内容电脑云桌面下载
  • 计算机网站开发就业形势安装wordpress注意什么意思
  • 横山桥网站微信朋友圈广告30元 1000次
  • 怎样建英文网站软件推广赚钱一个10元
  • 商务网站的特点自己设计商标logo软件
  • 手机网站做多宽的图片wordpress+jetpack插件
  • 网页站点怎么命名完整网站开发需要多久
  • 郑州哪家做网站好盐城网站开发基本流程
  • 搜索引擎营销的优势和劣势丽水网站seo
  • 用博客网站做淘宝客微信版网站制作
  • 多个wordpress站点同步学字体网站
  • 衡水哪有建网站的吗g时代网站建设
  • 营销网站建站公司哪家好中美网站建设
  • 教育资源网站建设网站模版 拓
  • 做门户网站难吗少儿编程培训
  • 彩票网站开发租用焦作商城网站建设