首页 飞机大战游戏毕业论文

飞机大战游戏毕业论文

举报
开通vip

飞机大战游戏毕业论文重庆航天职业技术学院 毕业设计说明书(论文) 摘 要 这款游戏的名字叫《飞机大战》,是使用J2ME开发的纵版飞行射击类游戏。J2ME(Java 2 Micro Edition) 是近年随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项开发技术。它定位在消费性电子产品的应用上,为设备提供了革命性的解决方案,并因其高度优化的Java运行环境和平台无关性而得到广泛的推广。 随着游戏的的日益普及、J2ME功能的不断完善,Java应用程序产生的增值服务逐渐体现出其非凡的影响力,并对人们的生活...

飞机大战游戏毕业论文
重庆航天职业技术学院 毕业 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 说明书(论文) 摘 要 这款游戏的名字叫《飞机大战》,是使用J2ME开发的纵版飞行射击类游戏。J2ME(Java 2 Micro Edition) 是近年随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项开发技术。它定位在消费性电子产品的应用上,为设备提供了革命性的解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 ,并因其高度优化的Java运行环境和平台无关性而得到广泛的推广。 随着游戏的的日益普及、J2ME功能的不断完善,Java应用程序产生的增值服务逐渐体现出其非凡的影响力,并对人们的生活和资讯起着不可忽视的作用。本论文着眼于J2ME技术的应用,开发了一款可商用的小型游戏程序。 本论文主要介绍了J2ME的相关技术及此程序的结构分析和具体功能的实现及分析游戏现状,对行业的相关分析,以及本程序用到的相关技术和实现。由于本人技术水平有限,程序功能比较简陋和单调,更多的功能只能后续增加和完善。 此次设计在Microsoft Windows XP系统下,以Java为开发语言,在eclipse开发平台上进行游戏的设计与实践 关键字:J2ME,飞机游戏,Java ABSTRACT This game is called" air war", is the use of J2ME development version flight shooting game. J2ME ( Java Micro Edition2) in recent years with various devices, especially the mobile communication equipment and the rapid development of the birth of a development technology. It is located in consumer electronics applications, as the device provides innovative solutions, and because of its highly optimized Java runtime environment and platform independence and widely. As the game 's popularity, J2ME function ceaseless and perfect, Java applications the value-added service gradually reflect the extraordinary influence, and the people's life and information plays a role can not be ignored. This paper focuses on J2ME technology application, developed a commercial small game program. This paper mainly introduces the J2ME technology and the procedures for structural analysis and specific function of the realization and analysis of current situation of industry of game, correlation analysis, and the procedures used in the related technology and implementation. Because of my limited level of technology, function relatively simple and monotonous, more functions can increase and improve the follow-up. The design of the Microsoft Windows XP system, which is developed by Java language, in eclipse development platform for game design and Practice Keyword: J2ME, Java aircraft games 目 录 摘要………………………………………………………………………………I 目录………………………………………………………………………………III 前言………………………………………………………………………………1 1 J2ME技术概览…………………………………………………………………3 1.1 J2ME的概念 ……………………………………………………………3 1.2 J2ME简介 ………………………………………………………………3 1.2.1 J2ME构架 ………………………………………………………3 1.2.2 关于J2ME ………………………………………………………5 2 开发环境与相关技术…………………………………………………………6 2.1 开发环境 ………………………………………………………………6 2.2 JAVA语言特点 …………………………………………………………6 2.3 Photoshop介绍…………………………………………………………7 2.4 关于Eclipse ……………………………………………………………8 2.5 JAVA应用程序 …………………………………………………………8 3 游戏的需求分析………………………………………………………………10 3.1 游戏功能介绍……………………………………………………………10 4 程序结构、设计与实现………………………………………………………12 4.1 本程序结构………………………………………………………………12 4.2 游戏类构成………………………………………………………………12 4.2.1 控制台(GameStart)类的功能及特点 …………………………12 4.2.2 人物类(Wanjia)的功能及特点…………………………………21 4.2.3 甲方子弹类(ZiDan)的功能及特点………………………………27 4.2.4 甲方血条类(Wxuetiao)的功能及特点 …………………………30 4.3 游戏中的事件处理………………………………………………………31 4.3.1 键盘监听事件 ……………………………………………………32 4.4 测试………………………………………………………………………32 5 结论 ……………………………………………………………………………36 5.1 本程序的总结和展望……………………………………………………36 5.2 本程序以后需完善的地方………………………………………………36 5.3 感想………………………………………………………………………37 致谢…………………………………………………………………………………38 参考文献……………………………………………………………………………39 前 言 随着计算机的性能的提高,新一代计算机的运行速度是老产品所不能比的。随着计算机的运算能力的日趋强大,游戏也越做越复杂,高性能的计算机能为新一代的图形技术提供更好的支持。新一代的游戏也只有同时代的计算机可以运行。高品质的画面是众多游戏开发商的目标。 JAVA技术已经从一种最初用来编写与硬件无关的嵌入式系统的编程语言变成了一种与厂商无关、与硬件无关的健壮的服务器端技术,它使整个企业界可以全面发掘以Web为核心的应用程序的巨大潜力。随着JAVA技术的不断更新提高,J2ME技术的出现,使得小型游戏越来越成为我们关注的焦点。J2ME技术目前最流行的就是在制作小型游戏方面,JAVA游戏的出现使得这一技术更有它的用武之地,发挥着他灵活、轻便、快捷的作用。 本文主要叙述游戏的制作步骤,游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在MIDP2.0中提供了用于增强游戏功能的game包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。 玩家的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的智能性;敌军的运行算法也要进行相关的设置,已免游戏过于简单。 对于双方发射的子弹应该赋予不同的速度,同时,程序应该设定敌军的子弹不与敌军进行碰撞检测,已增加游戏的可玩性。 双方在前进时也需要考虑到是否碰撞到对方,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。每一次刷新页面、每前进一步都需要进行相关的碰撞检测。 游戏的结束、开始、动态信息画面作为构成一个程序都是必不可少的重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图和人性化设置也需要有一定的考虑。 JAVA是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器进行程序打包后的优化。 下面在本篇文章中就将详细的介绍J2ME这一技术在小型游戏制作方面的具体过程以及其重要的作用。 1 J2ME技术概览 1.1 J2ME的概念 J2ME的全称是Java2 Micro Edition (J2ME)——Java2技术微型版,与J2SE、J2EE一样都是有美国SUN微系统公司提出的JAVA技术 规范 编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载 。 1.2 J2ME简介 1.2.1 关于J2ME 它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java”的名称正式发布。     Java 编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了 C++ 语言面向对象技术的核心,Java舍弃了C ++语言中容易引起错误的指针、运算符重载、多重继承等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java SE 1.5 版本中,Java 又引入了泛型编程、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。   Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。但在 J2SE 1.4.2 发布后,Java 的执行速度有了大幅提升。 与传统程序不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软件必须相互兼容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。 Sun 公司对 Java 编程语言的解释是:Java 编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。 J2ME是为了能够开发运行在小型设备、独立设备、互联移动设备、嵌入式设备上的JAVA应用程序而被提出的。J2ME是建立在一个由概要描述、配置、JAVA虚拟机和操作系统等部分组成的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 架构之上的,这些内容共同组成了完整的J2ME实时运行环境。它的技术核心是由一个JAVA虚拟机( JVM )及一套适合运行在上述设备环境上的API接口构成。 J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算设备的开发人员,这些开发人员需要在他们的产品中整合跨平台的能力。 无线设备和小型计算设备的消费者期望这些设备能够有较高的性能。他们希望小型计算设备有快速的响应时间,与同种设备相兼容,拥有功能完备的应用程序。消费者希望桌面计算机和笔记本电脑上的软件和功能同样能够运行在移动电话和个人数字助理上。 为了满足他们的需求,开发人员必须重新考虑他们设计计算机系统的方式。开发人员需要利用商业计算机上现有的前端和后端软件的计算能力,并将这些能力传递到微型、移动和无线的计算设备上。J2ME能够以最小的修改来实现这种传递,如果应用程序的设计是可伸缩的,应用程序就可以适应小型计算设备上有限的资源。 J2ME为在小型电子设备上创建性能卓越的网络应用提供了一套完整的解决方案,能很好的解决软件跨平台的兼容性和安全性的问题。 1.2.2 J2ME构架 J2ME架构的模块化设计使应用程序可以灵活适应小型计算设备的限制。J2ME架构没有替代小型计算设备的操作系统。相反,J2ME架构由位于原生操作系统之上的多层软件组成,这些软件共同称为“连接有限设备配置”(Connected Limited Device Configuration, CLDC)。安装在操作系统之上的CLDC形成了小型计算设备的运行时环境。 J2ME架构由3个软件层组成:第一层是包括在内的配置层,这个层次直接与原生操作系统进行交互。配置层还处理profile和JVM之间的交互。第二层是profile层,由小型计算设备的应用程序编程接口(API)的最小集合组成。第三层是Mobile Information Device Profile( MIDP )层。MIDP层由用户网络连接、永久存储和用户界面的java API组成。它还能够访问CLDC库和MIDP库。 2 开发环境与相关技术 2.1 开发环境 操作系统:Microsoft Windows XP 程序语言:JAVA2 开发包: Wireless Toolkit 2.5.2 IDE:Eclipse 2.2 JAVA语言特点 1.面向对象:现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心以算法为驱动的话,面向对象的编程语言则是以对象为中心以消息为驱动。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。 2.平台无关性:Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。平台无关有两种:源代码级和目标代码级。C和C++具有一定程度的源代码级平台无关,表明用C或C++写的应用程序不用修改只需重新编译就可以在不同平台上运行。Java主要靠Java虚拟机(JVM)在目标码级实现平台无关性。 3.分布式:分布式包括数据分布和操作分布。数据分布是指数据可以分散在网络的不同主机上,操作分布是指把一个计算分散在不同主机上处理。Java支持WWW客户机/服务器计算模式,因此,它支持这两种分布性。对于前者,Java提供了一个叫作URL的对象,利用这个对象,你可以打开并访问具有相同URL地址上的对象,访问方式与访问本地文件系统相同。对于后者,Java的applet小程序可以从服务器下载到客户端,即部分计算在客户端进行,提高系统执行效率。 4.可靠性和安全性: Java虽然源于C++,但它消除了许多C++不可靠因素,可以防止许多编程错误。第一,Java是强类型的语言,要求显式的方法声明,这保证了编译器可以发现方法调用错误,保证程序更加可靠;第二,Java不支持指针,这杜绝了内存的非法访问;第三,Java的自动单元收集防止了内存丢失等动态内存分配导致的问题;第四,Java解释器运行时实施检查,可以发现数组和字符串访问的越界。 2.3 Photoshop介绍 Photoshop是平面图像处理业界霸主Adobe公司推出的跨越PC和MAC两界首屈一指的大型图像处理软件.它功能强大,操作界面友好,得到了广大第三方开发厂家的支持,从而也赢得了众多的用户的青睐. ADOBE PHOTOSHOP最初的程序是由Mchigan大学的研究生Thomas创建,后经Knoll兄弟以及ADOBE公司程序员的努力ADOBE PHOTOSHOP产生巨大的转变,一举成为优秀的平面设计编辑软件。它的诞生可以说掀起了图象出版业的革命,目前ADOBE PHOTOSHOP最新版本为6.0,它的每一个版本都增添新的功能这使它获得越来越多的支持者也使它在这诸多的图形图象处理软件中立于不败之地。 Adobe产品的升级更新速度并不快,但每一次推出新版总会有令人惊喜的重大革新.Photoshop从当年名噪一时的图形处理新秀.经过3.0,4.0,5.0,5.5的不断升级,直到目前最新的6.0版,功能越来越强大,处理领域也越来越宽广,逐渐建立了图像处理的霸主地位. Photoshop支持众多的图像格式,对图像的常见操作和变换做到了非常精细的程度,使得任何一款同类软件都无法望其颈背;它拥有异常丰富的插件(在Photoshop中叫滤镜),熟练后您自然能体会到"只有想不到,没有做不到"的境界. 而这一切,Photoshop都为我们提供了相当简捷和自由的操作环境,从而使我们的工作游刃有余.从某种程度上来讲,Photoshop本身就是一件经过精心雕琢的艺术品,更像为您度身定做的衣服,刚开始使用不久就会觉得的倍感亲切. 当然,简捷并不意味着傻瓜化,自由也并非随心所欲,Photoshop仍然是一款大型处理软件,想要用好它更不会在朝夕之间,只有长时间的学习和实际操作我们才能充分贴近它. 2.4 关于Eclipse Eclipse是一个开源的,基于java的可扩展开发平台。最早是由Object Technologics International 这家公司开发,该公司于1996年被IBM并购后,将Eclipse改为Open Source sofeware。它最大的特点是:采用了插件的结构,通过下载安装不同的插件,就可以实现不同类型的程序开发。Eclipse相关的许可证是大多数基于(CPE),CPL是一个为Open Sourse Initiative(OSI)所认可的许可证。由于Eclipse Foundation的建立,Eclipse的许可证将逐渐趋向于使用Eclipse Public Licese(EPL),EPC是一个与CPL相类似的许可证,正在进行OSI的认证工作。作为当今最流行的JAVA开发IDE之一,java社群使用Eclipse以及基于Eclipse技术而来的IBM Websphere的开发者已经超过了半数。Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。在Eclipse中几乎每样东西都是插件,实际上正是运行在eclipse平台上的种种插件提供我们开发程序的各种功能。同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。Eclipse的发行版本都已经带有最基本的插件,方便了开发人员。 2.5 JAVA应用程序 用Java可以写两种类型的程序:小程序(又叫Java Applet)和应用程序(Java Application)。小程序是嵌入在HTML文档中的Java程序;而Java应用程序是从命令行运行的程序。对Java而言,Java小程序的大小和复杂性都没有限制。事实上,Java小程序有些方面比Java应用程序更强大。但是由于目前Internet通讯速度有限,因此大多数小程序规模较小。小程序和应用程序之间的技术差别在于运行环境。Java应用程序运行在最简单的环境中,它的唯一外部输入就是命令行参数。 3 游戏的需求分析 3.1 游戏功能介绍 本游戏适合于休闲游戏,这是一款空中大战的游戏。本游戏是以两个人玩的游戏,主要以打败对方为主要目标,双方都有相同的血,如果在任意时间内,能够将对方的血耗完,那么,就取得游戏成功。 游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。 这款游戏名字叫“飞机大战游戏”。在这款游戏中,甲方所控制的玩家将出现在屏幕的上侧,乙方所控制的敌军则出现在屏幕的下侧。双方以互相攻击的方式,以及上下左右移动阻挡对方的攻击。双方实际是控制开着自己,尽量打中对方和避免对方的子弹打中自己,双方的初始生命值是100,每被敌人的子弹打中减去10,当有一方生命数为0时,则游戏结束。当攻击命中对手时,就可以使对方的生命值减少,不过不是任何的攻击方式都可以击中对方,没有被子弹打中时是不能使对手的生命点数减少的。游戏画面主要是一般的图片,本游戏主要是以四个键(左A、右D、上W、下S)控制甲方的运动方向,x键主要是甲方发射子弹,以四个方向键(左、右、上、下)控制甲方的运动方向,k键主要是乙方发射子弹,是一款简单易懂容易上手的休闲的单机游戏。 这个游戏主要应该有哪几个部分组成呢?首先肯定得有玩家,有了玩家肯定还需要敌军的,不然玩家跟谁玩呢?玩家、敌军、都有了,应该不需要什么了吧,错!还得需要子弹吧,不然他们怎么打呢?打到最后应该有人牺牲吧,所以还需要生命,换句话说就是血条,这应该不需要什么了吧,不对,游戏做出来是要给别人玩的,当然需要美化一下了,所以需要有开始界面、游戏中的背景、结束界面了。下面我们在分析下,游戏该怎么实现呢?又有哪些情况需要考虑呢? 程序运行时应该对玩家是否飞出屏幕的范围进行检测,如果飞出屏幕,就应该重新设定玩家的位置。 根据游戏设定敌人不能与玩家重合,则他每走一步都需要检测一下是否与玩家碰撞。同理,还需要检测玩家子弹与敌军、敌军与玩家子弹是否碰撞。如果发生碰撞,将相关精灵图片替换为爆炸图片。 敌人需要具有一定的智能性,以便对玩家攻击,使游戏具有一定的可玩性。敌人可以在适当时候转向或者开炮火,同时,程序应该检测敌军是否飞出了界外。 敌军在游戏中的位置,当其进入屏幕后,利用随机数来确定敌军小怪的X、Y坐标,使其出现的位置各不相同,小怪的个数也是采用随机数来完成的。 敌军玩家的消失,应采用图像的封装技术,当子弹图片与玩家(敌军)的图片相交时,这时,玩家的生命值减少,敌军消失。当两者中的一方消失时,则游戏结束。 4 程序结构、设计与实现 4.1 本程序结构 图4.1 本程序结构 这个结构简述了本游戏的行动进程。本游戏没有多大的功能,只是简单的描述了游戏的运行顺序。 4.2游戏类构成 游戏由控制台(GameStart)、人物类(Wanjia)、子弹类(ZiDan)、血条类(Wxuetiao)构成。其中控制台(GameStart)类继承了窗体属性,用来进行其他类的控制,把其他不同种类的属性联系起来;人物类(Wanjia)描述任务形象及其他自身的方法和属性;子弹类(ZiDan)进行自身的方法和子弹移动的方位;血条类(Wxuetiao)自身的相关信息。其对方的各个属性也一样。各类都是用与类名称相同的文件名来存储的。 4.2.1 控制台(GameStart)类的功能及特点 控制台(GameStart)类这个是整个游戏的控制台,也是整个游戏的中心枢纽,把不同的类(创建人物对象和子弹的集合)根据调用连串起来,使得整个程序有顺序节奏的表现出来。如图4.2简单的描述了总控制台的结构。 图4.2 控制台结构 本图描述了在控制台设置的所有方法,属性.它分为三个区域:方法区、实例化区、属性区。实例化区是实例各种对象;属性区是定义对象;方法区是使用到的技术。 import java.awt.Frame; import java.awt.Graphics; import java.awt.Image; import java.awt.MediaTracker; import java.awt.Toolkit; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List; import java.util.Random; //继承窗体 public class GameStart extends Frame { // *********************属性区******************/ int GameType = 0; // 定义坐标 int x = 100; int y = 100; // 得到工具 Toolkit tk = Toolkit.getDefaultToolkit(); // 定义背景图片 Image bj_img = tk.getImage(GameStart.class .getResource("Images/bj.png")); // 定义玩家图片(及甲方) Image pe_img = tk.getImage(GameStart.class .getResource("Images/jj.jpg")); // 定义玩家子弹图片(及甲方) Image zidan_img = tk.getImage(GameStart.class .getResource("Images/jzdd.png")); // 定义敌军子弹图片(及乙方子弹) Image dizidan_img = tk.getImage(GameStart.class .getResource("Images/yzd.jpg")); // 定义敌军图片(及乙方) Image dijun_img = tk.getImage(GameStart.class .getResource("Images/yj.jpg")); // 定义开始界面图片 Image kaishi_img = tk.getImage(GameStart.class .getResource("Images/ks.png")); // 定义结束界面图片 Image djieshu_img = tk.getImage(GameStart.class .getResource("Images/jieshu.png")); // 定义一个空的图片 Image bw_img = null; // *********************实例化区***********************/ // 实例化背景 Beijing bj = new Beijing(0, 0, this); // 实例化玩家(及甲方) Wanjia wj1 = new Wanjia(x, y, true, this); // 子弹集合 List zidan_list = new ArrayList(); // 敌军(及乙方) Dijun dijun = new Dijun(450, 200, true, this); // 敌军子弹集合 List dizidan_list = new ArrayList(); // 玩家血条及其出现在界面的位置 Wxuetiao wx = new Wxuetiao(50, 50, this); // 敌人血条及其出现在界面的位置 Dxuetiao dx = new Dxuetiao(450, 50, this); // *****************方法区********************/ // 显示窗体的方法 public void showFrame() { // 设置窗体标题 setTitle("飞机大战游戏"); // 设置窗体大小 setSize(550, 700); // 设置窗体位置(宽、高/getWidth() / 2, getHeight() / 2) setLocation(100, 200); // 设置窗体的大小不可以改变 setResizable(false); // 设置窗体添加监听器 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { // 触发窗体关闭的事件 super.windowClosing(e); // 关闭程序 System.exit(2); } }); // 添加键盘监听器 addKeyListener(new KeyAdapter() { private int game_type; private Object music; // 按下键盘事件 public void keyPressed(KeyEvent e) { // 调用飞机移动的方法 wj1.move(e); // 调用敌军移动的方法 dijun.move(e); } @Override public void keyReleased(KeyEvent e) { wj1.Ress(e); dijun.Ress(e); } } ); // 创建线程 MoveThead mt = new MoveThead(); // 启动线程 mt.start(); // 设置窗体可见 setVisible(true); } public static void main(String[] args) { // 实例化游戏控制台对象 GameStart gs = new GameStart(); // 调用显示窗体的方法 gs.showFrame(); } // 创建线程类 private class MoveThead extends Thread { // 重写运行方法 public void run() { // 死循环调用重画方法 while (true) { try { // 为线程添加睡眠时间(即延迟) Thread.sleep(30); } catch (InterruptedException e) { e.printStackTrace(); } // 调用重画方法 repaint(); wj1.fangxiang(); dijun.fangxiang1(); } } } // 画的方法 public void paint(Graphics g) { //利用GameType的值来判断是否进入游戏界面 if (GameType == 0) { g.drawImage(kaishi_img, 0, 0, this); } //GameType==1时,进入游戏界面 else if (GameType == 1) { // 画背景图片 bj.drawMe(g); // 画玩家 wj1.drawMe(g); // 画玩家血条 wx.drawMe(g); // 画敌人血条 dx.drawMe(g); // 画子弹 for (int i = 0; i < zidan_list.size(); i++) { ZiDan zidan = zidan_list.get(i); zidan.drawMe(g); zidan.hitDijun(dijun); } // 画敌军 dijun.drawMe(g); for (int i = 0; i < dizidan_list.size(); i++) { DiZiDan dzidan = dizidan_list.get(i); dzidan.drawMe(g); dzidan.hitDijun(wj1); } } //GameType==2时,则是游戏结束界面 else if (GameType == 2) { g.drawImage(djieshu_img, 0, 0, this); } } // 双缓冲技术 是为了解决当数据量很大时,绘图可能需要几秒钟甚至更长的时间,而且有时还会出现闪烁现象 public void update(Graphics g) { // 判断图片的是否为空 if (bw_img == null) { // 为空创键图片 bw_img = createImage(550, 700); } // 得到空白图片的画笔 Graphics bw = bw_img.getGraphics(); // 调用画的方法将图片画在空白图片上 paint(bw); // 把画好的图片画在窗体上 g.drawImage(bw_img, 0, 0, this); } } 4.2.2 人物类(Wanjia)的功能及特点 首先创建玩家的一个class类,玩家的名字命名为Wanjia。将玩家的图片加载在游戏中,首先从控制台中获取工具包,写入所有玩家的属性,所有与玩家有关系的东西,都将写入这里。如图4.3,简单介绍Wanjia的结构,及Wanjia的坐标,大小,子弹的移动等: 图4.3 Wanjia结构 import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.KeyEvent; public class Wanjia { // ********属性区*******/ // 玩家的坐标 int w_x; int w_y; // 玩家的大小 int w_weidth = 200; int w_height = 239; //玩家的状态 boolean w_live; //定义玩家血条的初始值 int w_hp = 100; boolean w_up, w_down, w_left, w_right; // 窗体对象的引用 GameStart gs; // *********************方法区*******************/ // 构造方法用于初始化对象的属性 public Wanjia(int wX, int wY, boolean wLive, GameStart gs) { w_x = wX; w_y = wY; w_live = wLive; //调用总控制台的信息 this.gs = gs; } // 画自己 public void drawMe(Graphics g) { if (w_live != true) { gs.GameType = 2; return; } // 将玩家图片画出来 g.drawImage(gs.pe_img, w_x, w_y, null); } // 玩家移动的方法 public void move(KeyEvent e) { // 向上移动(W) if (e.getKeyCode() == KeyEvent.VK_W) { w_up = true; } // 向下移动(S) else if (e.getKeyCode() == KeyEvent.VK_S) { w_down = true; } // 向左移动(A) else if (e.getKeyCode() == KeyEvent.VK_A) { w_left = true; } // 向右移动(D) else if (e.getKeyCode() == KeyEvent.VK_D) { w_right = true; // 判断子弹的发射(X) } else if (e.getKeyCode() == KeyEvent.VK_X) { fire(); } // 发射子弹 else if (e.getKeyCode() == KeyEvent.VK_ENTER) { gs.GameType = 1; } } // 玩家移动的方法 public void Ress(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_W) { w_up = false; } // 向下移动 if (e.getKeyCode() == KeyEvent.VK_S) { w_down = false; } // 向左移动 if (e.getKeyCode() == KeyEvent.VK_A) { w_left = false; } // 向右移动 if (e.getKeyCode() == KeyEvent.VK_D) { w_right = false; } } public void fangxiang() { if (w_up && !w_down && !w_left && !w_right) { if (w_y >= 30) { w_y -= 5; } } else if (w_down && !w_up && !w_left && !w_right) { if (w_y <= 500 ) { w_y += 5; } } else if (w_left && !w_up && !w_down && !w_right) { if (w_x >= 0) { w_x -= 5; } } else if (w_right && !w_up && !w_down && !w_left) { if (w_x <= 700 ) { w_x += 5; } } } public void fire() { if (w_live != true) { gs.GameType = 2; return; } ZiDan zidan = new ZiDan(w_x + 10, w_y + 10, true, gs); gs.zidan_list.add(zidan); } // 封装敌机 public Rectangle getRectangle() { return new Rectangle(w_x, w_y, w_weidth, w_height); } public boolean isW_live() { return w_live; } public void setW_live(boolean wLive) { w_live = wLive; } } 4.2.3 甲方子弹类(ZiDan)的功能及特点 首先创建甲方子弹的一个class类,玩家的名字命名为ZiDan。将甲方子弹的类容从控制台调用过来,这里写入所有子弹的属性,所有与子弹有关系的东西,都将写入这里。如,坐标,大小,子弹的移动等 图4.4 Zidan结构 import java.awt.Graphics; import java.awt.Rectangle; import java.util.List; public class ZiDan { // ********属性区*******/ // 定义坐标 int z_x; int z_y; // 定义大小 int z_width = 80; int z_height = 100; //血条的状态 boolean z_live; // 窗体对象的引用 GameStart gs; // ********方法区**********/ // 构造方法用于初始化对象的属性 public ZiDan(int zX, int zY, boolean zLive, GameStart gs) { z_x = zX; z_y = zY; this.z_live = zLive; this.gs = gs; } // 画自己 public void drawMe(Graphics g) { g.drawImage(gs.zidan_img, z_x, z_y, null); // 调用移动 move(); } // 子弹的移动 public void move() { z_x +=2; } public void hitDijun(Dijun dijun) { if (this.z_live && dijun.isD_live() && this.getRectangle().intersects(dijun.getRectangle())) { this.z_live = false; gs.dijun.d_hp -= 10; if (gs.dijun.d_hp == 0) { dijun.setD_live(false);} } } public Rectangle getRectangle() { return new Rectangle(z_x, z_y, z_width, z_height); } } 4.2.4 甲方血条类(Wxuetiao)的功能及特点 首先创建甲方血条的一个class类,玩家的名字命名为Wxuetiao。将甲方血条的类容写入这里,这里包括血条的所有属性,所有与血条有关系的东西,都将写入这里。如,坐标,大小,血条的减少等 图4.5 Wxuetiao结构 import java.awt.Color; import java.awt.Graphics; public class Wxuetiao { // ************************属性区*************************/ // 血条的坐标 int wx_x; int wx_y; // 血条的大小 int wx_weidth; int wx_height; // 窗体对象的引用 GameStart gs; // *****************方法区****************************/ // 构造方法用于初始化对象的属性 public Wxuetiao(int wxX, int wxY, GameStart gs) { wx_x = wxX; wx_y = wxY; this.gs = gs; } public void drawMe(Graphics g) { g.setColor(Color.red); g.drawRect(wx_x, wx_y, 100, 10); g.fillRect(wx_x, wx_y, gs.wj1.w_hp, 10); } } 4.3 游戏中的事件处理 有了键盘控制就要添加键盘监听器,监听器监视玩家在键盘上的操作即上下左右移动的方向,按下或者释放鼠标都在监听器的范围类。 4.3.1 键盘监听事件 当按下键盘上的操作键盘上的按键时,就会触发这key事件,系统并会自动调用keyPressed()方法,并且系统将捕获到的键码传递给该方法,在下面的这段代码中方法判断了所按的按键值则执行其他的操作任务。 addKeyListener(new KeyAdapter() { // 按下键盘事件 public void keyPressed(KeyEvent e) { // 调用飞机移动的方法 wj1.move(e); // 调用敌军移动的方法 dijun.move(e); } // 释放键盘事件 public void keyReleased(KeyEvent e) { wj1.Ress(e); dijun.Ress(e); } }); 4.4测试 完成游戏的程序编辑,进行游戏测试。 图4.6 游戏开始界面 进入游戏测试界面,进行游戏的测试,根据提示按下Internet键直接进入游戏的开始场景。进入到游戏的操作界面: 图4.7 游戏进行界面 甲方利用键盘上的左(A)右(D)上(W)下(S)发射子弹(X)攻击对方及移动。乙方利用键盘上的方向键移动和利用K键发射子弹。如果有一方的血条使用完,则游戏结束。如图4.8: 图4.7游戏结束界面 完成游戏测试。 5 结论 在此次课程设计中,遇到了一些问题,如:程序功能不能完全实现,对于面向对象的方法了解不够透彻,运用到实际的软件开发中存在着困难;对于Java语言,以前只学习到了一些最基本的知识,要在短时间内用Java语言来开发软件是一个较大的挑战;对于开发软件的流程不熟悉,适应起来比较慢,编写需求说明书和设计规格说明书时,自己感觉难以动手,这表明所学的知识不能灵活运用到实际中。 对于以上的问题,自己有清楚的认识,解决办法是需要大量阅读相关的书籍,多看些项目的源代码。对于书上以及网站上下载的资料中的Java实例必须理解,还有多跟精通JAVA语言的老师和同学请教和交流,取其精华。对于实际动手能力与软件开发的流程的适应,必须多进行实际的练习与操作,才能有所进步。 5.1本程序的总结和展望 由于时间有限,本程序只能实现一些比较简单的功能,包括开始游戏、查看帮助、关于游戏的介绍等比较简单的功能,未完善之处,1、程序未能实现全屏,因为整个程序基本是用绘画的方法编写,所以只能固定在一个屏幕大小的上。2、未加入积分排行榜。3、若有机会还会在以后将程序变为联网的双人对战。 本程序实现了简单类似于对打类游戏,但目前功能比较简单,不能吸引什么人玩,但在目前的游戏中并没有落伍,它适合多层次的人玩,所以后期展望在游戏中加入更多的元素,加入更多的功能,例如排行榜等。 5.2本程序以后需完善的地方 1.加入排行榜 2.将游戏设置为全屏可见。 3.增加游戏运行的效率. 5.3感想 这次的设计暂告一段落,由于实习的原因,时间有限,所以这个游戏只实现了一些比较简单的功能,加之自己的水平非常有限,只能通过别人的帮忙和网上查找资料来进行。我也领会到学习一门语言不是那么的简单,JAVA没以前的VB那么简单,VB很多都是可视化的,只需要输入些逻辑代码,而JAVA的代码则需要自己完全输入,而且方法很多,如不能熟记就需要经常查看API文档,这也让学习带来了不少的难度。而想一下代码该如何写常常就会令我的一小时、一天的时间过去了,但时常会毫无所获,只能借助网络的力量,不断的查找。 我自己感觉此次课程设计做得挺成功的,通过这一次实践编程,我学到了不少有关JAVA的实际编程的知识。 此次的课程设计,对我来说撰写文档似乎是一个更大的挑战。撰写文档不仅要求我们要对自己程序非常熟悉:程序的总体框架,功能,如何实现,存在什么问题等,同时还要求我们有清晰的思维和准确的表达能力以及严密的逻辑性。因此,写完这篇文档对于我们自身来说自然是获益匪浅的。 致谢 首先感谢我的指导老师舒蕾老师,她在我做毕业设计的过程中提出了很多指导性的方案,对我的论文提出了更多详细的需求和指导。为了指导我们的毕业论文,她们放弃了自己的休息时间,她们的这种无私奉献的敬业精神令人钦佩,在此我向她们表示我诚挚的谢意。 在本次任务中,足下学院的朱超学长以及班上的同学对我的帮助是不可小觑的,因为本身我对JAVA程序并不是太熟悉,但是最后,在他们的帮助下,还是完成了一个完整的程序出来,虽然这个程序并不是十分的尽善尽美,但是,毕竟也算是完成了,再此,再次的对他们说一声谢谢。 最后还要感谢答辩组对本毕业设计的考核,希望能通过这次毕业设计能让自己的专业水平更上一层楼。 参考文献 1) [1] 孙卫琴.java 面向对象编程.电子工业出版社.2007 2) [2]杨绍方,王颖,林锦全. Java程序设计基础. 科学出版社,2001 3) [3]郑阿奇,姜乃松,殷红先. Java实用教程. 电子工业出版社,2005 4) [4]于译源. Java程序设计及应用. 大连理工大学出版社,1997 5) [5] JAVA编程思想(第四版) 机械工业出版社 6) [6]汤庸,冯智圣,申建芳. Java程序设计与实践. 冶金工业出版社,2004 毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得 及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作 者 签 名:       日  期:        ​​​​​​​​​​​​ 指导教师签名:        日  期:        使用授权说明 本人完全了解 大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:        日  期:        ​​​​​​​​​​​​ 学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名: 日期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权      大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名: 日期: 年 月 日 导师签名: 日期: 年 月 日 注 意 事 项 1.设计(论文)的内容包括: 1)封面(按教务处制定的标准封面格式制作) 2)原创性声明 3)中文摘要(30 0字 个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字 左右)、关键词 4)外文摘要、关键词 5)目次页(附件不统一编入) 6)论文主体部分:引言(或绪论)、正文、结论 7)参考文献 8)致谢 9)附录(对论文支持必要时) 2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。 3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。 4.文字、图表要求: 1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写 2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画 3)毕业论文须用A4单面打印,论文50页以上的双面打印 4)图表应绘制于无格子的页面上 5)软件工程类课题应有程序清单,并提供电子文档 5.装订顺序 1)设计(论文) 2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订 运行 进入游戏 游行中 结束游戏 总控制台 属性区 方法区 实例化区 甲方、 血条及子弹 实例化背景 定义图片 获取工具 乙方、血条及子弹 显示窗体的方法 创建线程类 画的方法 双缓冲技术 得到画壁画图 判断图片形式 写运行方式 设置窗体标题、大小、位置 窗体监听事件 判断进入游戏 键盘监听器 调用重画方 法 添加睡眠时 间 循环调用 是 进入游戏 否 游戏结束 属性区 方法区 画甲方 移动方法 窗体对象引用 初始化对象 属性 封装甲方 甲方的位置 Wanjia 方法区 初始化对象 属性 画甲方子弹 封装甲方子弹 甲方子弹的移动 属性区 甲方子弹 的位置 窗体对象引用 Zidan 属性区 窗体对象引用 甲方血条的位置 方法区 初始化对象 属性 画矩形 Wxuetiao 第I页 共VI页
本文档为【飞机大战游戏毕业论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
不系舟红枫
从教近30年,经验丰富,教学水平较高
格式:doc
大小:327KB
软件:Word
页数:51
分类:
上传时间:2019-01-20
浏览量:264