基于Android系统的打气球游戏的设计与实现毕业设计说明书

上传人:无*** 文档编号:68286265 上传时间:2022-04-02 格式:DOC 页数:52 大小:6.05MB
收藏 版权申诉 举报 下载
基于Android系统的打气球游戏的设计与实现毕业设计说明书_第1页
第1页 / 共52页
基于Android系统的打气球游戏的设计与实现毕业设计说明书_第2页
第2页 / 共52页
基于Android系统的打气球游戏的设计与实现毕业设计说明书_第3页
第3页 / 共52页
资源描述:

《基于Android系统的打气球游戏的设计与实现毕业设计说明书》由会员分享,可在线阅读,更多相关《基于Android系统的打气球游戏的设计与实现毕业设计说明书(52页珍藏版)》请在装配图网上搜索。

1、毕业设计说明书基于Android系统的打气球游戏的设计与实现 计算机与科学技术学院0806034137学生姓名: 学号: 计算机科学与技术学 院: 专 业: 指导教师: 2012年 16月基于Android系统的打气球游戏的设计与实现摘要随着智能手机一步步走进普通人的生活,它将成为人们获取信息的主要设备。因此,手机的娱乐应用服务将会有很大的发展空间,游戏也是其中之一3。本系统主要是实现基于Android的打气球,打气球是一款来自红白机时期就非常盛行的游戏,其设计目的是训练人的应变能力。打气球这是一款简单的射击类游戏,通过主菜单界面选择进入不同模式进行游戏。游戏中有几种不同颜色的气球通过按屏幕发

2、射弓箭射击气球,射击不同颜色的气球会得到不同的分数,当时间达到一定的时候会根据所得分数判断输赢,从而进入胜利或失败界面。设计制作射气球游戏的目的在于主要实现一套Android游戏开发的解决方案,解决目前在Android游戏开发中所面临的几大问题。主要有游戏的关卡切换,游戏地图数据结构的实现、应用多种手机内置传感器进行游戏控制、游戏动画的实现、基于图形的碰撞检测、数据在手机系统和实现。解决这些在Android游戏开发中所共同面临的问题,对于Android游戏开发效率与Android游戏的质量有着极大的帮助作用。随着计算机游戏的发展,很多编程爱好者基于该游戏的思想开发出了各种版本、各种类型的飞机游

3、戏。这其中也包括很多手机版本的实现,伴随着Android SDK技术的不断发展,一些基于Android应用也不断推陈出新,很快推飞机大战便进入了千家万户。此Android飞机大战是基于Android SDK4.0基础上设计的,主要分为游戏开场动画模块、游戏操作模块、道具制造模块、分数统计模块四个功能模块的设计与实现。本文首先论述了android系统的背景和研究现状,接着简要的介绍了android的技术及对android分析,并且介绍了android应用程序的结构。在程序开发中,采用了先设计好游戏的类框架后 Design and implementation of the Ace game ba

4、sed on Android SummaryAs smartphones step into the lives of ordinary people , it will become the primary device for people to obtain information . Therefore , mobile entertainment applications will have much room for development , the game is one of them . The system is Android -based ace , aircraft

5、 from World War II is a very prevalent during the NES game , which is designed to train people s resilience. This is a classic aircraft flight shooting game , beautiful brilliant picture , the overall environment is mainly around the space -based, high-fidelity sound, the players presented a differe

6、nt shooting experience. Simple touch-screen operation , touch and hold the random one place , move around, will automatically attack enemies , evade enemies can move up and down . Players in the game have to do is drive the latest fighters , launched the attacks to the enemy headquarters. This requi

7、res players to clever use of limited space and access , reasonable arrangements for the aircrafts position was likely to complete the task. With the development of computer games , a lot of programming enthusiasts based on the idea of the game developed various versions , all types of aircraft game.

8、 This includes a lot of phone version of the achievement , along with the continuous development of Android SDK technology , a number of Android-based applications have continued to emerge , and soon World War II aircraft will be pushed into millions of households. This is the Android SDK4.0 Android

9、 aircraft on the basis of the design based on the initial interface is divided into the game , sound modules, game modules, module manufacturing aircraft shells of four modules design and realization .This paper first discusses the background and status of android system , and then a brief introduct

10、ion to the technology and analysis for android android , and describes the structure of android applications. In program development , designing a good game with a first class frame, and then realize the function of each class will be realized in accordance with the code and write .Keywords:android

11、games, android aircraft ace, smartphones 目录1 引言11.1 系统简介11.2 Android游戏的研究现状11.3 关于飞机大战游戏设计21.3.1基本思想21.3.2基本结构31.3.3适用条件32 开发环境及相关技术42.1 开发环境42.2 相关技术与工具42.2.1 Eclipse42.2.2 JDK42.2.3 ADT42.2.4碰撞检测技术52.2.5 SurfaceView53 需求分析63.1 系统功能需求63.1.1 业务需求分析73.1.2 用户需求分析73.1.2 功能需求分析73.2 功能划分概图94 概要设计104.1 总体

12、设计104.1.1 系统流程104.1.2 系统详细结构114.2 模块设计概述124.2.1 开场动画模块124.2.2 道具制造模块124.2.3 游戏操作模块134.2.4 分数统计模块134.3 数据结构及接口定义145 详细设计205.1 开场动画模块205.1.1 问题描述205.1.2 问题分析205.1.3 实现方法215.2 道具制造模块245.2.1 问题描述245.2.2 问题分析245.2.3 实现方法245.3 游戏操作模块285.3.1 问题描述285.3.2 问题分析285.3.3 实现方法285.3 分数统计模块355.3.1 问题描述355.3.2 问题分析3

13、55.3.3 实现方法356 系统测试376.1 软件测试的原则376.2 测试的方法376.3 本系统的测试386.3.1 测试用例的设计386.3.2 测试用例总结437 结论44参考文献45致谢461 引言1.1 系统简介随着社会的发展,人们的工作压力与日俱增。与此同时相应的减压放松的方式也慢慢发生了变化。人们更趋于在家或者工作闲余时间以电子游戏的方式达到娱乐的目的。一次,也就意味着,电子游戏的利润空间和发展空间是十分宽广的3。飞机大战是一款来自红白机时期就非常盛行的游戏,其设计目的是训练人的应变能力。飞机大战这是一款经典飞行射击类游戏,精美绚丽的画面,整体环境主要还是围绕太空为主,高保

14、真的音效,为玩家呈现一场不一样射击体验。简单的触屏操作,触屏按住随意一个地方,左右移动,便可自动攻击敌人,上下移动亦可躲避强敌。玩家在游戏中要做的就是驾驶着最新战机,向敌人的总部发起了冲击。本游戏利用Android开发语言,完成一个基于Android的飞行战斗类游戏开发。在该游戏中,加入对应的游戏策略模型,游戏声音,开场动画,计分分,关卡选择,等功能。创建友好的UI界面,较强的游戏可玩性,操作的友好性。并利用游戏设计原则,提高游戏的智能,增强游戏的吸引力3。 1.2 Android游戏的研究现状Android一词本意是指机器人,同时也指Google于2007年11月5日推出的开源手机操作系统。

15、Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。它是由一个由30多家科技公司和手机公司组成的开放手机联盟共同研发,将大大降低新型手机设备的研发成本,完全整合的全移动功能性产品成为开放手机联盟的最终目标5。自2007年Google发布Android系统1.0之后,各大手机生产厂商纷纷将目光投向了最具发展潜力的Android系统,并陆续推出了各种品牌的搭载Android系统的智能手机15。时隔四年,Android手机在手机市场中占的市场份额正以非常迅猛的速度上升:2010年市场份额:Symbian 36.6%、And

16、roid 25.5%、iPhone 16.7、windows Mobile 2.8%、linux 2.1%。Nokia的Symbian系统在Android系统的冲击下,正在从手机市场中的王者慢慢被挤下来。在未来的几年内,Android手机必定会占据手机市场的主要份额,所以在这种形式下,Android应用的前景也必定是前景一片大好。 现如今Android的市场份额占总体智能手机市场份额的50%以上,相对于前几年来说,其发展势头势不可挡。以至于越来越多的开发商加入了Android应用开发的行列7。在2010年,Android市场份额仅占4.7%左右,并其市场只有不到20000个应用程序。但在201

17、1年初,这个数字就已经超过了25万字大关。而随着越来越多的应用的诞生,由于其的多元化和普遍性越来越高,其发展趋势已开始渐渐逼近世界智能手机龙头苹果公司推出的ios系统。而在多个Android的应用程序排行榜中,无论是按照使用量或者人气,或者收入,70%以上的应用排行榜榜首都是游戏。可见,Android游戏应用已渐渐深入人心。Android手机游戏应用开发已渐渐占据市场主流12。现如今,电子游戏已慢慢渗透进人们生活中,并在扮演着越来越重的角色。可以说,随着它的迅猛发展,现今的电子游戏已经不仅仅是一种娱乐,而是形成了一种文化现象。随着社会的发展,人们的工作压力与日俱增。与此同时相应的减压放松的方式

18、也慢慢发生了变化7。人们更趋于在家或者工作闲余时间以电子游戏的方式达到娱乐的目的。一次,也就意味着,电子游戏的利润空间和发展空间是十分宽广的。而作为现代人不可或缺,随身携带的手机设备,则作为一类游戏的载体,有着广泛的发展空间。而Android作为主流智能手机系统之一,研究和开发相应应用游戏是时代发展的趋势13。1.3 关于飞机大战游戏设计1.3.1基本思想飞机大战这是一款经典飞行射击类游戏,精美绚丽的画面,整体环境主要还是围绕太空为主,高保真的音效,为玩家呈现一场不一样射击体验。简单的触屏操作,触屏按住随意一个地方,左右移动,便可自动攻击敌人,上下移动亦可躲避强敌。玩家在游戏中要做的就是驾驶着

19、最新战机,向敌人的总部发起了冲击。这就要求玩家巧妙的运用有限的空间和通道,合理的安排飞机的位置才可能完成任务。1.3.2基本结构本游戏开发设计共分为游戏开场动画、声音模块、游戏进行模块、道具制造模块、分数统计模块五个模块进行设计开发。通过对Base界面类的继承实现了游戏开场动画以及游戏资源文件的加载,当获取用户点击(单指)游戏开始时,游戏进入主界面,此时通过工厂类生产出飞机以及敌机,用户开始控制飞机进行游戏。该设计充分运用java面向对象的原理将所有的飞机建立不同的类用以实现。并且根据玩家的进度适当的出现道具,或是增强玩家飞机的子弹能力,或是赠予玩家刷屏炸弹,并实时对玩家计分。当玩家驾驶飞机死

20、亡后,将出现游戏统计界面,对玩家的信息进行统计。以此鼓励玩家1.3.3适用条件本次游戏设计可以在Android4.0版本以上的手机运行,能自适应Android手机的各种分辨率。创建友好的UI界面,较强的游戏可玩性,操作的友好性。并利用游戏设计原则,提高游戏的智能,增强游戏的吸引力。由于游戏设计之处考虑过使用cocos2d,但由于相关文档的困乏,并未采用。因此软件运行不如带引擎的游戏运行的流畅,并可能出现不跟手的现象,实属正常。2 开发环境及相关技术2.1 开发环境硬件环境:Intel Core i3 2100 MHz + 4GB RAM软件环境:Windows 7+Eclipse+JDK+ A

21、DT2.2 相关技术与工具2.2.1 EclipseEclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C+和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。2.2.2 JDKJDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet和应用程序的程序开发环境。它由一个处于操作系统层之上的运行

22、环境还有开发者编译,调试和运行用Java语言写的applet和应用程序所需的工具组成。JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK(Software development kit)。JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。其核心Java API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。Java API包括一些重要的语言结构以及基本图形,网络和文件I/O。一般来说,Java API的非I/O部分对于运行Java的

23、所有平台是相同的,而I/O部分则仅在通用Java环境中实现1。2.2.3 ADT即Android Development Tools,在Eclipse编译IDE环境中,需安装ADT (Android Developer Tools)Plug-in,这是Android在Eclipse上的开发工具。目前Android开发所用的开发工具是Eclipse,在Eclipse编译IDE环境中,安装ADT,为Android开发提供开发工具的升级或者变更,简单理解为在Eclipse下开发工具的升级下载工具2。其中还包括SDK(Software Development Kit),一般是一些被软件工程师用于为特定

24、的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。在Android中,它为开发者提供了库文件以及其它开发所用到的工具。简单理解为开发工具包集合,是整体开发中所用到的工具包,如果你不用Eclipse作为你的开发工具,你就不需要下载ADT,只下载SDK即可开发。2.2.4 碰撞检测技术碰撞检测在2D/3D游戏中至关重要,好的碰撞检测要求人物在场景中可以平滑移动,遇到一定高度内的台阶可以自动上去,而过高的台阶则把人挡住,遇到斜率较小的斜坡可以上去,斜率过大则把人挡住,在各种前进方向被挡住的情况下都要尽可能地让人物沿合理的方向滑动而不是被迫停下。在满足这些要求的同时还要做到足够精确

25、和稳定,防止人物在特殊情况下穿墙而掉出场景7。2.2.5 SurfaceView可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图容器。它的特性是:可以在主线程之外的线程中向屏幕绘图上。这样可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。在游戏开发中多用到SurfaceView,游戏中的背景、人物、动画等等尽量在画布Canvas中画出。3 需求分析3.1 系统功能需求3.1.1 业务需求分析虽然现在市面上存在着各种各样的游戏版本,可是飞机大战其市场还是相当大的,比如微信飞机大战。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强

26、.可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行.对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的,这样的小游戏刚好迎合了他们的需求. 飞机大战游戏基于JAVA平台编写,采用Android技术开发的一款手机游戏。手机游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。JAVA是基于虚拟机的

27、半解释型编译系统,其执行效率较C+等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。游戏的结束、开始、动态信息画面作为构成一个程序都是必不可少的重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图和人性化设置也需要有一定的考虑。 3.1.2 用户需求分析用户需求分析指在系统设计之前和设计、开发过程中对用户需求所作的调查与分析,是系统设计、系统完善和系统维护的依据。一个的好的用户需求分析可以让系统变的更加完善,能贴合玩家的真实需求,从而达到一个游戏与玩家完全契合的水平。本项目中用户的需求如下图所示: 图 3.1 用户需求用例图游戏开发成功后,最终用户为各个年龄

28、段的人群,用户范围相当广泛。但是用户对软件产品也有一定的要求: (1)简单易学 时间不管对于谁来说都是宝贵的,用户不会愿意花大量时间去学习使用一款 软件。一款软件如果操作界面不友好,让用户难以上手使用,那就说明这款软件开发得不够成功,从而失去大量的用户。所以本项目必须拥有良好的交互界面,让用户安装之后就能进行游戏。 (2)运行稳定 一款软件设计得不够好,那么就有可能在运行的时候出现一些不可预料的错误从而造成软件崩溃。如果用户正在游戏突然软件崩溃了,无疑会让用户感到非常不舒服,有可能就把软件给卸载了,这样也会失去很多用户。 (3)操作简便 用户不是程序员,他们不知道程序的内部逻辑。所以程序员必须

29、提供给用户便捷的操作接口来供用户操作,灵活便捷的操作性直接影响了一款软件的好坏。软件是做给用户使用的,所以一切都要站在用户的角度来看问题。 3.1.3 功能需求分析本项目是一个运行在Android手机上的游戏,玩家可以从手机触屏开始游戏,操控游戏,结束游戏; 玩家开始游戏后,在手机屏幕上绘制出一架玩家飞机以及多架敌机,玩家飞机可以响应用户的手指,随手指移动,并不断的发出子弹攻击敌机,敌机在屏幕上段随机出现,并沿着垂直线以一定的速度下落至屏幕下端,如果敌机碰上玩家飞机,那么游戏结束。同时生产一个太空幕布不断的下移。当玩家飞机的子弹碰上敌机时会根据敌机类型以及被攻击次数来选择是否坠毁,不论是玩家飞

30、机坠毁或者敌机坠毁,都会出现爆炸画面。 当游戏结束后,显示并保存玩家在游戏中所获得的分数。 本Android飞机大战游戏,总体分为以下几个四模块:(1) 开场动画模块本模块用于用户登陆游戏的设计,该模块具有初始画布功能,初始化声音功能,同时保持屏幕全屏并且屏幕常亮,能绘制飞机的过场动画以及开始游戏和退出游戏按钮,通过Java线程及Android线程知识,能通过不同的按钮点击返回不同的参数用以判断是进入游戏主界面还是退出游戏,如果没有操作的话,则一直停留在此界面,并且不停的播放飞机大战的过场动画,该模块设计精良,界面美观大方,飞机过场动画流畅。(2) 道具制造模块本模块用于在用户进入游戏主界面时

31、,制造出游戏运行时所需的道具,这些道具包括大型敌机、BOSS子弹、BOSS敌机、中型敌机、导弹物品、玩家飞机的子弹(两种威力)、玩家飞机、小型敌机。该模块为这些道具初始化了图片资源以及绘图方法,并且定义了每个道具的逻辑属性,以方便游戏操作模块、分数统计模块的调用。该模块充分运用java面向对象的知识,合理运用了接口的定义,为每个子弹,飞机都设置了基类,以方便日后对程序进行调整。(3) 游戏操作模块本模块为飞机大战游戏核心模块,进入本模块之后,Surface view会描绘出游戏背景幕布,以及玩家飞机,和上方飞来的敌机,本模块要求能监听玩家操作,玩家可以通过触摸屏触点的位置不同来控制飞机。在玩家

32、飞机出现时飞机连续发子弹,只要飞机出现,就持续发射。飞机具有多样性供玩家选择,飞机可以升级子弹威力、飞机可以改变子弹类型、还能出现大招即飞机有清屏导弹。游戏操作模块定义的敌机为上下飞行的,都是统一从屏幕上方飞下来,敌机不具备发射子弹功能,但是当敌机碰撞到玩家飞机后,玩家飞机死亡。当敌机只要出现在子弹图片范围内,根据子弹威力选择掉血或者爆炸。在游戏进行中,会出现音效,每次玩家飞机发射子弹是都会出现声音,当飞机爆炸是也会出现相应的音效。(4) 分数统计模块在游戏进行中时,本模块进行实时的分数统计,根据不同的击落类型给予玩家不同的分数,并在玩家游戏结束时,给出玩家分数统计结果,以此鼓励玩家。增加游戏

33、的趣味性以及可玩性。3.2 功能划分概图 图3.2 功能划分概图4 概要设计4.1 总体设计4.1.1 系统流程系统主要是设计设计并实现飞机大战游戏操作,通过画笔绘制游戏界面展示给玩家。系统流程如图4.1所示:图4.1 系统流程图4.1.2 系统详细结构系统流程只是大概描述了系统的整体数据流程并没有更加具体的数据结构的描述。下面让我们更深一层的描述系统的整体结构以及细节问题。如图4.2所示:图4.2 系统结构图4.2 模块设计概述如图4.2的系统详细结构图所示,系统虽然主要分为“开场动画模块”、“道具制造模块”、“游戏操作模块”、“分数统计模块”四个主要模块,但是每个模块都需要很多特殊的技巧以

34、及算法来保证其的正确实施,同时模块之间也需要良好的接口配合才行的。4.2.1 开场动画模块开场动画模块由MainActivity.java、ReadyView.java类来实现,MainActivity主要为游戏入口,可以通过Handler机制进行游戏各个模块的切换。ReadyView则是来绘制游戏的初始界面并将MainActivity的功能按钮显示在初始界面上,并对初始界面的飞机过场动画进行定义。绘制完成后将等待玩家操作是进入游戏还是退出游戏。本模块用于用户登陆游戏的设计,该模块具有初始画布功能,初始化声音功能,同时保持屏幕全屏并且屏幕常亮,能绘制飞机的过场动画以及开始游戏和退出游戏按钮,如

35、果没有操作的话,则一直停留在此界面,并且不停的播放飞机大战的过场动画,该模块设计精良,界面美观大方,飞机过场动画流畅。4.2.2 道具制造模块道具制造模块由cn.edu.nuc.object包的众多物品类来定义各个物品的属性,创建每个物品的类,GameObjectFactory相当于一个工厂类,可以将前面的所有的物品的实现方法定义在本类之中,以此来实现工程模式,工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。在本模式下仅实例一次对象,提高了工作效率。本类所使用的为简单工厂模式类,道具包括大型敌机、BOSS子弹、BOSS敌机、中型敌机、导弹物品、

36、玩家飞机的子弹(两种威力)、玩家飞机、小型敌机。该模块为这些道具初始化了图片资源以及绘图方法,并且定义了每个道具的逻辑属性,以方便游戏操作模块、分数统计模块的调用。道具类详解如图4.3所示:图4.3 道具类详解图4.2.3 游戏操作模块本模块为飞机大战游戏核心模块,由MainView.java来实现。当用户在ReadyView上点击开始游戏后,程序进入MainView,本来通过调用工厂方法生产出物品,根据游戏消耗和进行的情况,实时的制造相应的物品;通过游戏进行绘图模块,绘制游戏背景图,绘制飞机控件根据玩家操作进行逻辑判决,绘制画面。增加分数和等级,并发出相应的音效;通过背景移动模块,调整两个图

37、片的高度,制造出背景移动效果;通过运行间隔时间控制模块控制运行间隔时间。在玩家飞机出现时飞机连续发子弹,只要飞机出现,就持续发射。飞机具有多样性供玩家选择,飞机可以升级子弹威力、飞机可以改变子弹类型、还能出现大招即飞机有清屏导弹。游戏操作模块定义的敌机为上下飞行的,都是统一从屏幕上方飞下来,敌机不具备发射子弹功能,但是当敌机碰撞到玩家飞机后,玩家飞机死亡。当敌机只要出现在子弹图片范围内,根据子弹威力选择掉血或者爆炸。在游戏进行中,会出现音效,每次玩家飞机发射子弹是都会出现声音,当飞机爆炸是也会出现相应的音效。4.2.4 分数统计模块本模块由EndView.java来实现,当在MainView.

38、java中检测到玩家飞机的isAlive()参数为false时,即为玩家所驾驶的飞机因为撞击到敌机而死亡,此时通过Handler发出的消息,程序进入EndView中,在本模块中画笔绘制开场动画背景及按钮;画笔绘制玩家游戏最终得分;通过Android Handler为重新开始或者退出游戏按钮绑定相应的功能在游戏进行中时,本模块进行实时的分数统计,根据不同的击落类型给予玩家不同的分数,并在玩家游戏结束时,给出玩家分数统计结果,以此鼓励玩家。增加游戏的趣味性以及可玩性。4.3 数据结构及接口定义(1)开场动画模块private float fly_x;/ 图片的坐标private float fly

39、_y;private float fly_height;private float text_x;private float text_y;private float button_x;private float button_y;private float button_y2;private float strwid;private float strhei;private boolean isBtChange;/ 按钮图片改变的标记private boolean isBtChange2;private String startGame = 开始游戏;/ 按钮的文字private Strin

40、g exitGame = 退出游戏;private Bitmap text;/ 文字图片private Bitmap button;/ 按钮图片private Bitmap button2;/ 按钮图片private Bitmap planefly;/ 飞机飞行的图片private Bitmap background;/ 背景图片private Rect rect;/ 绘制文字的区域protected int currentFrame;/ 当前动画帧protected float scalex;/ 背景图片的缩放比例protected float scaley;protected float

41、screen_width;/ 视图的宽度protected float screen_height;/ 视图的高度protected boolean threadFlag;/ 线程运行的标记protected Paint paint; / 画笔对象protected Canvas canvas; / 画布对象protected Thread thread; / 绘图线程protected SurfaceHolder sfh;protected GameSoundPool sounds;public ReadyView(Context context,GameSoundPool sounds)p

42、ublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)public void surfaceCreated(SurfaceHolder arg0)public void surfaceDestroyed(SurfaceHolder arg0)public boolean onTouchEvent(MotionEvent event) public void initBitmap()public void release()public void drawSelf() public void run(

43、)public void setThreadFlag(boolean threadFlag) (2) 道具制造模块private static int currentCount = 0; /对象当前的数量public static int sumCount = 2; /对象总的数量private Bitmap bigPlane; / 对象图片protected int score; / 对象的分值protected int blood; / 对象的当前血量protected int bloodVolume; / 对象总的血量protected boolean isExplosion; / 判断

44、是否爆炸protected boolean isVisible; / 对象是否为可见状态public EnemyPlane(Resources resources)public void initial(int arg0,float arg1,float arg2)public void initBitmap() public void drawSelf(Canvas canvas) public void release()public boolean isCollide(GameObject obj) public int getHarm() public void setHarm(int

45、 harm)private static int currentCount = 0; /对象当前的数量private static int sumCount = 1;private Bitmap boosPlane;private Bitmap boosPlaneBomb;private int direction;/移动的方向private int interval;/发射子弹的间隔private float leftBorder;/飞机能移动的左边界private float rightBorder;/飞机能移动的右边界private boolean isFire;/是否允许射击priva

46、te boolean isCrazy;/是否为疯狂状态private List bullets;/子弹类public void setScreenWH(float screen_width,float screen_height)public void initial(int arg0,float arg1,float arg2)public void initButtle()public boolean shoot(Canvas canvas)public void logic()private int direction;/物品的方向private float middle_x; / 飞机

47、的中心坐标private float middle_y;private long startTime; / 开始的时间private long endTime; / 结束的时间private boolean isChangeBullet; / 标记更换了子弹private Bitmap myplane; / 飞机飞行时的图片private Bitmap myplane2; / 飞机爆炸时的图片private List bullets; / 子弹的序列public void changeButtle()public void isBulletOverTime()public GameObject

48、 createSmallPlane(Resources resources)public GameObject createMiddlePlane(Resources resources)public GameObject createBigPlane(Resources resources)public GameObject createBossPlane(Resources resources)public GameObject createMyPlane(Resources resources)public GameObject createMyBullet(Resources reso

49、urces)public GameObject createMyBullet2(Resources resources)public GameObject createBossBullet(Resources resources)public GameObject createMissileGoods(Resources resources)public GameObject createBulletGoods(Resources resources)(3) 游戏操作模块private int missileCount; / 导弹的数量private int middlePlaneScore;

50、/ 中型敌机的积分private int bigPlaneScore;/ 大型敌机的积分private int bossPlaneScore;/ boss型敌机的积分private int missileScore;/ 导弹的积分private int bulletScore;/ 子弹的积分private int sumScore;/ 游戏总得分private int speedTime;/ 游戏速度的倍数private float bg_y;/ 图片的坐标private float bg_y2;private float play_bt_w;private float play_bt_h;

51、private float missile_bt_y; private boolean isPlay;/ 标记游戏运行状态private boolean isTouchPlane;/ 判断玩家是否按下屏幕private Bitmap background; / 背景图片private Bitmap background2; / 背景图片private Bitmap playButton; / 开始/暂停游戏的按钮图片private Bitmap missile_bt;/ 导弹按钮图标private MyPlane myPlane;/ 玩家的飞机private BossPlane bossPla

52、ne;/ boss飞机private List enemyPlanes;private MissileGoods missileGoods;private BulletGoods bulletGoods;public MainView(Context context,GameSoundPool sounds)public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3)public void surfaceCreated(SurfaceHolder arg0) public void surfaceDes

53、troyed(SurfaceHolder arg0)public boolean onTouchEvent(MotionEvent event)public void initBitmap() public void initObject()public void release()public void drawSelf()public void viewLogic()public void addGameScore(int score)public void playSound(int key)(4)分数统计模块private int score;private float button_

54、x;private float button_y;private float button_y2;private float strwid;private float strhei;private boolean isBtChange;/ 按钮图片改变的标记private boolean isBtChange2;private String startGame = 重新挑战;/ 按钮的文字private String exitGame = 退出游戏;private Bitmap button;/ 按钮图片private Bitmap button2;/ 按钮图片private Bitmap b

55、ackground;/ 背景图片private Rect rect;/ 绘制文字的区域public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) public void surfaceCreated(SurfaceHolder arg0)public void surfaceDestroyed(SurfaceHolder arg0) public boolean onTouchEvent(MotionEvent event) public void initBitmap() public void r

56、elease()public void drawSelf()public void run()public void setScore(int score)5 详细设计本飞机大战游戏的设计看似简单,只有那么几个子模块,每个子模块的功能很清晰也很简单的样子,但是事实上却不是这样的。每个子模块除了要充分完成自己应有的功能外还要考虑与其它子模块的通信接口的定义,并且完成自己应有的功能时也会用到很多别的细小的编程技巧和方法。本部分名为详细设计,但是一定要详详细细的描述出所有的细节问题是很有难度的,在这里只是把最主要的问题抽出来详细说明,有些细节问题的描述可能会被忽略掉,但是会提到其作用的。本部分分四个

57、大的子模块来描述详细设计的过程。5.1 开场动画模块5.1.1 问题描述开场动画模块为整个游戏的入口,在本入口提供给玩家开始游戏、退出游戏的按钮,本模块实现的一个大功能就是如何为按钮实现功能,因为按钮为图片控件,并不能通过绑定监听器的方法来做到。而后就是开场动画的绘制,和初始界面的绘制,本模块为游戏的入口,因此应该设计的华丽,美观,能给用户眼前一亮的感觉。这就对Surface view绘图提出了一个高要求。5.1.2 问题分析关于按钮的实现设计UI线程和子线程交互的问题。当应用启动,系统会创建一个主线程(main thread)。这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线

58、程里,你的应用和Android的UI组件发生交互。所以main thread也叫UI thread也即UI线程。系统不会为每个组件单独创建线程,在同一个进程里的UI组件都会在UI线程里实例化,系统对每一个组件的调用都从UI线程分发出去。结果就是,响应系统回调的方法,永远都是在UI线程里运行。当App做一些比较耗时的工作比如访问网络或者数据库查询,都会阻塞UI线程,导致事件停止分发(包括绘制事件)。对于用户来说,应用看起来像是卡住了。所以必须把所有的UI操作放在UI线程里。5.1.3 实现方法在Android中,对于UI的操作通常需要放在主线程中进行操作。如果在子线程中有关于UI的操作,那么就需

59、要把数据消息作为一个Message对象发送到消息队列中,然后,由Handler中的handlerMessage方法处理传过来的数据信息,并操作UI。当然,Handler对象是在主线程中初始化的,因为它需要绑定在主线程的消息队列中。类sendMessage(Message msg)方法实现发送消息的操作。 在初始化Handler对象时重写的handleMessage方法来接收Message并进行相关操作。在每个按钮按下之后,系统会发送不同的消息送给消息队列,用以开始游戏或者退出游戏,在游戏开始后,如果玩家飞机死亡也会发送消息队列从而进入分数统计界面。Handler运行机制如图5.1所示:图5.1

60、 Handler运行机制(1)程序运行的入口Activity为MainActivity,在此Activity中的onCreate通过对GameSoundPool来创建一个声音对象,然后使用GameSoundPool.initGameSound()初始化当前声音对象的声音资源文件。而后等待Handler机制接受消息从而进行游戏操作或者其他。Handler的具体实现核心代码如下所示:private Handler handler = new Handler() Override public void handleMessage(Message msg) if(msg.what = ConstantUtil.TO_MAIN_VIEW) toMainView(); else if(msg.what = ConstantUtil.TO_END_VIEW) toEndView(msg.arg1); else if(msg.what = ConstantUtil.END_GAME) endGame(); ;(2) 程序通过调用ReadView来进行过场动画界面的初始化操作,在ReadView类中进行初始化时,首先加载图片资源,然后通过计算屏幕的比例,将图片资源使用画笔画到屏幕上,因考虑

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!