基于安卓系统的游戏开发与设计_第1页
基于安卓系统的游戏开发与设计_第2页
基于安卓系统的游戏开发与设计_第3页
基于安卓系统的游戏开发与设计_第4页
基于安卓系统的游戏开发与设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

基于安卓系统的游戏开发与设计摘要3G时代已经慢慢的融入了我们的日常生活,随着国家的通信政策以及各大运营商的宣传的影响,3G已经随处可见,面对全球信息、技术空前高速开展,信息高速化开展更是社会进步的一个标志。在全球信息化的今天,已经成为人们日常生活中不可缺少的一局部,尤其是在电子产品日新月异的今天,我们在平时随处可见的电子产品中,无疑是一个最大的用户集,而各大厂商智能那么依旧是电子市场的一颗耀眼的明星。其中的代表作有诺Nokia的塞班系统,摩托罗拉的Linux系统,但是其中异军突起的仍然是Google的Andriod系统以其开放的源代码和方便简洁的操作必然是未来智能领域的领头羊。这次毕业设计我们选择基于Andriod的游戏一定会使我们在以后的工作中提供更多的时机。随着新技术的不断开发与应用,近年来Java技术开展十分迅速,一个以Java应用为主的新技术革命浪潮正在蓬勃兴起。而基于Andriod的软件开发是一个前景很大的技术,通过这次毕业设计,能使我们从对软件的设计中体会到实际中软件开发的过程,提高我们的专业能力,最终能够获得很强的专业知识。关键词:Android游戏,Android平台,Java技术,游戏设计BasedontheplatformAndroidgamedevelopmentanddesignAbstract3Gerahasgraduallyintegratedintoourdailylife,withthecountry'scommunicationpolicyaswellasthemajorcarriersofsensitizationtotheeffectsof3Gmobilephone,canbeseeneverywhere,inthefaceoftheglobalinformationtechnology,anunprecedentedrapiddevelopment,theinformationhighspeeddevelopmentisasymbolofsocialadvancement.Intheglobalinformationtechnologytoday,mobilephonehasbecomeindispensableinthedailylifeofapart,especiallyinelectronicproductschangerapidlytoday,weusuallycanbeseeneverywhereintheelectronicproducts,mobilephoneisundoubtedlyoneofthelargestusersets,andmajormanufacturersofintelligentmobilephonewillstillbeelectronicmarketadazzlingstar.TherepresentativeofConnaughtNokiaSymbian,theMotorolaLinuxsystem,butwhichisstillanewforcesuddenlyrises.GoogleAndriodsystemforitsopensourcecodeandconvenientandsimpleoperationisthefutureleaderinthefieldofintelligentmobilephone.ThistimegraduatethedesignwechoosebasedontheAndriodmobilephonegameswillmakeourworkinthefuturetoprovidemoreopportunities.Withthenewtechnologydevelopmentandapplication,inrecentyearsthedevelopmentofJavatechnologyisveryrapid,aJavaapplicationoftideofnewtechnologyrevolutionisbooming.Andriodbasedsoftwaredevelopmentisagreatprospectoftechnology,throughthisgraduationdesign,canmakeusfromonthesoftwaredesignoftheactualsoftwaredevelopmentprocess,improveourprofessionalskills,canfinallyobtainstrongprofessionalknowledge.Keywords:Androidmobilephonegames;theAndroidplatform;Javatechnology;gamedesign目录TOC\o"1-3"\h\u23628基于Android平台的游戏开发与设计 015851BasedontheplatformAndroidgamedevelopmentanddesign126419目录26348第1章绪论4163221.1课题的背景、目的与意义4267701.2国内外现状425149第2章系统需求分析5290182.1需求概括516232.1.1目标572462.1.2用户类和特征5183862.1.3运行环境5308452.2Android环境搭建567892.2.1环境搭建5284832.2.2HelloWorld9316742.3可行性分析12175862.4相关技术简介13131542.4.1java开发语言1331932.4.2Android开发13194352.4.3递归算法1416101第3章工程设计16239943.1工程总体设计16140503.2功能模块设计16295993.2.1游戏开始模块16269343.2.2游戏选关模块16142683.2.3游戏主界面模块16261743.2.4游戏帮助模块17216743.2.5游戏排行模块177643.2.6链接模块1753623.3技术框架设计1711068第4章系统实现18233074.1游戏开始模块18117864.1.1云的动画效果设计1916065310264.2游戏难度选择模块2117252游戏难度选择2124878简易难度选择23248784.2.3普通难度选择24248784.2.4困难难度选择2561124.3游戏菜单模块28248784.3.1游戏菜单主界面28248784.3.2类型是否可以使用36226124.4游戏特效模块38248784.4.1记忆错误特效38248784.4.2记忆成功特效39248784.4.3翻牌特效40248784.4.4狗的移动特效4017914.5游戏进程模块43178554.6游戏音乐模块436179第5章总结与期望442658致谢458722参考文献46第1章绪论1.1课题的背景、目的与意义2007年,Google公司推出了Android操作系统,该系统是基于Linux平台的开源操作系统,并且该系统已经成为了新3G时代的主流移动智能平台之一,根据调查,在中国基于Android操作系统的智能在中国智能总销量中所占的比例已经到达了52%,越来越多的用户在接触安卓。Android是一种以Linux为根底的开放源代码操作系统,主要使用于便携设备。目前尚未有统一中文名称,中国大陆地区较多人使用“安卓〞或“安智〞。Android操作系统最初由AndyRunbin开发,最初主要支持。2005年由Google收购注资,并组建开发联盟开发改进,逐渐扩展到平板电脑及其他领域上。Android的主要竞争对手是苹果的ios及RIM的BlackBerryOS。2023年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。2023年2月数据,Android占据全球智能操作系统市场52.5%的份额,中国市场占有率为68.4%。移动互联网,就是将移动通信和互联网二者结合起来,成为一体。在最近几年里,移动通信和互联网成为当今世界开展最快、市场潜力最大、前景最诱人的两大业务,它们的增长速度都是任何预测家未曾预料到的,所以移动互联网可以预见将会创造怎样的经济神话。伴随着移动互联网的快速开展,智能的快速普及,传统的制质地图已经不能满足现在市民的便利出行。运行在安卓系统平台的游戏,运行在安卓平台的游戏深受大家的喜爱。现在,Android游戏不但可以运行于智能,也可以运行在平板电脑上。1.2国内外现状将向专业化、大规模化方向开展随着各平台对OpenGLES支持能力的大力加强,使得开发复杂的3D场景游戏成为可能。更多显示芯片对Android的支持,硬件性能将不再成为制约专业化游戏开展的瓶颈。越来越多在PC、PSP、PS3、XBOX360等各游戏平台占有领先地位的专业游戏公司将向Android等平台领域快速渗透,使得游戏的规划更加向专业化方向开展。2.将向网络化方向开展随着各平台对无线通信网络、WIFI网络、蓝牙网络的良好支持,游戏将创新出更好的游戏性和用户本验。网络游戏,多人游戏,联机对战等将进一步强化玩家对游戏的粘着度,并且容易通过对道具等的控制产生营利模式。玩家之间对交互能力的需求也会促成未来的游戏向网络化开展进程的加快。3.将向休闲化、时间片化方向开展移动设备的随身性使是休闲小游戏将得到快速的开展。移动设备对分散时间的利用促进了游戏向时间片化开展,即一个游戏可以随时开始,随时结束,充分利用用户分散的时间片来运行。作为时下最热门的系统,android游戏拥有广阔的用户群,所以android游戏的开发也显得相当重要,不仅要有娱乐性,也需要一定的益智性。方块拼图是一个开发用户智力的小游戏,每个关卡都需要动点脑筋,同时拥有评星系统,可以为用户带来一定的刺激性,不断的去提高自己的过关速度。第2章系统需求分析2.1需求概括目标该游戏简单容易上手,更有一定的益智性,可以锻炼你的记忆能力,也有一定的娱乐性,其中不同游戏类型能让你感觉到这个游戏的多样性用户类型和特征用户主要是16岁至45岁的用户群,用户只需要操作界面就能够进行游戏的操作。运行环境硬件资源装载了Android系统的智能。〔2〕软件资源操作系统:WindowsXP或Windows7。AndroidsdkJDK:jdk1.6。Eclipse2.2Android环境搭建在开始Android开发之旅启动之前,首先要搭建环境,然后创立一个简单的HelloWorld。本文的主题如下:环境搭建1.JDK安装如果你还没有JDK的话,可以去这里下载,接下来的工作就是安装提示一步一步走。设置环境变量步骤如下:1.我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量:2.JAVA_HOME值为:D:\ProgramFiles\Java\jdk_18〔你安装JDK的目录〕3.CLASSPATH值为:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\bin;4.th:在开始追加%JAVA_HOME%\bin;5.NOTE:前面四步设置环境变量对搭建Android开发环境不是必须的,可以跳过。安装完成之后,可以在检查JDK是否安装成功。翻开cmd窗口,输入java–version查看JDK的版本信息。如图2.1所示:图2.1验证JDK安装是否成功2.Eclipse安装如果你还么有Eclipse的话,可以去这里下载,下载如图2.2所示的EclipseIDEforJavaDevelopers〔92M〕的win32bit版:图2.2Eclipse下载解压之后即可使用。3.AndroidSDK安装在AndroidDevelopers下载android-sdk_r05-windows.zip,下载完成后解压到任意路径。运行SDKSetup.exe,点击AvailablePackages。如果没有出现可安装的包,请点击Settings,选中Misc中的"Forces://..."这项,再点击AvailablePackages。选择希望安装的SDK及其文档或者其它包,点击InstallationSelected、AcceptAll、InstallAccepted,开始下载安装所选包在用户变量中新建PATH值为:AndroidSDK中的tools绝对路径〔本机为D:\AndroidDevelop\android-sdk-windows\tools〕。如图2.3所示:图2.3设置AndroidSDK的环境变量“确定〞后,重新启动计算机。重启计算机以后,进入cmd命令窗口,检查SDK是不是安装成功。

运行android–h如果有图2.4所示以下的输出,说明安装成功:图2.4验证AndroidSDK是否安装成功4.ADT安装翻开EclipseIDE,进入菜单中的"Help"->"InstallNewSoftware"点击Add...按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入。如图2.5所示:图2.5addsite框图确定返回后,在workwith后的下拉列表中选择我们刚刚添加的ADT,我们会看到下面出有DeveloperTools,展开它会有AndroidDDMS和AndroidDevelopmentTool,勾选他们。如图2.6所示:图2.6install框图然后就是按提示一步一步next。完成之后:选择Window>Preferences...在左边的面板选择Android,然后在右侧点击Browse...并选中SDK路径,本机为:

D:\AndroidDevelop\android-sdk-windows点击Apply、OK。配置完成。5.创立AVD为使Android应用程序可以在模拟器上运行,必须创立AVD。1、在Eclipse中。选择Windows>AndroidSDKandAVDManager2、点击左侧面板的VirtualDevices,再右侧点击New3、填入Name,选择Target的API,SDCard大小任意,Skin随便选,Hardware目前保持默认值4、点击CreateAVD即可完成创立AVD注意:如果你点击左侧面板的VirtualDevices,再右侧点击New,而target下拉列表没有可选项时,这时候你:点击左侧面板的AvailablePackages,在右侧勾选,如图2.7所示:图2.7availablepackages框图然后点击InstallSelected按钮,接下来就是按提示做就行了要做这两步,原因是在1.3、AndroidSDK安装中没有安装一些必要的可用包〔AvailablePackages〕[1]。HelloWorld通过File->New->Project菜单,建立新工程"AndroidProject"然后填写必要的参数,如图2.8所示:〔注意这里我勾选的是GoogleAPIs,你可以选你喜欢的,但你要创立相应的AVD〕图2.8helloWord框图相关参数的说明:ProjectName:包含这个工程的文件夹的名称。PackageName:包名,遵循JAVA标准,用包名来区分不同的类是很重要的,我用的是helloworld.test。ActivityName:这是工程的主类名,这个类将会是Android的Activity类的子类。一个Activity类是一个简单的启动程序和控制程序的类。它可以根据需要创立界面,但不是必须的。ApplicationName:一个易读的标题在你的应用程序上。在"选择栏"的"Usedefaultlocation"选项,允许你选择一个已存在的工程。点击Finish后,点击Eclipse的Run菜单项选择择RunConfigurations…选择“AndroidApplication〞,点击在左上角〔按钮像一张纸上有个“+〞号〕或者双击“AndroidApplication〞,有个新的选项“New_configuration〞〔可以改为我们喜欢的名字〕。在右侧Android面板中点击Browse…,选择HelloWorld在Target面板的Automatic中勾选相应的AVD,如果没有可用的AVD的话,你需要点击右下角的Manager…,然后新建相应的AVD[2]。如图2.9所示:图2.9Target框图然后点Run按钮即可,运行成功的话会有Android的模拟器界面,如图2.10所示:图2.10安卓模拟器界面2.3可行性分析可行性分析是在全面调查根底上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、运行的方面进行分析和研究,以防止投资失误,保证新系统开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。这局部将从以下三个方面进行研究:技术可行性、经济可行性、操作可行性。1.技术可行性Android游戏需要掌握java开发语言和Android系统,另外对于算法也要有所掌握。2.经济可行性Android游戏需要的硬件资源不大,已有Google提供Android系统平台,只需要一台智能,客户端即可体验该游戏带来的益智和趣味性。3.操作可行性Android游戏的开发需要具备一定的Android开发技术和对算法技术的掌握,懂得操作智能。2.4相关技术简介本系统的用户为所有使用客户端的客户,本系统拥有游戏难度选择;游戏类型选择;而且还有各种不同的游戏特效,相关技术如下:java开发语言它最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项方案。就在Oak几近失败之时,随着互联网的开展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,以“Java〞的名称正式发布。Jjava编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指针〔以引用取代〕、运算符重载〔operatoroverloading〕、多重继承〔以接口取代〕等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在JavaSE1.5版本中,Java又引入了泛型编程〔GenericProgramming〕、类型平安的枚举、不定长参数和自动装/拆箱等语言特性。Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码〔bytecode〕,然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行〞的跨平台特性。不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE发布后,Java的执行速度有了大幅提升。与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量〞是Sun公司的口号之一,并获得了广阔软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun公司对Java编程语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮、平安与系统无关、可移植、高性能、多线程和动态的语言。Java平台是基于Java语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的.NET平台以及模仿Java的C#语言。2.4.2Android开发Android的系统架构和其它操作系统一样,采用了分层的架构。android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。Android是以Linux为核心的操作平台,作为一款开放式的操作系统,随着Android的快速开展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢送,成为真正意义上的开放式操作系统。在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程,还有其他诸如:Qt〔qtforandroid〕、Mono〔monoforandroid〕等一些著名编程框架也开始支持Android编程,甚至通过MonoDriod,开发者还可以使用C#作为编程语言来开发应用程序。另外,谷歌还在2023年特别发布了针对初学者的AndroidSimple语言,该语言类似Basic语言。而在网页编程语言方面,JavaScript,ajaxa,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。而在Android系统底层方面,Android使用C/C++作为开发语言[2]。应用程序〔局部〕早期的Android应用程序开发,通常通过AndroidSDK〔Android软件开发包〕下使用Java作为编程语言来开发应用程序,但通过不同的软件开发包,那么使用的编程语言也不同。例如开发者可以通过AndroidNDK〔AndroidNative开发包〕使用C语言或者C++语言来作为编程语言开发应用程序。同时谷歌还推出了适合初学者编程使用的Simple语言,该语言类似微软公司的VisualBasic语言。此外,谷歌公司还推出了GoogleAppInventor开发工具,该开发工具可以快速地构建应用程序,方便新手开发者。Java开发方面Android支持使用Java作为编程语言来开发应用程序,而Android的Java开发方面从接口到功能,都有层出不穷的变化。考虑到Java虚拟机的效率和资源占用,谷歌重新设计了Android的Java,以便能提高效率和减少资源占用,因而与J2ME等不同。如图2.11图2.11Android结构其中Activity等同于J2ME的MIDlet,一个Activity类〔Class〕负责创立视窗〔Windows〕,一个活动中的Activity就是在foreground〔前景〕模式,背景运行的程序叫做Service。两者之间通过由ServiceConnection和AIDL连结,到达复数程序同时运行效果。如果运行中的Activity全部画面被其他Activity取代时,该Activity便被停止〔Stopped〕,甚至被系统去除〔Kill〕。View等同于J2ME的Displayable,程序人员可以通过View类与“XMLlayout〞档将UI放置在视窗上,Android1.5的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的AndroidHero即含有大量的widget。至于ViewGroup是各种layout的根底抽象类〔abstractclass〕,ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity中,要通过findViewById()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。View与事件〔event〕息息相关,两者之间通过Listener结合在一起,每一个View都可以注册一个eventlistener,例如:当View要处理用户触碰〔touch〕的事件时,就要向Android框架注册View.OnClickListener。另外还有BitMap等同于J2ME的Image[2]。递归算法程序调用自身的编程技巧称为递归〔recursion〕。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的屡次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。注意:(1)递归就是在过程或函数里调用自身;(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口[4]。第3章工程设计3.1工程总体设计根据前面对该游戏所提出的需求,我将该系统分为8个局部,分别是游戏开始界面设计,游戏选关界面设计,游戏界面设计,游戏关卡评分功能,游戏排行功能,计算游戏得分,计算通关时间,游戏音乐的控制,游戏帮助提示功能。如图3.1所示:Android游戏Android游戏游戏音乐游戏进程游戏特效游戏音乐游戏进程游戏特效游戏开始游戏难度选择游戏菜单图3.1安卓游戏框架图3.2功能模块设计游戏开始模块游戏的入口点,一个游戏的入口需要做特别的设计,这样才能给人生动形象,新颖个性的感觉,才能引起游戏玩家的兴趣。游戏难度选择模块在这个模块中参加了游戏不同难度的设置,让新用户可以很好的上手此游戏,让老用户可以挑战更高的游戏难度,增加了游戏的可玩性。游戏菜单模块这个模块主要是丰富了游戏的多样性,参加了许多不同的游戏元素,让游戏用户操作起来不会枯燥乏味,增加了游戏的可玩性。游戏特效模块这个模块那么是为了使游戏看起来更加的生动有趣,游戏特效可以使得游戏看起来更加的生动让游戏的画面更加的生动。游戏进程模块这个模块可以让游戏操作者知道当前已经进行的游戏时间和游戏需要通关所剩的步骤,这是个具有人性化的设计。游戏音乐模块这个模块那么是控制游戏的音乐开关的模块,可以让游戏操作者自行选择是否开启游戏背景音乐。3.3技术框架设计Android系统共分为4层,从高到低分别是应用层,应用框架层,系统运行层和Linux内核层。应用层:应用是用JAVA语言编写的运行在虚拟机上的程序,Google最开始时就在Android系统中捆绑了一些核心应用,比方邮件客户端,短消息程序,日历,地图,浏览器等。应用框架层:这一层是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架来开发自己的应用,这样便简化了程序开发的框架设计,但是必须遵守其框架的开发原那么系统运行库层:当使用Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其能更好的为我们效劳。内核层:Android的核心系统效劳基于Linux2.6内核,如平安性,内在管理,进程管理,网络协议栈和驱动模型等都依赖于该内核。第4章系统实现在上一章着重讨论了系统各个模块功能的设计,并详细分析了每一个模块的功能。在本章将具体讨论如何实现功能模块,最终实现整个系统。经过这个阶段的设计工作,应该得出对目标系统的描述,各个Activity界面之间的开发。4.1游戏开始模块4.11游戏开始主界面游戏开始界面需要做得既简单又不失个性。所以通过不断的设计和思考,得到如下的效果,其中该界面在云彩的地方添加了相应的动画,是界面显得更加生动,下面两张图可以看出其效果,如图4.1以及4.2所示。图4.1主界面云朵位置一图4.2主界面云朵位置二图4.1和图4.2的云彩分别在不同的位置。云的动画效果设计//动画由另外的文件设置,这里将文件取出获取动画效果。findViewById(R.id.imgCloud1).setAnimation( AnimationUtils.loadAnimation(this,R.anim.cloud1)); findViewById(R.id.imgCloud2).setAnimation( AnimationUtils.loadAnimation(this,R.anim.cloud2));游戏的操作代码如下:if(!bCanClick)return; Log.v("time",(String)v.getTag());btnClick=(Button)v;if(iFirst==btnClick.getId()){return; }intiTagID=Integer.parseInt((String)v.getTag());//-1; MemoryAppapp=(MemoryApp)getApplicationContext(); StringsName=String.format("%s%d",app.theme_name,iTagID); Log.v("sName",sName);iResID=getResources().getIdentifier(sName,"drawable", getPackageName());btnClick.startAnimation(anim1);if(iFlag==-1){iFlag=iTagID;iFirst=btnClick.getId(); }else{if(iFirst==btnClick.getId())return; ImageViewimg=(ImageView)findViewById(TAG_RESULT_FLAG);if(img==null){ img=newImageView(this); img.setId(TAG_RESULT_FLAG); img.setScaleType(ImageView.ScaleType.CENTER); RelativeLayout.LayoutParamslayout=newRelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); layout.addRule(RelativeLayout.CENTER_IN_PARENT); addContentView(img,layout); } Messagemsg=newMessage(); msg.arg1=iFirst; msg.arg2=btnClick.getId(); Animationanim=AnimationUtils.loadAnimation(this, R.anim.result_translate); anim.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.bounce_interpolator));//cannotmatchimagereturnif(iFlag!=iTagID){ img.setImageResource(R.drawable.no); img.setAnimation(anim);if(toggleMusic.isChecked()){media=MediaPlayer.create(this,R.raw.wrong);media.start(); } msg.what=MSG_SET_DEFAULT_BUTTON; }else{ TranslateAnimationanimation=newTranslateAnimation(fDogMove*density, (fDogMove+dog_move)*density,0,0); animation.setFillAfter(true);imgDog.setAnimation(animation); img.setImageResource(R.drawable.ok); img.setAnimation(anim);if(toggleMusic.isChecked()){media=MediaPlayer.create(this,R.raw.right);media.start(); }fDogMove=(float)(fDogMove+dog_move); Log.v("fDogMove",fDogMove+""); msg.what=MSG_REMOVE_BUTTON;iMatchs--; }iFlag=-1;bCanClick=false; img.setVisibility(View.VISIBLE);splashHandle.sendMessageDelayed(msg,2000); }其中包括了handler技术。还有采用标志的方式来作为根底来判定能不能进行点击翻牌。4.2游戏难度选择模块游戏难度选择游戏难度选择会出现三种难度可供选择,分别为简易难度〔Easy〕;普通难度(Normal);困难难度〔Hard〕,用户可以根据自己的情况进行选择。以下图为第一次运行的时候的难度选择界面,如图4.3所示:图4.3难度选择主界面点击Menu按钮出现对话框,对话框是引入的XML文件来进行布局,布局代码如下:<LinearLayoutxmlns:android="://schemas.android/apk/res/android"android:orientation="vertical"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:background="@drawable/bg_menu"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btnEasy"android:background="@drawable/easy"android:layout_marginTop="114dip"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btnNormal"android:background="@drawable/normal"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btnHard"android:background="@drawable/hard"/><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginTop="10dip"android:gravity="center"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btnStart"android:background="@drawable/btn_begin"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/btnHelp"android:background="@drawable/btn_help"android:layout_marginLeft="8dip"/></LinearLayout></LinearLayout>简易难度选择当用户选择了简易难度并且点击了开始按钮后会跳转到另一个界面如图4.4所示,简易难度是一个4x4的矩阵也就是用户需要进行成功的连接8次就可以通关。图4.4简易难度界面普通难度选择当用户选择了简易难度并且点击了开始按钮后会跳转到另一个界面如图4.5所示,简易难度是一个4x6的矩阵也就是用户需要进行成功的连接12次就可以通关。图4.5普通难度界面困难难度选择当用户选择了简易难度并且点击了开始按钮后会跳转到另一个界面如图4.6所示,简易难度是一个6x6的矩阵也就是用户需要进行成功的连接18次就可以通关。图4.6困难难度界面难度主要是通过矩阵来控制,难度越大,矩阵越大,根据矩阵的长宽来设置用户游戏界面的地图,具体代码如下: DisplayMetricsdm=newDisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm);density=dm.density; drawBtn(iRow,iCol);iFirst=-1;iFlag=-1;iTimes=0;fDogMove=0;iDogFlag=DOG_STEP_LEFT;bCanClick=true;iBgMusicPosition=0;if(pw!=null){pw.dismiss();pw=null; }imgDog.clearAnimation();imgDog.setBackgroundResource(R.drawable.dog1);imgBone.setVisibility(View.VISIBLE);imgDogWin.setVisibility(View.INVISIBLE);imgDog.setVisibility(View.VISIBLE);toggleMenu.setChecked(false);toggleMusic.setChecked(true);if(bgMedia!=null){bgMedia.stop();bgMedia.release(); }bgMedia=MediaPlayer.create(this,R.raw.back_music);bgMedia.start();bgMedia.setLooping(true);bIsBgMusicOn=true; generateGame(iRow*iCol);//splashHandle.sendEmptyMessageDelayed(MSG_TIMER,SECOND_INTERVAL);if(timer!=null)timer.cancel();timer=newTimer("TimerUpdate");timer.scheduleAtFixedRate(newTimerTask(){publicvoidrun(){ setTimer(); } },0,SECOND_INTERVAL);if(dogTimer!=null)dogTimer.cancel();dogTimer=newTimer("TimerDog");dogTimer.scheduleAtFixedRate(newTimerTask(){@Overridepublicvoidrun(){//TODOAuto-generatedmethodstubif(iDogFlag==DOG_STEP_LEFT){splashHandle.sendEmptyMessage(MSG_DOG_STEP_LEFT);iDogFlag=DOG_STEP_RIGHT; }elseif(iDogFlag==DOG_STEP_RIGHT){splashHandle.sendEmptyMessage(MSG_DOG_STEP_RIGHT);iDogFlag=DOG_STEP_LEFT; } } },0,SECOND_INTERVAL_DOG); TextViewtv=(TextView)findViewById(R.id.txtStep); tv.setText(String.valueOf(iMatchs)); Toast.makeText(this,"TouchMENUButtontoStartNewGame", Toast.LENGTH_SHORT).show(); 4.3游戏菜单模块游戏菜单主界面游戏菜单界面〔如图4.7所示〕有9中不同的游戏方式可供用户选择,这个设置可以丰富游戏的方式,让用户可以体验不同的游戏内容。图4.7游戏菜单主界面这是activity的跳转,代码如下:Intentintent=newIntent(memory.this,ThemeListController.class); startActivity(intent);4.3.2水果类型设置可以选择水果类型的游戏内容如图4.8所示。图4.8水果类型界面4.3.3可以选择旗帜类型的游戏内容如图4.9所示。图4.9旗帜类型界面4.3.4可以选择表情类型的游戏内容如图5.0所示。图5.0表情类型界面4.3.5可以选择动物类型的游戏内容如图5.1所示。图5.1动物类型界面4.3.6可以选择物品类型的游戏内容如图5.2所示。图5.2物品类型界面4.3.7可以选择MSN类型的游戏内容如图5.3所示。图5.3MSN类型界面4.3.8可以选择食物类型的游戏内容如图5.4所示。图5.4食物类型界面4.3.9可以选择圣诞类型的游戏内容如图5.5所示。图5.5圣诞类型界面4.3.0在每种游戏类型的下方会提示是否能进行此类型的选择,如果可以选择那么是canuse〔如图5.6〕,否那么为used〔如图5.7〕。图5.6可以使用类型图5.7不可以使用类型第一个界面运用了ListView,通过适配器来将图片和文字布局到界面上,其代码如下: ThemeItemAdapterarrayAdapter=newThemeItemAdapter(this,R.layout.themerow,this.arryItems); ListViewlvTheme=(ListView)findViewById(R.id.lvTheme);lvTheme.setAdapter(arrayAdapter);lvTheme.setOnItemClickListener(newOnItemClickListener() {@OverridepublicvoidonItemClick(AdapterView<?>parent,Viewview,intposition,longid) { Log.v("itemclick",":"+position); ThemeItemitem=arryItems.get(position); Intentintent=newIntent(ThemeListController.this,MyThemeGrid.class); intent.putExtra(getString(R.string.param_icontag),item.getIconTag());if(item.getStatus().equals("Used")) intent.putExtra(getString(R.string.param_iconstatus),10);else intent.putExtra(getString(R.string.param_iconstatus),11); startActivityForResult(intent,5000); } } );点击每一项都会跳进该类型的设置界面,该界面会显示该类型的所有图片,运用的是gridview,加载适配器后显示到界面中,代码如下:ImageAdapteradapter=newImageAdapter(this,sTag); grid.setAdapter(adapter); ButtonbtnSet=(Button)findViewById(R.id.btnSetTheme); btnSet.setOnClickListener(mClick);其中ImageAdapter是自定义适配器,传入一个数组将按照数据顺序来排列该类型的图片,代码如下:ImageViewimageView;if(convertView==null){//ifit'snotrecycled,initializesomeattributes imageView=newImageView(mContext);imageView.setLayoutParams(newGridView.LayoutParams(70,70));imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);imageView.setPadding(5,5,5,5);}else{imageView=(ImageView)convertView;}imageView.setImageResource(mThumbIds[position]);returnimageView;4.4游戏特效模块我们通过设置各种不同的特效让游戏看起来更加的生动有趣,同时也让游戏操作者能感受到游戏的乐趣。记忆错误特效模块如果游戏操作者记忆错误连错了图片那么会从屏幕上方掉落一个叉至屏幕中央如图5.8。图5.8错误特效效果在程序中引入动画文件:Animationanim=AnimationUtils.loadAnimation(this, R.anim.result_translate);anim.setInterpolator(AnimationUtils.loadInterpolator(this, android.R.anim.bounce_interpolator));失败后动画开始:img.setImageResource(R.drawable.no); img.setAnimation(anim);if(toggleMusic.isChecked()){media=MediaPlayer.create(this,R.raw.wrong);media.start(); }记忆成功特效模块如果游戏操作者记忆成功连对了图片那么两张一样的图片会产生爆炸效果并且消失如图5.9所示。图5.9成功特效效果爆炸效果代码如下:Buttonbtn0=(Button)findViewById(msg.arg1);Buttonbtn1=(Button)findViewById(msg.arg2); btn0.setBackgroundResource(R.anim.frame_animation); AnimationDrawableanimationDrawable=(AnimationDrawable)btn0 .getBackground(); animationDrawable.start(); btn1.setBackgroundResource(R.anim.frame_animation); AnimationDrawableanimationDrawable1=(AnimationDrawable)btn1 .getBackground(); animationDrawable1.start(); animationDrawable.setOneShot(true); animationDrawable1.setOneShot(true);if(toggleMusic.isChecked()){media=MediaPlayer.create(memory.this,R.raw.fi);media.start(); }该效果由补间动画完成,在XML文件中配置好,在程序中引用,主要是由5张图片的连续显示完成。翻牌特效模块翻牌的动画效果代码如下:anim1=newScaleAnimation(1,0,1,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);anim2=newScaleAnimation(0,1,1,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);anim3=newScaleAnimation(1,0,1,1,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);anim1.setDuration(150);anim2.setDuration(150);anim3.setDuration(150);anim1.setInterpolator(newLinearInterpolator());anim2.setInterpolator(newLinearInterpolator());anim3.setInterpolator(newLinearInterpolator());狗的移动特效模块游戏开始时屏幕下方的小狗位于屏幕左下角,如果游戏操作者成功的连对一对图片那么小狗会向前一步,通关后那么会叼起屏幕右下角的骨头表示通关成功如图6.0所示。图6.0小狗移动前界面图6.1小狗移动后界面每成功一次将会执行一次以下代码,就能完成狗的移动了:TranslateAnimationanimation=newTranslateAnimation(fDogMove*density, (fDogMove+dog_move)*density,0,0); animation.setFillAfter(true);imgDog.setAnimation(animation); img.setImageResource(R.drawable.ok); img.setAnimation(anim);if(toggleMusic.isChecked()){media=MediaPlayer.create(this,

温馨提示

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

评论

0/150

提交评论