基于JAVA的手机游戏开发技术研究_第1页
基于JAVA的手机游戏开发技术研究_第2页
基于JAVA的手机游戏开发技术研究_第3页
基于JAVA的手机游戏开发技术研究_第4页
基于JAVA的手机游戏开发技术研究_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、潍 坊 学 院 本 科 毕 业 论 文 摘 要 1 基于基于 javajava 的手机游戏开发技术研究的手机游戏开发技术研究 摘要:摘要:手机游戏开发是当今最火爆的游戏开发之一,已其低成本、多用户为优势,在 进几年时间里极为流行。而j2me又是手机游戏开发平台中运用最为广泛的一种。 j2me(java 2 micro edition) 是近年来随着各种不同设备,尤其是移动通信设备的飞速发 展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上,对设备的智能化、 多样化,提供了革命性的解决方案,并因其“write once, run anywhere”的java特性而提 高开发的效率。 随着

2、手机的日益普及、java功能在移动设备上的实现,java应用程序产生的手机增 值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的信息起着不可忽视的 作用。 本文先介绍了java语言的历史,以及java语言的现状。然后讨论了一个基本的游 戏开发平台的搭建,最后再以一个实际游戏的开发探讨了现在最为流行的游戏开发框架, 和游戏制作后期的优化、调试。 关关键词键词: :j2me midp cldc 面向物件 三号黑体加粗 潍 坊 学 院 本 科 毕 业 论 文 摘 要 2 a java phones game based on the development of technology res

3、earch abstract:the development of cell phone game is one of the most explosive development of the game, with the advantage of low-cost, multi-user.progressive extremely popular in a few years time. the j2me mobile phone game is the most widely used as a development platform. j2me is a kind of fast d

4、eveloping technology implemented on various devices especially on mobile communication equipments. it focuses on application for consumptive electronic products, providing revolutionary solution to the intelligentization and diversification of the equipment. it improves the efficiency of the develop

5、ment process and it thanks to its “write once, run anywhere” nature. when cell phone is getting ever more popular nowadays, with the implementation of java technology on mobile equipment, increment of capital on communication service exhibits its force in every peoples lives, providing them more con

6、vinent information. this paper introduces the history of the java language, and the status in quo of the java language. then it discusses the platform to develop the basic structures of the game. at last, the paper ,with a real game, probes the development framework of game and the optimization and

7、debugging of the latest period of the game. key words: j2me midp cldc o bject-oriented 潍 坊 学 院 本 科 毕 业 设 计 1 目录目录 1 前言 .1 1.1 题目背景及情况.1 1.2 国内外研究状况.1 1.3 题目研究方法.1 1.4 论文构成及研究内容.2 2 java 语言综述.3 2.1 java 的由来 .3 2.2 java 语言的特点 .3 2.3 java 的三个版本 .4 3 移动开发简介.8 3.1 cldc 和 midp.8 3.2 移动平台开发特点.9 3.3 搭建开发环境.

8、9 4 游戏结构分析 .13 4.1 初步构思.13 4.2 游戏基本框架.13 4.3 算法分析.19 5 后期优化与平台移植 .25 5.1 为什么要优化.25 5.2 何时不用优化.25 5.3 从哪里开始优化.26 5.4 结论.27 结束语 .28 参考文献 .29 附录 .30 致 谢 .50 潍 坊 学 院 本 科 毕 业 设 计 1 1 1 前言前言 1.11.1 题目背景及情况题目背景及情况 1. 手机游戏开发,当前最火的游戏开发类型之一; 2. 手机游戏开发,处于成长时期; 3. 适合个人或小团队开发; 4. 开发特点: (1). 低预算 (2). 小型的开发团队 (3).

9、 技术要求合理,易于管理,无须特别的设备,例如图像处理设备。 (4). 基于开放的标准 (5). 移动电话是天生的多人游戏平台 1.21.2 国内外研究状况国内外研究状况 .1 国外国外 在国外,手机游戏正在经历一个黄金发展时期。日本是游戏产业最发达的国家, 早在几年前,日本的手机游戏业就已经蓬勃发展起来。就拿全球最大的手机java游戏霸 主宫路武来说,从他2000年创办手机游戏公司开始,只花了4年时间,就在日本这个全 球最大的手机游戏市场建立了霸业,实现年营收入2300万美元的奇迹。虽然美国相对 于日本及一些欧洲国家,在手机java游戏方面的发展相对滞后,但是在2003年,其

10、手机 游戏市场的收入也已经达到1600万美元。 .2 国内国内 中国有着近3亿的手机用户,即使只有10%的用户,每月只下载一款游戏,也足以 使其形成一个规模庞大的产业。但是目前仅有不足1%的用户下载过手机游戏,这使得 这块被无数人看好的市场并没有达到和人们预期相吻合的水平。人们似乎更容易接受 移动其它的增值业务(比如短信、彩铃业务等) ,而对手机游戏的认知度却相当低。 1.31.3 题目研究方法题目研究方法 通过一个实际的游戏的开发来分析手机游戏开发流程和一些相应的技术。本设计 在借鉴一款现有游戏和游戏开发资料并根据自己爱好的基础上设计完成,使设计目标 潍 坊 学 院 本 科

11、毕 业 设 计 2 更加明确,开发过程更加简化,游戏框架和结构更加完善,设计思想更加体现实用性。 1.41.4 论文构成及研究内容论文构成及研究内容 论文由语言、平台介绍和游戏结构、算法两大部分组成。研究开发一个手机游戏 的基本框架、分析开发流程、在这个游戏中运用的算法、技术和最后如何测试优化代 码。 潍 坊 学 院 本 科 毕 业 设 计 3 2 2 javajava 语言综述语言综述 java语言自1991年问世以来,以其方便、易用、跨平台等特点,受到广大程序员 的青睐。在业界有着举足轻重的地位。 2.12.1 javajava 的由来的由来 java是由james gosling、pai

12、ck naughton、chris wart、ed frank和mike sheridan于 1991年在sun microsystems公司设计出来的。开发第一个版本花了18个月。该语言开始 名叫“oak”,于1995年更名为“java”。从1992的秋天oak问世到1995的春天公开发布java 语言,许多人对java的设计和改进做出了贡献。bill joy、arthur van hoff、jonathan payne、frank yellin和tim lindholm是主要的贡献者,正是他们的贡献使最初原型得以 成熟。 java的最初推动力并不是因特网。而是源于对独立于平台语言的需要,这

13、种语言可 创建能够嵌入微波炉、遥控器等各种家用电器设备的软件。用作控制器的cpu芯片是 多种多样的,但c以及其它绝大多数语言的缺点是只能对特定目标进行编译。尽管为任 何类型的cpu芯片编译c程序是可能的,但这样做需要一个完整的以该cpu为目标的c 编译器,而创建编译器是一项既耗资巨大又耗时较长的工作。因此需要一种简单且经 济的解决方案。为了找到这样一种方案,gosling和其它人开始一起致力于开发一种可 移植、跨平台的语言,该语言能够生成运行于不同环境、不同cpu芯片上的代码。他 们的努力最终促成了java的诞生。 2.22.2 javajava 语言的特点语言的特点 java是一种简单的面向

14、对象的分布式的解释的健壮的安全的结构中立的可移植的性 能很优异的多线程的动态的语言。有其以下几个特点: 1.简单 java语言的简单性主要体现在以下三个方面: (1) java的风格类似于c+,因而c+程序员是非常熟悉的。从某种意义上讲,java 语言是c及c+语言的一个变种,因此,c+程序员可以很快就掌握java编程技术。 (2) java摒弃了c+中容易引发程序错误的地方,如指针和内存管理。 (3) java提供了丰富的类库。 2.面向对象 潍 坊 学 院 本 科 毕 业 设 计 4 面向对象可以说是java最重要的特性。java语言的设计完全是面向对象的,它不支 持类似c语言那样的面向过

15、程的程序设计技术。java支持静态和动态风格的代码继承及 重用。单从面向对象的特性来看,java类似于smalltalk,但其它特性、尤其是适用于 分布式计算环境的特性远远超越了smalltalk。 3.健壮性 java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出 现的错误。java自己操纵内存减少了内存出错的可能性。java还实现了真数组,避免了 覆盖数据的可能。这些功能特征大大缩短了开发java应用程序的周期。java提供null指 针检测数组边界检测异常出口字节代码校验。 4.安全性 java的安全性可从两个方面得到保证。一方面,在java语言里,像指针和释放内存

16、 等c+功能被删除,避免了非法记忆操作。另一方面,当java用来创建浏览器时,语言 功能和一些浏览器本身提供的功能结合起来,使它更安全。 5.可移植性 同体系结构无关的特性使得java应用程序可以在配备了java解释器和运行环境的任 何计算机系统上运行,这成为java应用软件便于移植的良好基础。但仅仅如此还不够。 如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。 在任何java解释器中,数据类型都是依据以上标准具体实现的。因为几乎目前使用 的所有cpu都能支持以上数据类型、8至64位整数格式的补码运算和单/双精度浮点运算。 java编译器本身就是用java语言编写的。java

17、运算系统的编制依据posix方便移植的限 制,用ansi c语言写成。java语言规范中也没有任何“同具体实现相关”的内容。 2.32.3 javajava 的三个版本的三个版本 随着java技术的不断发展,它根据市场进一步细分为:针对普通pc应用的 j2se(java 2 standard edition) 、针对企业网应用的j2ee(java 2 enterprise edition) 、和 针对嵌入式设备及消费类电器的j2me(java 2 micro edition)三个版本。 .1 j2sej2se(javajava 2 2 standardstandard edit

18、ionedition)技术应用)技术应用 java 2标准版是一种开发和部署平台,提供了编写桌面、工作站应用程序所有必 潍 坊 学 院 本 科 毕 业 设 计 5 需的功能。j2se软件是快速开发、部署关键任务和企业应用程序的首选解决方案。 j2se 1.4版本是基于java跨平台技术和强有力的安全模块而开发的,其最新的特征和功 能极大地提高了java语言的伸缩性、灵活性、适用性,以及可靠性。 j2se 1.4 特点: (1)良好的计算性能和缩放能力。 j2se 1.4版是一个快速开发和配置跨平台的企业级应用与服务的综合性平台。它提 升了java计算的性能与缩放能力,代表了java技术的大跨步

19、进展。有了j2se 1.4版,企 业就可以通过更简易的步骤、花费更少的时间,采用java技术开发与配置要求更高的应 用了。j2se 1.4版在java客户机应用方面得到了重大性能提升。基于swing的java小程序 和应用程序在图形用户界面(gui)的响应速度上也大有提高。 (2)跨平台 j2se 1.4版是一个具有综合性能的平台,能使一个完整的、可缩放的高性能应用配 置在任何种类的平台上。 (3)支持web服务 j2se 1.4版与以前各j2se版全面兼容。j2se 1.4版对ssl、ldap和corba等业界 标准技术也给予支持,因此保证了在不同平台、系统和环境间的互操作能力。j2se 1

20、.4 版支持xml技术和一整套安全服务,因此为基于各类标准的可互操作应用与服务的创 建奠定了重要基础。有了j2se 1.4版与java web services developer pack的结合,开发商 就能创建、测试和配置web服务了。 (4)完整性 j2se 1.4版还是一个完整的开发环境。开发商可基于这一环境创建功能丰富的交互 式应用。这些应用可以配置在任何平台上。j2se 1.4具有新的gui控制功能、快速的 java 2dt图形功能、支持国际化与本地化扩展和新的配置选项,并对windows xp提供 扩展支持。 总之,j2se 1.4版是多种不同风格软件的开发基础,包括客户端jav

21、a小程序和应用 程序,以及独立的服务器应用程序等。j2se 1.4版还是j2me的基础,是j2ee执行程序 的推动力。 java之所以能够发展得很快,是因为互联网的发展非常快。java可以和浏览器结合 在一起,因而很自然地在桌面系统得到广泛应用。从计算的结构来看,java主要分三大 类:第一是服务器端,这里就有了j2ee企业版;第二是桌面pc,这一类用的是j2se标 准版;第三就是掌上电脑、移动设备,用的都是j2me。但是,大部分非企业级软件还是 在j2se上开发的比较多。首先,这是因为很多的应用软件都是在j2se上开发的;其次, j2se是和j2ee兼容的,企业版是在标准版上的扩充,在j2s

22、e的版本上开发的软件,拿 到企业的平台上是一样可以运行的;再次,一般开发还是在j2se的环境上,只是说 潍 坊 学 院 本 科 毕 业 设 计 6 j2me提供微型版的一个环境。在j2se上虚拟出一个环境,开发出来的应用软件是可以 拿到微型版上运行的。 .2 j2eej2ee(javajava 2 2 enterpriseenterprise editionedition)技术应用)技术应用 j2ee是sun公司推出的一种全新概念的模型,比传统的互联网应用程序模型更有优 势。 1. j2ee模型 j2ee的应用编程模型(j2ee blueprints)提供了一种用于实施基于j2

23、ee多层应用的 文档和实例套件的体系模型,简化了这项复杂的工作。它被开发人员用作设计和优化 组件,以便开发人员从策略上对开发工作进行分工。 j2ee应用编程模型要求开发者将自己的工作分成两类:商业逻辑和表示逻辑,其 余则由系统资源自动处理,不必为中间层管道进行编码。这样,开发人员就能将更多 的时间花在商业逻辑和表示逻辑上。对重视缩短项目周期的公司来说,这种转变深受 欢迎。 2.j2ee平台 j2ee平台是运行j2ee应用的标准环境,由j2ee部署规范(一套所有j2ee平台产品 都必须支持的标准) 、ietf标准集和corba标准组成。最新的j2ee平台还添加了 javabean组件模型。开发人

24、员可以利用javabean组件模型来自定义java类实例,并可通 过已定义的事件访问java类。 j2ee支持ejb,因此开发人员可以执行多用户交易功能。当在j2ee服务器上运行 时,enterprise javabeans将应用逻辑分成可再利用和可扩展的代码段。enterprise javabeans并不是新特征,但是通过定义标准客户端和服务api,j2ee增强了它的能力 和可移植性。 ejb在服务器的一个容器内运行,提供所有典型的中间层服务,如事务管理、安全、 远程客户连接、生存周期管理和数据库连接缓冲。为了让事务系统在存在ejb容器的情 况下运行,开发人员只需在部署描述文件中定义bean

25、s的事务属性即可。 j2ee通过定义一组标准的结构来实现它的优势,例如: (1)j2ee application programming model,是一种用于开发多层次、瘦型客户用 户程序的标准设计模型; (2) j2ee platform,是一个标准的平台,用来整合j2ee的应用程序,并指定一 系列的接口和方法; (3)j2ee compatibility test suite,是一套兼容测试组件,用来检测产品是否同 j2ee平台兼容; 潍 坊 学 院 本 科 毕 业 设 计 7 (4)j2ee reference implementation,用来示范j2ee的能力。 3.j2ee服务器

26、 sun的j2ee服务器通过java 命名和目录接口(jndi) 、认证、http及与enterprise javabeans兼容的能力,提供命名和目录服务。jndi是java平台的一种标准扩展版,向 企业内的命名和目录服务提供具有java功能的,带有统一接口的应用,包括 ldap。j2ee服务器还利用了java servlet技术。java servlet可以看作是运行在服务器上 的一个小程序,它向开发人员提供以组件为基础创建基于web应用的、独立于平台的 方法。它不像利用cgi那样具有性能局限。java servlet是一种扩展web服务器功能的简 单技巧。由于它是用java编写的,因而能

27、够访问整个java api库,也包括用于访问企业 数据库的jdbc api。 .3 j2mej2me(javajava 2 2 micromicro editionedition)技术的应用)技术的应用 j2me(java 2 platform micro edition)是为无线电子市场所设计的,包括jvm规范 和api规范。其api规范是基于j2se的。j2me 定义了一套合适的类库和虚拟机技术。 这些技术可以使用户、服务提供商和设备制造商通过物理(有线)连接或无线连接, 按照需要随时使用丰富的应用程序。j2me又被称为java 2 微型版,被使用在各种各样 的消费电子产品

28、上,例如智能卡、手机、pda、电视机顶盒等方面。当然了,j2me也 提供了java语言一贯的特性,那就是跨平台和安全网络传输。它使用了一系列更小的包, 而且javax.microedition.io为j2se包的子集。j2me可以升级到j2se和j2ee。 像其它版本一样,j2me具有很多java技术特性,主要有: (1)可以在各种支持java的设备上运行; (2)代码短小; (3)充分利用java语言的优势; (4)安全性好; (5)用j2me实现的应用可以方便地升级到j2se、j2ee。 j2me定义两个配置:connected device configuration(连接设备配置,cd

29、c)和限制 性更强的connected limited device configuration(有限连接设备配置,cldc)。 java之所以能够发展得很快,是因为互联网的发展非常快。java可以和浏览器结合 在一起,因而很自然地在桌面系统得到广泛应用。从计算的结构来看,java主要分三大 类:第一是桌面pc,这一类用的是j2se标准版;第二是服务器端,这里就有了j2ee企 业版;第三就是掌上计算机、移动设备,用的都是j2me。但是,大部分非企业级软件 还是在j2se上开发的比较多。首先,这是因为很多的应用软件都是在j2se上开发的; 其次,j2se是和j2ee兼容的,企业版是在标准版上的扩

30、充,在j2se的版本上开发的软 潍 坊 学 院 本 科 毕 业 设 计 8 件,拿到企业的平台上是一样可以运行的;再次,一般开发还是在j2se的环境上,只 是说j2me提供微型版的一个环境。在j2se上虚拟出一个环境,开发出来的应用软件是 可以拿到微型版上运行的。 潍 坊 学 院 本 科 毕 业 设 计 9 3 3 移动开发简介移动开发简介 手持设备之所以能够时时刻刻伴随人们的生活,其最重要的特性就是便携性,并 且由于着重考虑了省电设计,手持设备一般可较长时间的处于可工作状态。 从中国现在的情况来看,中国移动运营商都将j2me作为其应用产品运行的一个基 本平台。支持j2me已经成为运营商对手机

31、厂商的一个基本要求。所以,利用j2me进行 开发,是符合基本发展趋势的一个做法。 3.13.1 cldccldc 和和 midpmidp cldc(connected limited device configuration,连接限制设备配置),运行在这一 配置上的程序称为midlet,在kvm上进行解释。 cldc设备的最低配置为:cpu为16位、32位主频在 16mhz以上的处理器,设备 的内存比较少,可能只有512kb,甚至更少。现在硬件的发展非常快,以前所定义的 cldc的设备目前的设备甚至远远超过原来的定义。不过请注意一下,j2me 对cldc 设备配置的定义只是一个最低要求的定义。

32、其实目前很多cldc设备的配置都远远超过 上面的配置,不过要分辨cldc设备主要要从设备特点上进行区别。这些设备的特点是: 无线连接 没有稳定的电源供应(通常使用电池) 设备外设资源极少 cldc 规范:目前分为 v1.0 jsr 30,v1.1 jsr 139 midp(mobile information device profile)是一套java应用编程界面(application programmers interfaces, api).他们与cldc一起向诸如蜂窝电话等移动信息设备提供一 个完整的java应用运行环境。midp中包含有下列api包: javax.microediti

33、on.lcdui用户接口(ui)api,它为midp应用提供了一整套实现用 户接口的功能特性。 javax.microedition.rms移动信息设备描述提供一种让midlets永久储存并在以后 可以取回数据的机制。 javax. microedition.midlet这个midlet包明确定义了midp应用,也定义了应用 和应用环境之间的交互。 javax. microedition.io移动信息设备还描述包括基于有限连接设备配制 genericconnection框架的网络支持。 潍 坊 学 院 本 科 毕 业 设 计 10 3.23.2 移动平台开发特点移动平台开发特点 手持设备的特性

34、要求决定了它的硬件特性,也就决定了能够在手持设备上运行的 软件也应具有相应的特性。手持设备上的应用程序一般短小精悍,针对特定的业务功 能进行实现,极少出现在pc上那种大而全的软件。由于硬件平台的限制导致某些时候 手持设备开发难度要大于pc平台。 3.33.3 搭建开发环境搭建开发环境 现在针对java的开发软件很多,类似eclipse、jbliuder、netbeans、jcreater 各个工具性能的使用方法都不一样,这里我选择的完全免费的开源工具eclipse3.2,虽 说是免费软件,不过功能完全不次于像jbliuder这样的商业软件。 一门好的程序开发语言需要有好的开发环境做基础,j2m

35、e也不例外,我就来总结 一下如何利用eclipse搭建j2me的开发环境。 搭建一个最基本的开发环境需要下载以下工具: 1. jdk 1.6http:/ 2. wtk 2.5http:/ 3. eclipseme 1.5/index.html 4. eclipse 3.2.1 如有需要还可以下载eclipse多国语言包(languagepack)。 .1 工具介绍工具介绍 wtk的全称是sun j2me wireless toolkit sun的无线开发工具包。这一工具包 的设计目的是为了帮助开

36、发人员简化j2me的开发过程。使用其中的工具可以开发与 java technology for the wireless industry (jtwi, jsr 185)规范兼容的设备上运行的j2me 应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作 时为止可以获取有四个版本,分别是1.0.4,,2.0,2.1,2.2,和2.5.2。每个版本都包括 英语,日语,简体中文,繁体中文4个语种包。 在安装wtk之前需要注意的是,由于安装程序会自动寻找jdk的路径,所以一定 要将jdk正确安装。 eclipseme是帮助开发者开发j2me midlet的eclipse插件。e

37、clipseme提供了下列功 能以帮助开发者轻松的创建midlets: 1. 无线工具包首选项 潍 坊 学 院 本 科 毕 业 设 计 11 2. 创建新的j2me midlet套件专案 3. 创建新的midlet 4. java应用描述文件编辑器 5. 对class档进行增量的/自动的预检验 6. 支持从eclipse中启动运行j2me仿真器 7. 打包以及部署(包括无线下载方式)测试,并可以使用proguard对输出包进行 混淆 .2 工具安装方法工具安装方法 由于jdk、wtk、eclipse的安装方法和普通软件无差别,所以只介绍eclipseme的 安装方法和在ecli

38、pse环境下wtk的配制。 首先进入eclipse接口并通过其帮助菜单下的软件更新弹出的“查找并安装”- “新建已归档的站点” ,然后选取下载的eclipseme文件的路径,按照提示完成安装。 安装成功以后在eclipse接口点击“windows” ,打开“preferences” ,如果出现了 “j2me”项,表示安装正确。如图3.1所示 潍 坊 学 院 本 科 毕 业 设 计 12 图 3.1 eclipseme 安装成功以后的“preferences” 接下来需要配制wtk仿真器路径。在“preferences”里,展开“j2me”分支,选 择“device management” ,再

39、点击“import” 。如图3.2所示 潍 坊 学 院 本 科 毕 业 设 计 13 图 3.2 配制 wkt 路径 在“specify search directory:”文本框中输入wtk的安装路径(例如:d:wtk2.5) , 点击“refresh” 。几秒种过后“device”表格中将出现wtk自带的几款仿真器列表,表 示wtk配制正确,点击“finish”结束配制。 至此一个最基本的j2me开发环境就配制完成了。 潍 坊 学 院 本 科 毕 业 设 计 14 4 4 游戏结构分析游戏结构分析 java和c+其中的一个的不同之处就是,c+虽然已经采用了面向对象的理论, 但其中还是包含到

40、有面向过程的理论在里边,java则是一门完全面象对象的程序语言, 鼓励广大程序员将数据完整的封装,通过get和set方法来访问和改变类里的私有数据。 这一点完全体现了面向对象思想里的数据封装这一特性,但是这种方式需要不断 的调用方法,势必对性能造成一定的损失(关于手机游戏的优化的其中一项就是减少方 法的调用)。因为每次调用方法都会消耗部分cpu时间,所以如果是经常被修改或访问 的数据我们需要将其访问权限设置为public,通过“对象.数据”的方式访问以节约cpu 时间。 4.14.1 初步构思初步构思 根据面向对象的程序设计思想(oop),此程序划分了6个类。 .1 类的划分类

41、的划分 对象(object):思维、感受和动作所作用的物件或精神体玩家为一种对象。 玩家是一种物件;敌机是一种对象,不过这种物件有多中形态;boss和地图也是 一种物件。 撇开midlet和canvas类,其它由自己创建的类有4个,map地图类、plane敌机类、 boss关底boss类(继承自plane) 、playerplane玩家飞机类。 .2 各个类之间的关系各个类之间的关系 kjava程序的入口都是midlet类的startapp()方法,所以在midlet类中实例化 canvas类。 由于plane敌机类和boss类有许多共同点,所以boss继承自敌机类,playe

42、rplane 玩家飞机类和map地图类各自独立,以上四个类都在canvas类中实例化,进行协调和控 制。 潍 坊 学 院 本 科 毕 业 设 计 15 4.24.2 游戏基本框架游戏基本框架 1. map地图类: 地图类是一个比较简单的类,使用一张背景图片循环滚动就完成了。所以最主要 的两个方法就是movemap()和drawmap(),另外为了切换关卡的时候换地图还需要个更 换地图的方法changemap()。 public class map public map(int gate) /根据关卡来构建地图 public void drawmap(graphics g) /绘制地图 publ

43、ic void movemap()/计算绘制地图需要的数据 public void changemap(int gate)/根据关卡更换地图 2. plane敌机类: 由于plane敌机类需要派生出boss类,所以先要找出boss和普通敌机之间的共同 之处。 由于boss和普通敌机有很多共同属性例如:生命值、帧尺寸、碰撞范围等,还有 一个比较重要的共同方法,就是发射子弹。所以敌机类在计划的时候需要考虑到子类 属性和代码的复用性。 敌机子弹使用具有static属性的子弹数组来做,这表示所有实例化的敌机对象和 boss对象都使用的一个子弹数组(子弹池) 。 由于敌机发射子弹的方式和boss不一样,

44、默认发射子弹方法的访问权限为private 子类无法访问,所以重载了发射子弹方法供子类使用,访问权限为protected。 敌机将使用类似子弹的方法来实现,实例化五个敌机对象作为一个对象池,每次 需要刷新敌机的时候就遍历对象池中是否有空闲对象。普通敌机有很多种类型,类型 不同的敌机生命值和飞行方式都不同,所以使用一个初始化方法initplane(),根据随机 数来随机生成敌机。敌机被击爆或者飞出边界时需要重新放回对象池,需要一个消失 敌机的方法dispearenemy()。 主要机构还是和地图类一样,计算再绘制。需要计算敌机方法compute()和计算子 弹方法computbullet(),然

45、后绘制到屏幕drawenemy()和drawbullet()。 潍 坊 学 院 本 科 毕 业 设 计 16 public class plane public plane()/构造 public void drawenemy(graphics g) /画敌机 static void drawbullet(graphics g)/画子弹 public void dispearenemy()(/消失敌机 public static void computbullet()/计算子弹坐标 private void shoot(int player_x, int player_y)/敌机发射子弹 pr

46、otected void shoot(int player_x, int player_y, int gate)/重载发射子弹方法 public void compute(int type, int player_x, int player_y)/计算敌机的数据 public void initplane(int type, int num)/初始化敌机 3. boss 类: 继承自 plane 类,使用 plane 类的子弹池和子弹方法,还使用 plane 类的一些属性。 boss 还有一些特殊子弹,比如散弹和激光。绘制激光方法 laser()和发射散弹方法 shoot_boss(),发射普

47、通子弹的话直接调用父类的 shoot()方法。boss 生命值较大,所 以需要画一个血条 bosslife() boss 人工智能,需要判断 boss 的移动方向和什么时候发射什么样式的子弹, bossai()方法。 每一关都会初始化一个新的 boss 出来需要初始化方法 initboss() 计算数据然后绘制,compute()和 drawboss() 。 public class boss extends plane public boss()/构造 private void bosslife(graphics g) /画 boss 血条 潍 坊 学 院 本 科 毕 业 设 计 17 pu

48、blic void drawboss(graphics g, int gate) /画 boss public void initboss(int newgate) /初始化 boss private void laser(graphics g, boolean turn) /绘制激光 private void shoot_boss(int playerx, int playery)/不同类型子弹射击 private void compute()/计算数据 public void bossai(int playerx, int playery)/boss 人工智能 4. playerplane

49、玩家飞机类: 此类实现了玩家对飞机的控制和飞机移动过程中的动画。控制包括移动和射击, 动画包括飞机左翻滚和飞机右翻滚动画。玩家飞机有自己的子弹池,通过射击敌机和 子弹出屏幕来回收发射的子弹。通过addbullet()遍历子弹池找到空闲子弹,将子弹添加 到屏幕上去。 action()方法实现了对飞机的控制,调用planefram()方法实现游戏帧动画的播放。 computebullet()计算每颗子弹的当前数据。 根据上边几个方法计算出的数据在canvas里调用drawplane(),在drawplane()里调用 drawbullet()绘制飞机和子弹。 关卡开始对玩家飞机进行初始化init(

50、)。包括飞机的初识坐标、当前生命值、等级 和屏幕上子弹的回收。 public class playerplane public playerplane()/构造 public void action(boolean mode) /飞机控制和动作 public void drawplane(graphics g) /画飞机 潍 坊 学 院 本 科 毕 业 设 计 18 private void planefram()/实现飞机帧动画 private void addbullet()/为子弹序列上添加子弹 private void drawbullet(graphics g) /画子弹 publi

51、c void init(int gate)/初始化游戏 private void computebullet()/计算子弹 5. canvas类: canvas类在整个游戏中十分重要,它不仅实现了整个游戏需要的线程,还需要对 整个游戏进行协调,在相应的时刻正确的调用其它类相应的方法,最后把图片正确的 化到屏幕上。 在这个游戏当中,canvas类实现了现在大部分手机游戏的一种标准结构把一 个游戏的所有方法封装在一个循环体内,并由一个单线程进行控制。这样做的好处是 每一次通过循环体,repaint()方法被用来刷新屏幕。系统把按键事件传送给keypressed(), 它能适当地刷新游戏状态。 ca

52、nvas类实现游戏主要状态的控制,例如游戏开始、暂停。在不同的状态绘制不 同的图片,所以需要一个switch分支结构控制绘画的图片和计算的内容,switch分支执 行效率高于if()else if()结构。 canvas类实现主菜单和其它选项的执行和绘制。按键控制,不同的状态下,同一 个按键实现不同的功能。 在“游戏进行”的主状态下,控制敌机的刷新、初始化敌机、分数计算、将分数 转换为图片、碰撞检测。根据计算的数据绘制不同的对象到屏幕上,包括玩家飞机、 敌机、boss、boss血条、分数 collide()方法检测不同的对象是否可以进行碰撞,如果可以碰撞再调用roundcheck()方 法。

53、为了把一个整数用图片画到图片上,该类实现了两个工具方法getbit()求一个整数 有多少位,doubleqrt()求一个数的n次方。 public class planecanvas extends canvas implements runnable public planecanvas()/构造 潍 坊 学 院 本 科 毕 业 设 计 19 private void initplane()/根据当前敌人类型,初始化相应敌机 private void newenemy_gate()/新飞机方法 private void statepro(graphics g)/绘制状态区 private v

54、oid drawlist(graphics g)/绘制主菜单 protected void paint(graphics g)/paint()方法 private void keygameing_press(int keycode)/游戏中按键按下状态 private void keygameing_released(int keycode) /游戏中按键释放状态 protected void keypressed(int keycode) /按键按下监听 protected void keyreleased(int keycode) /按键释放监听 /*圆形检测(同样适用于飞机同飞机得碰撞)

55、 * param planex飞机x坐标 * param planey飞机y坐标 * param bulletx子弹x坐标 * param bullety子弹y坐标 * param area子弹碰撞范围 * param bulletspeed子弹速度 * param type子弹类型 */ private boolean roundcheck(int planex, int planey, int bulletx, int bullety, int area, int bulletspeed, int type, int framwidth, int framheight) /碰撞方法使用的圆

56、形检测,为了实现代码的复用所以参数过多。 /在做飞机与飞机碰撞的时候把子弹坐标换成另一辆飞机坐标即可 潍 坊 学 院 本 科 毕 业 设 计 20 private void collide()/碰撞判断 private void computepoint(int planekinds)/计算分数 /* 菜单选择 */ private byte selecting(int selecting, int maxoption, int minioption) /计算游标坐标保存菜单选项 public void mainstate()/游戏主状态控制 private int getbit()/求一个整

57、数有多少位 private int doubleqrt(int i, int j)/求i的j次方 public void run() /线程循环 4.34.3 算法分析算法分析 飞行射击游戏中的主要算法就是子弹发射的角度和保持每个角度上的速度恒定。 其它大大小小各类算法还是比较多,接下来讨论其中主要的几个算法。 1. 子弹发射角度 敌机根据自己的坐标和玩家飞机的坐标可以构建一个直角三角形,子弹将沿着直 角三角形的斜边飞行。如图4.1 敌 机 玩 家 a b c 潍 坊 学 院 本 科 毕 业 设 计 21 图 4.1 子弹发射的角度为ac 如果要让子弹沿着斜边移动,必然需要知道ac的大小。这里

58、就需要用到直角三 角函数,但是cldc 1.0不支持浮点数运算,所以不能使用系统自带的库函数来求相应 的值。这里可以使用一个折中的办法,规定几个角度出来,让子弹沿着最接近玩家飞 机的那个角度飞行。 先手动查询三角函数表,把需要的角度的正切值查出放大1000倍,保存在一个数 组里,记住保存角度的顺序以后还会用到。在判断角度的时候遍历这个数组就可以得 到一个最接近当前值的一个正切值的下标,我们可以把这下标假想成一个角度,以后 计算斜边移动速度的时候需要用这个下标查询对应正玄、余玄值。当然正弦和余弦值 也是事先手动查询得到的,所以必须记住刚才保存正切值角度的顺序(同样放大1000倍), 这里将使用同

59、样的顺序保存正弦和余弦值。 2. 保持每个角度子弹的运动速度都和水平(垂直)方向一样 解决子弹飞行的角度以后,第二个难点就是要保证子弹的运动速度都和水平(垂直) 方向一样。 要实现这个目的,需要了解一些关于计算机绘图的基本原理。由于手机(包括计算 机)绘制斜线并不和现实生活中绘制斜线一样,不能和我们想象那样一条线段一笔就画出 来了。例如:一个直角三角形其中一个角的角度为30度,如果把斜边放大到像素级别 来观察会发现,计算机绘制斜线的规律为水平方向二像素,然后垂直方向一像素(或者 水平方向一像素,然后垂直方向二像素),因此缩小以后在视觉上边形成了一条平滑的斜 线。所以如果子弹要沿着这条斜线移动的

60、话也应该遵循这条规律。 不过这也不是简简单单的求出子弹在x和y轴上的移动距离就完了。还是以上边那 直角三角形为例,如果子弹按照每次在x轴上移动二像素,y轴上移动一像素来计算, 根据勾股定理子弹在斜方向上移动的距离应该是:(见公式4-1) 式(4-1) 236 . 2 12 22 假如我们规定子弹在任何方向上的移动速度都为4个像素,这个问题该如何处理呢? 这个问题很简单,已知条件是斜边的长度和角度,该角度的正弦余弦通过事先查表已 得到,保存在数组里。这已经就是一道初中的三角函数题。这里需要注意的是,求出 的x轴和y轴的位移量是经过放大1000倍的数字,所以要缩小1000倍后再使用。但是, 如果求

温馨提示

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

评论

0/150

提交评论