基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】

基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】

ID:429996

大小:640.29 KB

页数:47页

时间:2017-08-01

上传者:U-944
基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】_第1页
基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】_第2页
基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】_第3页
基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】_第4页
基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】_第5页
资源描述:

《基于JAVA的战机飞行射击游戏的设计与实现【开题报告+文献综述+毕业论文】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

毕业论文本科毕业论文开题报告计算机科学与技术基于JAVA的战机飞行射击游戏的设计与实现一、综述本课题国内外研究动态,说明选题的依据和意义本课题国内外动态:1.计算机软件行业,正在走向网络化,手机成了电脑之外的网络主导。网络中电脑之外的手机,本身就是很好的可以利用的媒体,所以目前开发手机应用程序成了热点,也随着目前国内手机用户的普及,做手机程序是一个很好的前景产业,也是计算机软件行业中一个热点。2.手机游戏程序成了手机软件的主导。目前,关于手机应用程序的开发,一般分为三类,一类是智能手机的操作系统,这个一般由手机产商直接出产。二类是手机中一些小的应用程序,这类程序大多是一些小的功能的实现,比如说记事本、QQ、X-ROSE、PICA等等的实现。三类就是手机游戏程序的实现,这类游戏程序内容丰富,且盈利性极高,所以自然成了手机软件开发的主导。3.Java手机游戏程序成手机游戏程序的主导。目前的大多手机游戏是由Java和C++/C语言开发,但其中占最大份量的是Java手机游戏,这是由于Java本身的特点和手机的特点决定的,手机的特点是由于它是多个产商生产的,统一性很差,Java的本身特点之一就是它在微型化嵌入系统中应用非常的好,手机正是其一,而且在Java中开设了JWTI工业规范使得手机游戏有了一定的统一性。正好解决了手机的不不统一性。由于手机品牌、型号很多,规范的不严格造成了这种统一性不够完善,但是随着MIDP3.0规范的出台这种统一应该会向我们希望的方向发展。所以Java手机游戏程序成了手机游戏程序的主导。4.国外手机游戏技术相对领先。由于国外的手机游戏公司起步早,且有资金和经验,所以它们有一定的优势。5.国内的手机游戏技术正在成长与进步。国内的已经有出现了很多的手机游戏公司,且我国还开设一些专门的手机游戏设计学院。相信以后国内的技术将会越来越进步。12 毕业论文选题的依据和意义:Java是由SunMicrosystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。Java是非常流行的面向对象设计语言,而Java中的两大方向是J2EE和J2ME。J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算机设备的开发人员。J2ME的一个关键优点是,J2ME与所有支持Java的设备都是兼容的。支持Java的设备就是任何运行Java虚拟机器的计算机。Motorola、Nokia等生产厂商都生产支持Java的设备,J2ME是目前Java最闪亮的技术,其实J2ME就是把Java的微型化应用。J2ME是一个能在嵌入式设备上进行快速开发的语言。所以关于手机的程序的开发,成了Java的最重要应用。作为毕业生的我们不仅要面对毕业,还要面对就业的考验,我们应该学习一些更加有利于我们就业的技术。而如今的就业行势并不是很好,如果没有一项很精通的专业技能榜身,很难找到一个理想的工作综上所述,所以我选择了开发Java游戏程序作为我的毕业设计。二、研究的基本内容,拟解决的主要问题:研究的基本内容:1.调试应用软件。2.程序的设计与调试。3.游戏程序的植入。拟解决的主要问题:1.玩家角色的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的智能性;怪物的运行算法也要进行相关的设置,已免游戏过于简单。2.对于玩家的角色和那些敌机应该赋予不同的速度,同时,程序应该设定玩家角色的子弹不与敌机的子弹进行碰撞检测,已增加游戏的可玩性。3.玩家角色和敌机在进行接触时也需要考虑到是否碰撞到对方。4.为了增加界面的美观,在程序中添加了一些场景。5.游戏的结束、开始、动态信息画面作为构成一个程序都是必不可少的重要部分。三、研究步骤、方法及措施:(1)通过图书馆、上网络搜集整理需要用到的文献资料。(2)安装并熟悉开发环境。(3)进行程序及算法设计。12 毕业论文(4)进行JAVA游戏代码的编写。(5)在PC机、WTK上进行仿真调试。(6)对游戏的各部分进行检查、分析。(7)对分析的记录做总结,并针对其中存在的问题做出解决方案,完善整个设计。(8)根据自己完成设计的记录和总结,以及分析的结果完成论文。四、参考文献[1]JoshuaBloce著.潘爱民译.EffectiveJava中文版.2004年7月第4版.机械工业出版社.[2]BruceEckel.侯捷译.Java编程思想.2005年3月第1版.机械工业出版社出版社[3]王森著.Java手机/PDA程序设计入门.2005年2月第3版.电子工业出版社.[4]JamesKeogh著.潘颖王磊译.J2ME开发大全.2004年2月第1版清华大学出版社.[5]IanSommerville著.程成等译.软件工程.2003年1月第1版.机械工业出版社.[6]陈立伟张克非黎秀红著.精通JAVA手机游戏与应用程序设计.中国青年出版社.2005年5月[7]微型爪哇人.Java手机程序开发.中国铁道出版社,2003年[8]FrandM.Carrano,JanetJ.Prichard .著 韩志宏 译.数据抽象和问题求解——JAVA语言描述.清华大学出版社2005年4月[9]袁海燕王文涛著.JAVA实用程序设计100例.人民邮电出版社.2005年5月12 毕业论文毕业论文文献综述计算机科学与技术基于JAVA的战机飞行射击游戏的设计与实现一前言游戏作为人们日常生活的一个重要的娱乐项目,也带动了巨大的游戏相关产业市场的发展。游戏平台从游戏机、电视游戏,到pc游戏,到手机游戏,中间经历了很多的技术的变革。随着新技术的发展和人们生活水平的提高,手机开始逐渐普及,手机以其小巧便捷,方便的特性成为人们的必备通讯工具。而基于手机平台的手机游戏也就拥有了巨大的市场空间,随着3g的开通和应用,手机游戏必将迎来新的一轮游戏热潮!二java及J2ME开发软件的概述Java是由SunMicrosystems公司于1995年5月推出的Java程序设计语言(以下简称Java语言)和Java平台的总称。Java是非常流行的面向对象设计语言,而Java中的两大方向是J2EE和J2ME。J2ME在1999年的JavaOne开发人员大会上初次亮相,它的目标是面向智能无线设备和小型计算机设备的开发人员。J2ME的一个关键优点是,J2ME与所有支持Java的设备都是兼容的。支持Java的设备就是任何运行Java虚拟机器的计算机。Motorola、Nokia等生产厂商都生产支持Java的设备,J2ME是目前Java最闪亮的技术,其实J2ME就是把Java的微型化应用。J2ME是一个能在嵌入式设备上进行快速开发的语言。所以关于手机的程序的开发,成了Java的最重要应用。2.1Java语言特点1.平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类型与机器无关。2.安全性Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。12 毕业论文3.面向对象Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4.分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5.健壮性Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。2.2关于ECLIPSEEclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。2.3关于WirelessToolKitWTK(WirelessToolKit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素。12 毕业论文参考资料[1]JoshuaBloce著.潘爱民译.EffectiveJava中文版.2004年7月第4版.机械工业出版社.[2]BruceEckel.侯捷译.Java编程思想.2005年3月第1版.机械工业出版社出版社[3]王森著.Java手机/PDA程序设计入门.2005年2月第3版.电子工业出版社.[4]JamesKeogh著.潘颖王磊译.J2ME开发大全.2004年2月第1版清华大学出版社.[5]IanSommerville著.程成等译.软件工程.2003年1月第1版.机械工业出版社.[6]陈立伟张克非黎秀红著.精通JAVA手机游戏与应用程序设计.中国青年出版社.2005年5月[7]微型爪哇人.Java手机程序开发.中国铁道出版社,2003年[8]FrandM.Carrano,JanetJ.Prichard .著 韩志宏 译.数据抽象和问题求解——JAVA语言描述.清华大学出版社2005年4月[9]袁海燕王文涛著.JAVA实用程序设计100例.人民邮电出版社.2005年5月12 毕业论文本科毕业论文(20届)基于JAVA的战机飞行射击游戏的设计与实现专业:计算机科学与技术12 毕业论文摘要手机游戏开发是当今最火爆的游戏开发之一,已其低成本、多用户为优势,在近几年时间里极为流行。而J2ME又是手机游戏开发平台中运用最为广泛的一种。本游戏是一款基于手机移动设备的飞行射击游戏,游戏能实现玩家控制飞机飞行,射击来访的敌机,子弹打中敌机会有积分。游戏到达一定的积分后,玩家飞机子弹可实现威力提升,飞机由单列子弹变化到双列子弹,威力增倍。每关会有一个BOSS,击败BOSS方可过关。随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序。本程序将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。本文先介绍了Java语言的历史,以及Java语言的现状。然后讨论了一个基本的游戏开发平台的搭建,最后再以一个实际游戏的开发探讨了现在最为流行的游戏开发框架和游戏制作后期的优化、调试。【关键词】J2ME,手机游戏,Java,面向对象12 毕业论文Flightshootinggame'sDesignandImplementationbasedonJAVAAbstractCellphonegamedevelopmentisoneofthemostexplosivedevelopmentofthegame,withitslow-cost,multi-useradvantage,Progressiveextremelypopularinafewyearstime.J2MEmobilephonegamesandisthemostwidelyusedasadevelopmentplatform.Thisgameisamobilephonebasedontheflightshootinggame,playerscontrolthegametoachieveflight,shootinghisenemy,thebulletshittheaircraftandwillbeintegral.Atcertainpointsofthegame,playerscanachievepowerfulaircraftbulletsupgradetheaircrafttochangefromsinglebulletdoublerowofbullets,power-foldincrease.EachCommissionerwillhaveaBOSS,beatBOSSbeforeclearance.Whencellphoneisgettingevermorepopularnowadays,withtheimplementationofJavatechnologyonmobileequipment,incrementofcapitaloncommunicationserviceexhibitsitsforceonpeople’severydaylife,providingthemeverfastinformationjustinhand.ThisdissertationfocusesonimplementationofJ2MEtechnologyandhasdevelopedacommercialgamesuiterunonmobilephones.Thisapplicationtransportstheclassicalproducttomobilephones,offeringcorrespondingsoftwareforsuchmorepopularhardwareplatform.ThispaperintroducesthehistoryoftheJavalanguage,Javalanguageandthestatusquo.Thenaplatformtodevelopthebasicstructuresofthegame.Atlast,toexplorethedevelopmentofarealgamenowthemostpopulargamedevelopmentframeworkandthelategameproductionoptimization,debug.【Keywords】J2ME,mobilegame,Java,ObjectOriented12 毕业论文目录摘要IABSTRACTII1前言12可行性研究22.1经济可行性22.2技术可行性22.3操作可行性23需求分析43.1题目背景及情况43.2国内外研究状况53.2.1国外53.2.2国内53.2.3手机游戏应具有的特征54JAVA语言综述74.1JAVA的由来74.2JAVA语言的特点74.3JAVA的三个版本84.3.1J2SE(Java2StandardEdition)技术应用84.3.2J2EE(Java2EntERPriseEdition)技术应用912 毕业论文4.3.3J2ME技术的应用95移动开发简介115.1CLDC和MIDP115.2移动平台开发特点125.3搭建开发环境125.3.1工具介绍135.3.2工具安装方法136游戏结构分析166.1初步构思166.1.1类的划分166.1.2各个类之间的关系166.2游戏基本框架186.2.1Map类:186.2.2Plane敌机类:196.2.3BOSS类:206.2.4PlayerPlane玩家飞机类:216.2.5Canvas类:226.3算法分析256.3.1子弹发射角度256.3.2保持每个角度子弹运动速度和水平(垂直)方向一样256.3.3玩家子弹算法276.3.4飞机动画276.3.5碰撞286.3.6绘制积分296.3.7对象池3012 毕业论文6.4游戏测试306.4.1Eclipse测试过程306.4.2WTK2.5打包测试的过程306.4.3发现的BUG及解决情况326.4.4未完善的功能337结束语34参考文献3512 1前言J2ME(Java2MicroEdition)是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“WriteOnce,runanywhere”的Java特性而提高开发的效率。随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。着眼于J2ME技术的应用,开发一款可商用的手机游戏程序,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。在当今移动通讯产品普及的世界,手机作为仅次于钱包的携带物品,已经是相当的普及,而手机游戏的出现,也是再自然不过的事情,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备的发展势不可挡。诺基亚、索爱、摩托罗拉等各大手机厂商开始不断的提升手机在游戏方面的性能,同时还在手机操作系统方面采用开放式的平台,方便用户享受不同的手机游戏业务。目前SUN公司的J2MECLDC/MIDP环境和高通公司的BREW(BinaryRuntimeEnvironmentforWireless)客户端程序是国内外游戏开发的两大主要平台。基于以上分析,Java手机将是未来手机的发展方向,是业界的热点。因此Java手机游戏的开发与应用势在必行。2可行性研究47-- 可行性研究的目的不是解决问题,而是确定问题是否值得去解决。首先需要进一步分析和澄清问题定义,然后从实际出发,探索若干种可供选择的主要解决方法。一般来说,主要从以下三个方面研究每种方法的可行性:2.1经济可行性经济性的可行性,即研究系统的经济效益是否超过它的开发成本。近年来手机游戏成绩斐然,成为IT产业中增长最快的部分之一。随着技术对游戏经验的促进,游戏市场持续增长,商业IT革命为我们节省了时间和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在某些经济困难的时代,手机游戏仍保持快速增长,Java游戏仍然是盈利行业的组成部分。Java开发者应该注意到这里蕴藏着的巨大的商机。由于开发者们的创新性,游戏不再是由大型采购公司控制的技术产品——游戏领域总是有充足的空间给那些在这方面有才能的个体创新者。2.2技术可行性当前手机游戏之所以能够如此火爆的发展起来,其背后也是有着很多因素的,比如:人们的生活水平高了,手机更新换代的速度加快了,因此,人们对生活质量的要求也高了,使用手机进行休闲娱乐活动成为一种新的时尚,所以导致了手机游戏如今的火爆现象。再一个重要的因素就是,游戏开发的技术得到了巨大的新改进,降低了开发难度,缩短了开发周期,使得游戏开发得到更广泛的应用。J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。Java技术将一大批设备(从服务器到台式机和移动设备)集中到一种语言和一种技术之下。虽然这些设备的应用不同,但Java技术为这些不同点起到了桥梁的作用,使原本致力于单一领域的开发人员能将其技能发挥到跨越不同设备和应用的领域。随着中国各大通讯公司各项技术和业务的不断改进,手机游戏必然会得到更快,更好的发展。2.3操作可行性47-- 游戏是设计来给玩家玩的,所以在设计之前应了解玩家的需求,这样在设计时才能投其所好,使游戏受欢迎。竞技类游戏主要是靠游戏的画面,游戏速度以及简单方便的操作来吸引玩家的,如拳皇、星际、反恐、雷电等。人有美的需求,所以我们设计游戏的时候尽量提高游戏的画面的美感,这样才能够吸引玩家。再一个就是,玩家希望游戏的操作键盘越少越好,这样方便玩家操作,现在的手机游戏一般的操作按键就是方向键和OK键,比电脑上运行的一般中小游戏都要简单而又好操作的多,因此比较受用户欢迎。3需求分析手机游戏开发是当今最火爆的游戏开发之一,已其低成本、多用户为优势,在进几年时间里极为流行。而J2ME又是手机游戏开发平台中运用最为广泛的一种。47-- 由于其便携性,所以人们在游戏娱乐时不会受到时间和地点的限制,再加上手机可进行通讯,比一般的掌机游戏又具有通讯优势,所以手机游戏是未来游戏业前景比较可观的一个产业。虽然Java已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。Java平台演进到Java2后,Java平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JavaCard。其中J2ME定位在消费性电子产品的应用上。这个版本针对资源有限的电子消费产品尤其是手机的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,特别是手机游戏方面,会是未来手机Java游戏平台发展的重点项目。因此Java手机游戏的设计、开发以及应用会在以后的市场中得到很迅速的发展,市场前景非常广阔。3.1题目背景及情况1)手机游戏开发,当前最火的游戏开发类型之一;2)手机游戏开发,还处于幼年时期;3)手机游戏一般容量比较小,开发的时间周期短:4)手机游戏适合个人或小团队开发;5)手机游戏开发的特点:(1)低预算(2)多用户(3)小型的开发团队(4)技术要求合理,易于管理,无须特别的设备(5)基于开放的标准(6)移动电话是天生的多人游戏平台3.2国内外研究状况3.2.1国外47-- 在国外,手机游戏正在经历一个黄金发展时期。日本是游戏产业最发达的国家,早在几年前,日本的手机游戏业就已经蓬勃发展起来。就拿全球最大的手机Java游戏霸主宫路武来说,从他2000年创办手机游戏公司开始,只花了4年时间,就在日本这个全球最大的手机游戏市场建立了霸业,实现年营收2300万美元的奇迹。虽然美国相对于日本及一些欧洲国家,在手机Java游戏方面的发展相对滞后,但是在2003年,其手机游戏市场的收入也已经达到1600万美元。诺基亚、索爱、摩托罗拉等各大手机厂商开始不断的提升手机在游戏方面的性能,同时还在手机操作系统方面采用开放式的平台,方便用户享受不同的手机游戏业务。目前SUN公司的J2MECLDC/MIDP环境和高通公司的BREW(BinaryRuntimeEnvironmentforWireless)客户端程序是国内外游戏开发的两大主要平台。3.2.2国内中国有着近4亿的手机用户,即使只有10%的用户,每月只下载一款游戏,也足以使其形成一个规模庞大的产业。但是目前仅有不足1%的用户下载过手机游戏,这使得这块被无数人看好的市场并没有达到和人们预期相吻合的水平。人们似乎更容易接受移动其他的增值业务(比如短信、彩铃业务等),而对手机游戏的认知度却相当低。而在国内一些大中型企业生产的大部分类型的手机中,基本上都属于传统类型的手机,它们有很多的弊端。传统手机存在的主要弊端有:1)传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。2)传统手机访问互联网是通过WAP(WirelessApplicationProtocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。3.2.3手机游戏应具有的特征一个手机游戏应该具有以下特征:1)易于学习既然手机游戏面向的是普通消费者而不是计算机专家,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个3元的手动操作的游戏。保持游戏的简单是最基本的要求。2)可中断性47-- 多任务处理是手机生活方式的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。1)基于订阅手机游戏的盈利成功取决于他们巨大的使用量。一开始开发和设计每个游戏都是昂贵的。如果一个手机游戏开发者要赢利的话,重要的是:同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。2)丰富的社会交互不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。3)利用手机技术的优点巨额的手机技术研发费用都花在提高设备和网络的可用性和可靠性上面。因此,手机设备硬件和网络协议与桌面/控制台世界(如全球定位系统(GPS)扩展、条形码扫描仪、和短消息服务(SMS)/多媒体信息服务(MMS)通讯)有着非常大的差别。好的手机游戏应该利用那些更新的设备特征和网络基础设备的优点。所以手机游戏给游戏市场带来了新的活力。因此Java手机游戏的设计、开发以及应用会在以后的市场中得到很迅速的发展,市场前景非常广阔。4JAVA语言综述JAVA语言自1991年问世以来,以其方便、易用、跨平台等特点,受到广大程序员的青睐,在业界有着举足轻重的地位。4.1JAVA的由来Java是由JamesGosling、PaickNaughton、ChrisWart、EdFrank和Mike47-- Sheridan于1991年在SunMicrosystems公司设计出来的。开发第一个版本花了18个月。该语言开始名叫“Oak”,于1995年更名为“Java”。从1992的秋天Oak问世到1995的春天公开发布Java语言,许多人对Java的设计和改进做出了贡献。BillJoy、ArthurvanHoff、JonathanPayne、FrankYellin和TimLindholm是主要的贡献者,正是他们的贡献使最初原型得以成熟。Java的最初推动力并不是因特网,而是源于对独立于平台语言的需要,这种语言可创建能够嵌入微波炉、遥控器等各种家用电器设备的软件。用作控制器的CPU芯片是多种多样的,但C和C++以及其他绝大多数语言的缺点是只能对特定目标进行编译。尽管为任何类型的CPU芯片编译C程序是可能的,但这样做需要一个完整的以该CPU为目标的C编译器,而创建编译器是一项既耗资巨大又耗时较长的工作。因此需要一种简单且经济的解决方案。为了找到这样一种方案,Gosling和其他人开始一起致力于开发一种可移植、跨平台的语言,该语言能够生成运行于不同环境、不同CPU芯片上的代码。他们的努力最终促成了Java的诞生。4.2JAVA语言的特点Java是一种简单的面向对象的分布式的解释的健壮的安全的结构中立的可移植的性能很优异的多线程的动态的语言。有其以下几点特点:1)简单Java语言的简单性主要体现在以下三个方面:(1)Java的风格类似于C++,因而C++程序员是非常熟悉的。从某种意义上讲,Java语言是C及C++语言的一个变种,因此,C++程序员可以很快就掌握Java编程技术。(2)Java摒弃了C++中容易引发程序错误的地方,如指针和内存管理。(3)Java提供了丰富的类库。2)面向对象面向对象可以说是Java最重要的特性。Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。Java支持静态和动态风格的代码继承及重用。单从面向对象的特性来看,Java类似于SmallTalk,但其它特性、尤其是适用于分布式计算环境的特性远远超越了SmallTalk。3)健壮性47-- Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自已操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能。这些功能特征大大缩短了开发Java应用程序的周期。1)安全性Java的安全性可从两个方面得到保证。一方面,在Java语言里,象指针和释放内存等C++功能被删除,避免了非法内存操作。另一方面,当Java用来创建浏览器时,语言功能和一些浏览器本身提供的功能结合起来,使它更安全。2)可移植性同体系结构无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良好基础。但仅仅如此还不够。如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。在任何Java解释器中,数据类型都是依据以上标准具体实现的。因为几乎目前使用的所有CPU都能支持以上数据类型、8至64位整数格式的补码运算和单/双精度浮点运算。Java编译器本身就是用Java语言编写的。Java运算系统的编制依据POSIX方便移植的限制,用ANSIC语言写成。Java语言规范中也没有任何“同具体实现相关”的内容。4.3JAVA的三个版本随着Java技术的不断发展,它根据市场进一步细分为:针对企业网应用的J2EE(Java2EntERPriseEdition)、针对普通PC应用的J2SE(Java2StandardEdition)和针对嵌入式设备及消费类电器的J2ME(Java2MicroEdition)三个版本。4.3.1J2SE(Java2StandardEdition)技术应用Java2标准版是一种开发和部署平台,提供了编写桌面、工作站应用程序所有必需的功能。J2SE软件是快速开发、部署关键任务和企业应用程序的首选解决方案。J2SE1.4版本是基于Java跨平台技术和强有力的安全模块而开发的,其最新的特征和功能极大地提高了Java语言的伸缩性、灵活性、适用性,以及可靠性。J2SE的特点:良好的计算性能和缩放能力、跨平台、支持Web服务、完整性。47-- 4.3.2J2EE(Java2EntERPriseEdition)技术应用J2EE是Sun公司推出的一种全新概念的模型,比传统的互联网应用程序模型更有优势。1).J2EE模型J2EE的应用编程模型(J2EEBlueprints)提供了一种用于实施基于J2EE多层应用的文档和实例套件的体系模型,简化了这项复杂的工作。它被开发人员用作设计和优化组件,以便开发人员从策略上对开发工作进行分工。J2EE应用编程模型要求开发者将自己的工作分成两类:商业逻辑和表示逻辑,其余则由系统资源自动处理,不必为中间层管道进行编码。这样,开发人员就能将更多的时间花在商业逻辑和表示逻辑上。对重视缩短项目周期的公司来说,这种转变深受欢迎。2).J2EE服务器Sun的J2EE服务器通过Java命名和目录接口(JNDI)、认证、HTTP及与EnterpriseJavaBeans兼容的能力,提供命名和目录服务。JNDI是Java平台的一种标准扩展版,向企业内的命名和目录服务提供具有Java功能的,带有统一接口的应用,包括LDAP。J2EE服务器还利用了JavaServlet技术。JavaServlet可以看作是运行在服务器上的一个小程序,它向开发人员提供以组件为基础创建基于Web应用的、独立于平台的方法。它不像利用CGI那样具有性能局限。JavaServlet是一种扩展Web服务器功能的简单技巧。由于它是用Java编写的,因而能够访问整个JavaAPI库,也包括用于访问企业数据库的JDBCAPI。4.3.3J2ME技术的应用J2ME(Java2PlatformMicroEdition)是为无线电子市场所设计的,包括JVM规范和API规范。其API规范是基于J2SE的。J2ME定义了一套合适的类库和虚拟机技术。这些技术可以使用户、服务提供商和设备制造商通过物理(有线)连接或无线连接,按照需要随时使用丰富的应用程序。J2ME又被称为Java2微型版,被使用在各种各样的消费电子产品上,例如智能卡、手机、PDA、电视机顶盒等方面。当然了,J2ME也提供了Java语言一贯的特性,那就是跨平台和安全网络传输。它使用了一系列更小的包,而且Javax.microedition.io为J2SE包的子集。J2ME可以升级到J2SE和J2EE。像其它版本一样,J2ME具有很多Java技术特性,主要有:1)可以在各种支持Java的设备上运行;2)代码短小;47-- 1)充分利用Java语言的优势;2)安全性好;3)用J2ME实现的应用可以方便地升级到J2SE、J2EE。J2ME定义两个配置:ConnectedDeviceConfiguration(连接设备配置,CDC)和限制性更强的ConnectedLimitedDeviceConfiguration(有限连接设备配置,CLDC)。Java之所以能够发展得很快,是因为互联网的发展非常快。Java可以和浏览器结合在一起,因而很自然地在桌面系统得到广泛应用。从计算的结构来看,Java主要分三大类:第一是服务器端,这里就有了J2EE企业版;第二是桌面PC,这一类用的是J2SE标准版;第三就是掌上电脑、移动设备,用的都是J2ME。事实上大部分非企业级软件还是在J2SE上开发的比较多。首先,这是因为很多的应用软件都是在J2SE上开发的;其次,J2SE是和J2EE兼容的,企业版是在标准版上的扩充,在J2SE的版本上开发的软件,拿到企业的平台上是一样可以运行的;再次,一般开发还是在J2SE的环境上,只是说J2ME提供微型版的一个环境。在J2SE上虚拟出一个环境,开发出来的应用软件是可以拿到微型版上运行的。5移动开发简介手持设备之所以能够时时刻刻伴随人们的生活,其最重要的特性就是便携性,并且由于着重考虑了省电设计,手持设备一般可较长时间的处于可工作状态。47-- 从中国现在的情况来看,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端:1)传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。2)传统手机访问互联网是通过WAP(WirelessApplicationProtocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。Java技术在无线应用方面的优势非常明显:1)应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。2)Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI);3)Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。基于以上分析,Java手机将是未来手机的发展方向,是业界的热点。中国移动运营商都将J2ME作为其应用产品运行的一个基本平台。支持J2ME已经成为运营商对手机厂商的一个基本要求。所以,利用J2ME进行游戏设计开发,是符合基本发展趋势的一个做法。5.1CLDC和MIDPCLDC(ConnectedLimitedDeviceConfiguration,连接限制设备配置),运行在这一配置上的程序称为MIDlet,在KVM上进行解释。CLDC设备的最低配置为:CPU为16位、32位主频在16MHz以上的处理器,设备的内存比较少,可能只有512KB,甚至更少。现在硬件的发展非常快,以前所定义的CLDC的设备目前的设备甚至远远超过原来的定义。不过请注意一下,J2ME对CLDC设备配置的定义只是一个最低要求的定义。其实目前很多CLDC设备的配置都远远超过上面的配置,不过要分辨CLDC设备主要要从设备特点上进行区别。这些设备的特点是:a)无线连接b)没有稳定的电源供应(通常使用电池)c)设备外设资源极少CLDC规范:目前分为v1.0JSR30,v1.1JSR139MIDP(MobileInformationDeviceProfile)是一套JAVA应用编程接口(Application47-- Programmer’sInterFaces,API).他们与CLDC一起向诸如蜂窝电话等移动信息设备提供一个完整的JAVA应用运行环境。MIDP中包含有下列API包:javax.microedition.lcdui—用户界面(UI)API,它为MIDP应用提供了一整套实现用户界面的功能特性;javax.microedition.rms—移动信息设备描述提供一种让MIDlets永久储存并在以后可以取回数据的机制。javax.microedition.midlet—这个MIDlet包明确定义了MIDP应用,也定义了应用和应用环境之间的交互。javax.microedition.io—移动信息设备还描述包括基于有限连接设备配制GenericConnection框架的网络支持。5.2移动平台开发特点手持设备的特性要求决定了它的硬件特性,也就决定了能够在手持设备上运行的软件也应具有相应的特性。手持设备上的应用程序一般短小精悍,针对特定的业务功能进行实现,极少出现在PC上那种大而全的软件。由于硬件平台的限制导致某些时候手持设备开发难度要大于PC平台。5.3搭建开发环境现在针对JAVA的开发软件很多,类似eclipse、JBliuder、NetBeans、JCreater……各个工具性能的使用方法都不一样,这里我选择的工具是eclipse3.2.1。一门好的程序开发语言需要有好的开发环境做基础,J2ME也不例外,我就来总结一下如何利用Eclipse搭建J2ME的开发环境。搭建一个最基本的开发环境需要下载以下工具:1)JDK1.62)WTK2.53)EclipseMe1.7.94)Eclipse3.2.1如有需要还可以下载Eclipse多国语言包(LanguagePack)。5.3.1工具介绍Eclipse  Eclipse是一个开放源代码的、基于Java47-- 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。SunJ2MEWirelessToolkitWTK的全称是SunJ2MEWirelessToolkit。Sun公司为J2Me标准的制定和发展作了大量的工作,其中WTK(无线通信工具包,WirelessToolKit)是Sun公司提供的一个MIDP应用程序开发包,它是最常用的J2ME开发工具之一。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。使用其中的工具可以开发与JavaTechnologyfortheWirelessIndustry(JTWI,JSR185)规范兼容的设备上运行的j2me应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作时为止可以获取有四个版本,分别是1.0.4,2.0,2.2和2.5。每个版本都包括英语,日语,简体中文,繁体中文4个语种包。5.3.2工具安装方法由于JDK、WTK、Eclipse的安装方法和普通软件无差别,所以只介绍EclipseMe的安装方法和在Eclipse环境下WTK的配制。首先进入Eclipse界面并通过其“help”菜单下“SoftwareUpdates”的弹出的“FindandInstall”->“Searchforfeaturestoinstall”,然后选取下载的EclipseMe文件的路径,按照提示完成安装。安装成功以后在Eclipse界面点击“Windows”,打开“Preferences”,如果出现了“J2ME”项,表示安装正确。如图5-1所示:47-- 图5-1EclipseME安装成功以后的“Preferences”接下来需要配制WTK模拟器路径。在“Preferences”里,展开“J2ME”分支,选择“DeviceManagement”,再点击“Import”。如图5-2所示:图5-2配制WTK路径在“Specifysearchdirectory:”文本框中输入WTK的安装路径(例如:D:WTK2.5),点击“Refresh”。几秒种过后“Device”表格中将出现WTK自带的几款模拟器列表,表示WTK配制正确,点击“Finish”结束配制。47-- 至此一个最基本的J2ME开发环境就配制完成了。我们就可以用Eclipse来编写和调试游戏代码了。如图5-3所示:图5-3Eclipse的界面6游戏结构分析JAVA和C++其中的一个的不同之处就是,C++虽然已经采用了面向对象的理论,但其中还是包含到有面向过程的理论在里边,JAVA则是一门完全面象对象的程序语言,鼓励广大程序员将数据完整的封装,通过get和set方法来访问和改变类里的私有段数据。47-- 这一点完全体现了面向对象思想里的数据封装这一特性,但是这种方式需要不断的调用方法,势必对性能造成一定的损失(关于手机游戏的优化的其中一项就是减少方法的调用)。因为每次调用方法都会消耗部分CPU时间,所以如果是经常被修改或访问的数据我们需要将其访问权限设置为public,通过“对象.数据”的方式访问以节约CPU时间。6.1初步构思根据面向对象的程序设计思想,我划分了6个类。6.1.1类的划分对象(Object):思维、感受或动作所作用的物质或精神体玩家为一种对象。玩家是一种对象;敌机是一种对象,不过这种对象有多中形态;BOSS和地图也是一种对象。撇开MIDlet和Canvas类,其他另创建的类有4个:1)Map地图类;2)Plane敌机类;3)BOSS关底BOSS类(继承自Plane);4)PlayerPlane玩家飞机类。6.1.2各个类之间的关系JAVA程序的入口都是MIDlet类的startApp()方法,所以在MIDlet类中实例化Canvas类。由于Plane敌机类和BOSS类有许多共同点,所以BOSS继承自敌机类,Player类和Map地图类各自独立,以上四个类都在Canvas类中实例化,进行协调和控制。具体类的功能和关系图如下图所示:功能4:初始化功能2:碰撞功能1:菜单PlaneCanvas47-- 功能3:刷新敌机功能5:计算积分图6-1PlaneCanvas结构图功能2:过关换地图功能1:地图循环移动Map图6-2Map结构图功能1:飞行功能5:子弹变换功能3:飞行动画功能2:发射子弹PlayerPlane功能4:炸弹图6-3PlayerPlane结构图功能1:指定角度发射子弹Plane功能3:发射激光功能2:子弹样式功能1:发射子弹BOSS47-- 功能2:保持子弹的位移派生图6-4Plane和BOSS结构图6.2游戏基本框架6.2.1Map类地图类是一个比较简单的类,使用一张背景图片循环滚动就完成了。所以最主要的两个方法就是moveMap()和drawMap(),另外为了切换关卡的时候换地图还需要个更换地图的方法changeMap()。publicclassMap{publicMap(intgate){//根据关卡来构建地图}publicvoiddrawMap(Graphicsg){//绘制地图}publicvoidmoveMap(){//计算绘制地图需要的数据}publicvoidchangeMap(intgate){//根据关卡更换地图}}本游戏地图使用的是PNG格式的图片,PNG(PortableNetworkGraphics)格式是MIDlet唯一支持的图象格式,PNG具体格式由PNGSpecification,Version1.0定义的。PNG格式提供透明背景的图像47-- ,这对绘制游戏画面和被操纵主角极有帮助。飞机之间碰撞就不会因为背景有特定的颜色,显示出的效果像贴上的图片而缺乏真实感,物体之间轻微重叠时最上层图片也不会覆盖超过其有效象素外的部分。PNG格式图片中包含许多定义其图片特性的冗余部分(Chunks)。这些代码包含在每一个单独的png格式图象中,然而如果将多个png图象合并在一张幅面稍大一些的整图中,多个chunks就可以得到精简,图片的大小可以得到控制。使用Image类中的createImage函数可从整图中分割出所需要的元素。6.2.2Plane敌机类由于Plane敌机类需要派生出BOSS类,所以先要找出BOSS和普通敌机之间的共同之处。由于BOSS和普通敌机有很多共同属性例如:生命值、帧尺寸、碰撞范围等,还有一个比较重要的共同方法,就是发射子弹。所以敌机类在计划的时候需要考虑到子类属性和代码的复用性。敌机子弹使用具有static属性的子弹数组来做,这表示所有实例化的敌机对象和BOSS对象都使用的一个子弹数组(子弹池)。由于敌机发射子弹的方式和BOSS不一样,默认发射子弹方法的访问权限为private子类无法访问,所以重载了发射子弹方法供子类使用,访问权限为protected。敌机将使用类似子弹的方法来实现,实例化五个敌机对象作为一个对象池,每次需要刷新敌机的时候就遍历对象池中是否有空闲对象。普通敌机有很多种类型,类型不同的敌机生命值和飞行方式都不同,所以使用一个初始化方法initPlane(),根据随机数来随机生成敌机。敌机被击爆或者飞出边界时需要重新放回对象池,需要一个消失敌机的方法dispearEnemy()。主要机构还是和地图类一样,计算再绘制。需要计算敌机方法compute()和计算子弹方法computBullet(),然后绘制到屏幕drawEnemy()和drawBullet()。publicclassPlane{publicPlane(){//构造}publicvoiddrawEnemy(Graphicsg){//画敌机}staticvoiddrawBullet(Graphicsg){//画子弹}publicvoiddispearEnemy()(//消失敌机47-- }publicstaticvoidcomputBullet(){//计算子弹坐标}privatevoidshoot(intplayer_X,intplayer_Y){//敌机发射子弹}protectedvoidshoot(intplayer_X,intplayer_Y,intgate){//重载发射子弹方法}publicvoidcompute(inttype,intplayer_X,intplayer_Y){//计算敌机的数据}publicvoidinitPlane(inttype,intnum){//初始化敌机}}6.2.3BOSS类继承自Plane类,使用Plane类的子弹池和子弹方法,还使用Plane类的一些属性。BOSS还有一些特殊子弹,比如散弹和激光。绘制激光方法Laser()和发射散弹方法shoot_Boss(),发射普通子弹的话直接调用父类的shoot()方法。BOSS生命值较大,所以需要画一个血条bossLife()BOSS需要判断BOSS的移动方向和什么时候发射什么样式的子弹,bossAi()方法。每一关都会初始化一个新的BOSS出来需要初始化方法initBoss()计算数据然后绘制,compute()和drawBoss()。publicclassBossextendsPlane{publicBoss(){//构造}privatevoidbossLife(Graphicsg){//画BOSS血条}publicvoiddrawBoss(Graphicsg,intgate){//画BOSS}publicvoidinitBoss(intnewGate){//初始化BOSS}47-- privatevoidLaser(Graphicsg,booleanturn){//绘制激光}privatevoidshoot_Boss(intplayerX,intplayerY){//不同类型子弹射击}privatevoidcompute(){//计算数据}publicvoidbossAi(intplayerX,intplayerY){}}6.2.4PlayerPlane玩家飞机类:此类实现了玩家对飞机的控制和飞机移动过程中的动画。控制包括移动和射击,动画包括飞机左翻滚和飞机右翻滚动画。玩家飞机有自己的子弹池,通过射击敌机和子弹出屏幕来回收发射的子弹。通过addBullet()遍历子弹池找到空闲子弹,将子弹添加到屏幕上去。action()方法实现了对飞机的控制,调用planeFram()方法实现游戏帧动画的播放。computeBullet()计算每科子弹的当前数据。根据上边几个方法计算出的数据在Canvas里调用drawPlane(),在drawPlane()里调用drawBullet()绘制飞机和子弹。关卡开始对玩家飞机进行初始化init()。包括飞机的初识坐标、当前生命值、等级和屏幕上子弹的回收。publicclassPlayerPlane{publicPlayerPlane(){//构造}publicvoidaction(booleanmode){//飞机控制和动作}publicvoiddrawPlane(Graphicsg){//画飞机}privatevoidplaneFram(){//实现飞机帧动画}47-- privatevoidaddBullet(){//为子弹序列上添加子弹}privatevoiddrawBullet(Graphicsg){//画子弹}publicvoidinit(intgate){//初始化游戏}privatevoidcomputeBullet(){//计算子弹}}6.2.5Canvas类:Canvas类在整个游戏中十分重要,它不仅实现了整个游戏需要的线程,还需要对整个游戏进行协调,在相应的时刻正确的调用其他类相应的方法,最后把图片正确的化到屏幕上。在这个游戏当中,Canvas类实现了现在大部分手机游戏的一种标准结构——把一个游戏的所有方法封装在一个循环体内,并由一个单线程进行控制。这样做的好处是每一次通过循环体,repaint()方法被用来刷新屏幕。系统把按键事件传送给KeyPressed(),它能适当地刷新游戏状态。Canvas类实现游戏主要状态的控制,例如游戏开始、结束。在不同的状态绘制不同的图片,所以需要一个switch分支结构控制绘画的图片和计算的内容,switch分支执行效率高于if(){}elseif(){}结构。Canvas类实现主菜单和其他选项的执行和绘制。按键控制,不同的状态下,同一个按键实现不同的功能。在“游戏进行”的主状态下,控制敌机的刷新、初始化敌机、分数计算、将分数转换为图片、碰撞检测。根据计算的数据绘制不同的对象到屏幕上,包括玩家飞机、敌机、BOSS、BOSS血条、分数。collide()方法检测不同的对象是否可以进行碰撞,如果可以碰撞再调用roundCheck()方法。为了把一个整数用图片画到图片上,该类实现了两个工具方法getBit()求一个整数有多少位,doubleQRT()求一个数的N次方。publicclassPlaneCanvasextendsCanvasimplementsRunnable47-- {publicPlaneCanvas(){//构造}privatevoidinitPlane(){//根据当前敌人类型,初始化相应敌机}privatevoidnewEnemy_Gate(){//新飞机方法}privatevoidstatePro(Graphicsg){//绘制状态栏}privatevoiddrawList(Graphicsg){//绘制主菜单}protectedvoidpaint(Graphicsg){//paint()方法}privatevoidkeyGameing_Press(intkeyCode){//游戏中按键按下状态}privatevoidkeyGameing_Released(intkeyCode){//游戏中按键释放状态}protectedvoidkeyPressed(intkeyCode){//按键按下监听}protectedvoidkeyReleased(intkeyCode){//按键释放监听}/**圆形检测(同样适用于飞机同飞机得碰撞)*@paramplaneX飞机X坐标*@paramplaneY飞机Y坐标*@parambulletX子弹X坐标*@parambulletY子弹Y坐标*@paramarea子弹碰撞范围*@parambulletSpeed子弹速度*@paramtype子弹类型47-- */privatebooleanroundCheck(intplaneX,intplaneY,intbulletX,intbulletY,intarea,intbulletSpeed,inttype,intframWidth,intframHeight){//碰撞方法使用的圆形检测,为了实现代码的复用所以参数过多。//在做飞机与飞机碰撞的时候把子弹坐标换成另一架飞机坐标即可}privatevoidcollide(){//碰撞判断}privatevoidcomputePoint(intplaneKinds){//计算分数}/**菜单选择*/privatebyteselecting(intselecting,intmaxOption,intminiOption){//计算光标坐标保存菜单选项}publicvoidmainState(){//游戏主状态控制}privateintgetBit(){//求一个整数有多少位}privateintdoubleQRT(inti,intj){//求i的j次方}publicvoidrun(){//线程循环}}6.3算法分析飞行射击游戏中的主要算法就是子弹发射的角度和保持每个角度上的速度恒定。其他大大小小各类算法还是比较多,接下来讨论其中主要的几个算法。47-- 6.3.1子弹发射角度敌机根据自己的坐标和玩家飞机的坐标可以构建一个直角三角形,子弹将沿着直角三角形的斜边飞行。如图6-1所示:敌机玩家abc图6-1子弹发射的角度为∠ac如果要让子弹沿着斜边移动,必然需要知道∠ac的大小。这里就需要用到直角三角函数,但是CLDC1.0不支持浮点数运算,所以不能使用系统自带的库函数来求相应的值。这里可以使用一个折中的办法,规定几个角度出来,让子弹沿着最接近玩家飞机的那个角度飞行。先手动查询三角函数表,把需要的角度的正切值查出放大1000倍,保存在一个数组里,记住保存角度的顺序以后还会用到。在判断角度的时候遍历这个数组就可以得到一个最接近当前值的一个正切值的下标,我们可以把这下标假想成一个角度,以后计算斜边移动速度的时候需要用这个下标查询对应正玄、余玄值。当然正玄和余玄值也是事先手动查询得到的,所以必须记住刚才保存正切值角度的顺序(同样放大1000倍),这里将使用同样的顺序保存正玄和余玄值。6.3.2保持每个角度子弹运动速度和水平(垂直)方向一样解决子弹飞行的角度以后,第二个难点就是要保证子弹的运动速度都和水平(垂直)方向一样。47-- 要实现这个目的,需要了解一些关于计算机绘图的基本原理。由于手机(包括计算机)绘制斜线并不和现实生活中绘制斜线一样,不能和我们想像那样一条线段一笔就画出来了。例如:一个直角三角形其中一个角的角度为30度,如果把斜边放大到像素级别来观察会发现,计算机绘制斜线的规律为水平方向二像素,然后垂直方向一像素(或者水平方向一像素,然后垂直方向二像素),因此缩小以后在视觉上边形成了一条平滑的斜线。所以如果子弹要沿着这条斜线移动的话也应该遵循这条规律。不过这也不是简简单单的求出子弹在X和Y轴上的移动距离就完了。还是以上边那直角三角形为列,如果子弹按照每次在X轴上移动二像素,Y轴上移动一像素来计算,根据勾股定理子弹在斜方向上移动的距离应该是:(见公式6.1)假如我们规定子弹在任何方向上的移动速度都为4个像素,这个问题该如何处理呢?这个问题很简单,已知条件是斜边的长度和角度,该角度的正玄余玄通过事先查表已得到,保存在数组里。这已经就是一道初中的三角函数题。这里需要注意的是,求出的X轴和Y轴的位移量是经过放大1000倍的数字,所以要缩小1000倍后再使用。但是,如果求出的位移量不为1000的整数倍,那缩小后的数字将成为一个浮点数,由于手机绘制图形和MIDP1.0不支持浮点运算的特性,系统将自动舍弃小数部分,这也就是常说的丢失精度。导致子弹在斜方向上的运动速度和水平垂直方向上的运动速度有1-2个像素的差异,这对PC游戏不会大任何影响,但对手机游戏来说1-2个像素在移动方向上差别会有明显的差别。解决这个问题的方法就是,在缩小位移量之前就把将成为小数的部分保存下来作为移动的修正值使用。具体算法如下:1)算出在X轴方向和Y轴方向需要移动的距离,如果正好为1000的整数倍,将其缩小1000倍作为屏幕上X、Y轴的位移量。2)如果不为整数倍(比如1500,2330),将多余的位移量减出来(对1000取模)用其他变量保存作为X方向或Y方向上的修正值,刚才的1500和2300就会变成1000和2000,再缩小1000倍做计算。3)每一帧X、Y方向上的修正值都累加,直到大于等于1000。如果等于1000,缩小1000倍加到对应的方向上,如果大于1000继续做刚才保存修正值的步骤,然后缩小1000倍加到对应的方向上。6.3.3玩家子弹算法47-- 在大部分射击游戏中,子弹都是作为对象来实现的,一个子弹对象包括了子弹的坐标,位移量,爆炸范围等等,每一颗子弹都是一个对象。在手机平台上,由于内存有限,不能实例化这么多对象出来(照这个游戏计算一个屏幕上最多有28颗子弹,也就是28个对象),一次性实例化这么多对象出来,在手机上测试的时候很可能导致内存溢出。所以我们将使用其他方法来实现子弹。在这个游戏中,子弹的较简单,只有坐标信息和移动速度,所以只需要几个数组就能实现。使用数组保存子弹坐标,数组的每一项对应一颗子弹,如果一颗子弹飞出屏幕,对应数组项清零,每发射一颗子弹都遍历一次数组,有为0项则可以发射子弹,否则不能发射。敌机子弹亦为此原理,不过敌机子弹比玩家子弹要多两个属性,就是X轴和Y轴上的位移修正值,所以要多用两个数组。这种算法有点麻烦的就是要对多个数组进行操作,让代码变的更繁杂不易读,不过这是比较适合像手机这样平台限制的小型终端。另一个简便一点的子弹算法,让每颗子弹的用法更贴近于对象。还是以数组为主(万变不离其中,只是形式不同而已)。比如当前游戏中有50个子弹就创建一个二维数组:int[][] bullet=new int[50][],后边的括号空着,不过这也是我们的重点,考虑清楚再添。子弹都有哪些属性你自己来决定比如有速度坐标,坐标分X 、Y 那么后面的括号里就填3(速度, x轴坐标, y轴坐标)。也就是说,你的子弹有多少种属性,后边的括号就添几。前面一个括号的内容代表子弹的序号。比如想设置5号子弹的位置为(30,50), 速度为 5那么就可以这样做:bullet[4][0] = 30(X坐标)bullet[4][1] = 50(Y坐标)bullet[4][2] = 5(速度)可以在任何时候对你每个子弹的属性进行修正,可以将数组的这种使用方法想像成“对象.属性”。bullet[4][]就是对象,bullet[4][0]就是5号子弹的X坐标这个属性。6.3.4飞机动画动画是每个游戏必不可少的要素,没有动画的游戏画面显得十分呆板,很难吸引玩家。这个游戏最主要也是最先让玩家够受的一个动画就是玩家飞机翻滚。图片见图6-2:图6-2玩家飞机图片47-- 实现游戏动画,我借鉴了MIDP2.0里的精灵(Sprite)类的一些方法,既用数组保存动画每一帧的序列。首先,保证动画图片里边每一帧的尺寸都一样。将每帧的长宽用变量保存下来。我的动画图片的每帧都是32*32像素大小的,所以我只需要一个变量就可以保存这个数字,如果长宽不一样的话就需要两个变量保存。privatefinalbyteframeSize=32;接下来需要设置动画序列数组了。根据图3.2可以发现每架飞机有8个动作,如果我要让飞机左翻转动画序列数组就该是这样的:privatefinalbyteleftSequence[]={3,2,1,0,7,6,5,4};数组里的每个元素代表图片上飞机的第几个动作。如果依次访问数组里的元素,主循环执行8次就能完成一次飞机左翻滚的动画。这里我们定义了玩家飞机的3种动作:privatefinalintleftSequence[]={3,2,1,0,7,6,5,4};//左翻滚privatefinalintrightSequence[]={3,4,5,6,7,0,1,2};//右翻滚privatefinalintnomalSequence[]={3};//平稳飞行在做飞机翻滚动画的时候需要注意的是,按住键盘左或者右才激发相应的动画,当松开按键的时候不能立刻将飞机置为平稳飞行状态,因为松开按键的时候有可能飞机正在进行翻滚中,突然转换为平稳飞行状态会是动画跳跃过大,显的不自然。这个地方就需要释放按键以后检查飞机的当前帧,如果不是动画的最后一帧就继续动画,否则直接转为平稳飞行。6.3.5碰撞碰撞在大部分游戏中也是很重要的算法之一。在这个游戏中,进行碰撞的元素过多,要让碰撞看起来自然而且准确需要进行很多细节上处理是件不易的事。先列举出需要碰撞的元素:1)敌机同玩家碰撞;2)敌机同玩家子弹碰撞;3)玩家同敌机子弹碰撞;4)玩家同BOSS碰撞;5)BOSS同玩家子弹碰撞;6)敌机同玩家炸弹碰撞;7)BOSS同玩家炸弹碰撞。47-- 碰撞检测有很多种类型,矩形碰撞是最常用的一种。不过此游戏中,我使用的圆形碰撞,为啥要使用圆形碰撞?理由很简单,方便碰撞检测。做圆形碰撞需要定义对象的几个属性:(1)圆心的X轴和Y轴坐标;(2)圆的半径。我的做法是,让一个对象的圆心去碰撞另一个对象的圆,因为子弹的图片太小,已经没有办法再构成个圆形来进行碰撞了。由于上边总结出的7种碰撞情况中,有5种都需要做圆形检测,这让代码显的不易读,冗余度增大。为了实现代码的复用性,我把做圆形的部分检测抽象出来另写个方法,把需要的对象属性作参数传递。这个方法的参数比较多,在上边分析类结构的时候已经把参数列出来了,并进行了注释。圆形检测的算法:用两个对象的中心点坐标连接一条线段,然后以此线段为斜边构建一个直角三角形。直角三角形的两条直角边的长度可以用坐标相减的方法求到,然后用勾股定理求到斜边的平方,注意!一定不要将其开方,因为CPU做浮点数运算比做整数运算要耗费更多的时间。最好的做法是:我们将圆的半径做平方运算以后再和刚才求出来的直角三角形斜边的平方做比较。如果斜边长大于半径,说明没有碰撞到,否则对象发生碰撞。在做碰撞的时候需要做预处理,如果不做预处理可能会出现这一帧子弹没接触到飞机,但下一帧子弹却飞到飞机身后去的情况。所以在判断碰撞的时候需要加上对应坐标轴上的位移量,对下一帧进行预先判断。6.3.6绘制积分由于字符串在程序运行中会占用大量内存,所以在手机上重复绘制一段文字或数字的时候我们都是以图片的方式绘制到屏幕上。游戏中的分数是个最典型的例子。先要准备一张0-9的数字图片,每一个数字宽度一样,间隔一样。然后需要求出分数(例如:积分point)有多少位,每一位上是数字几。然后逐位的把数字画到屏幕上去。求出point有多少位的算法:让point对10的N次方整除(N通过循环递增),知道point整除10的N次方等于0的时候,现在的N就是这个整数的位数。求出point每一位上的数字的算法:使用for循环,这是个反循环从N(N刚才已求出)循环到0,point整除10的N次方,然后减去最高位(比如1100,剔除1000还剩下100,现在百位为最高位)。当循环结束的时候,每一位上的数字也就都求出来了。如果要画到屏幕上,直接把画图的语句写到循环体内,就在求出数字之后。47-- 6.3.7对象池游戏中所有出现在屏幕上的敌机都是对象,为了节约内存,我最初想法需要刷新敌机的时候就实例化一个新对象出来,飞机被击爆或者飞出屏幕的话就释放对象。结果在调试这部分代码的时候我发现实例化一个新对象的时候模拟器需要花费20-30毫秒的时间,如果一次要实例化多架敌机的话就会出现掉帧的现象。为了解决这一问题我使用了对象池技术。在游戏初始化的时候通过Plane类实例化了5个敌机对象出来,需要刷新敌机的时候就检查对象池中时候有空闲对象,如果有就将对象画到屏幕上,如果无就一直等待对象池中有空闲对象可以使用。这里说的等待并不是指的线程阻塞,而是说的是在对象池中空闲对象个数达不到需要刷新敌机的个数时,程序每一帧都会检测空闲对象的个数并阻止其他方法来使用空闲对象,直到将正确数量的敌机刷新出去以后才结束等待并解除阻止。6.4游戏测试6.4.1Eclipse测试过程在Eclipse3.2.1中新建一个项目取名为:1945,然后点完成,Eclipse3.2.1左边一栏会出现一个项目“1945”。找到“1945”的文件目录C:DocumentsandSettingsAdministratorworkspace1945,把“newPlane”文件放到“1945”里,然后在Eclipse3.2.1中刷新一下,在左边一栏1945项目中会显示游戏的源程序和游戏所需的图片,右键点击游戏启动程序“PlaneDemo.java”,然后选择“RunAs”再选择“1EmulatedJ2MEMidlet”,这样就会出来一个手机模拟器,然后就可以调试运行游戏了。6.4.2WTK2.5打包测试的过程用Eclipse完成代码的调试之后,需要使用WTK生成包(即jar和jad文件),其过程如下:首先,使用WTK的新建项目功能建立一个新项目,要求与Eclipse工作区下的项目名称“1945”、MIDlet类名“newPlane.PlaneDemo”相同,如图6-347-- 图6-3新建项目图片新建项目后,将Eclipse工作区下的源程序文件拷入src文件夹,将图片文件夹拷入res文件夹,点击生成,如一切正常,将如图6-4所示:图6-4生成文件图片然后,选择“项目”->“包”->“生成包”。如图6-5所示:图6-5产生包图片47-- 生成的jar和jad文件存储在1945/bin目录下。点击WTK中的“设备”,使用MidiaControlSkin手机模拟器进行测试。点“运行”,启动游戏,即可进行游戏测试了。如图6-6所示:图6-6游戏启动画面6.4.3发现的BUG及解决情况几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。即使是作为操作系统的各种版本的Windows也时常会发生许多类型的错误和漏洞。本游戏程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此产生了大量BUG,其中一些BUG还没有解决,所有发现的BUG如下:1)玩家子弹出现顺序问题;2)玩家飞机爆炸后仍然可以控制爆炸图片;47-- 1)当过关后仍然会发生碰撞;图5-52)当玩家击落可奖人飞机的同时玩家被击落,并且此为玩家的最后一架飞机,虽然显示援军到达,但游戏仍然结束。3)有某组飞机在飞机被击中后仍能发射子弹;4)左侧子弹发射后不停在原位置刷新问题;5)游戏运行一段时间后变的很卡;其中,1、2、3、4条BUG已经解决。4、5、6没有解决,其中,4、5、6三条如果有足够的时间应该可以解决。第7条以现有水平无法解决,因为出现这种情况的原因估计是内存的问题,而由于水平的关系,现在的代码变量过多,并且效率低下,有很多重复的地方,解决的方法只能是在水平提高的情况下重写整个程序。6.4.4未完善的功能经过汇总测试人员的建议,本游戏应该完善的功能如下1)由于每按一次开火,就会对玩家子弹的精灵数组进行一次循环检查,使得本运行效率就不高的KVM运行异常缓慢。即使刷屏没有间隔也不会提高速度;2)最好有接宝物的设置,增强可玩性;3)由于没由合适的图片,使得敌人设置单一;4)地图本应由外部文件读入,但设计初期并没有掌握这项技术;5)手机游戏最好只有一个类,而我却有4个;6)没有添加成绩记录,即英雄榜;7)最大的遗憾,敌人不够智能化。希望不远的将来,我能够有能力对这个游戏进行重写,以解决BUG、完善功能。47-- 7结束语两个月的毕业设计马上就要结束了,这款《1945飞行射击游戏》作为我的毕业设计,是本人目前做过的最有意义的程序,这期间对J2ME的学习,使我又回到了初学PASCAL的时候。本科期间做过很多课程设计,大多规模很小。在数据库、各种应用软件和游戏中,我仍觉得对游戏的设计有极大的热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。本程序设计实现了手机上以J2ME为平台的飞行射击游戏的开发,敌人运行的方式由程序进行控制,具有一定的可玩性和复杂性。经过了细心的调试和排错解决了绝大部分的问题。但是我的水平实在有限,游戏的一些BUG到现在还没有解决,但我相信,随着时间的推移,个人水平的增长,我一定会将其更加完善。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。大家作品的最终结果都离不开同一个模式。相比一些数据库软件,游戏的设计有很多人情色彩和艺术思想的发挥,正式商业的软件的人性化界面和各个游戏间迥异的结构每每会让人有去开发的冲动。  学习J2ME的困难远远超出了想象,在设计初期,为了解决地图的滚动、玩家飞机如何不飞出上下边界两个问题竟然花费了数天的时间。很多相关的技术,如需要使用到的线程、包的功能、高级、低级图形界面的使用、贴图等,每一项都需要花一定的时间去掌握和熟悉。更为困难的是,J2ME为一种刚出现仅几年的新技术,国内的参考资料非常少,仅有的几本也停留在简单的介绍阶段。在学校图书馆借的几本参考书,给了我很大的帮助,但对设计该游戏来说,仍只够入门。幸运的是,互联网上有那么多无私的人,由JasonLam著,DeabowayChou译的电子书《J2ME&Gaming》给了我很大的帮助,作者、译者的辛勤劳动的成果免费放在网上由大家下载,是开源精神的完美体现。47-- 参考文献[1]JoshuaBloce.潘爱民译.EffectiveJava中文版.机械工业出版社.2004.07[2]BruceEckel.侯捷译.Java编程思想.机械工业出版社出版社.2005.03[3]王森.Java手机/PDA程序设计入门.电子工业出版社.2005.02.[4]JamesKeogh.潘颖王磊译.J2ME开发大全.清华大学出版社.2004.02[5]IanSommerville.程成等译.软件工程.机械工业出版社.2003.01[6]陈立伟,张克非,黎秀红.精通JAVA手机游戏与应用程序设计.中国青年出版社.2005.05[7]微型爪哇人.Java手机程序开发.中国铁道出版社,2003[8]FrandM.Carrano,JanetJ.Prichard . 韩志宏译.数据抽象和问题求解——JAVA语言描述.清华大学出版社2005.04[9]袁海燕,王文涛.JAVA实用程序设计100例.人民邮电出版社.2005.0547--

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭