基于Android系统的足球游戏设计与实现_第1页
基于Android系统的足球游戏设计与实现_第2页
基于Android系统的足球游戏设计与实现_第3页
基于Android系统的足球游戏设计与实现_第4页
基于Android系统的足球游戏设计与实现_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、 基于Android系统的足球游戏设计与实现专业班级: 姓 名: 指导教师: 摘 要近年来,3G移动互联网的发展越来越快,智能手机的普及率越来越高,各种各样的手机操作系统也被各大公司相继研发和推广。Android系统是谷歌公司为移动平台开发的开源操作系统,也是目前市场占有率最高、最有发展潜力的操作系统。基于Android系统的手机游戏是Android应用软件中的最重要的组成部分,有庞大的用户人群,也必将拥有极大的发展潜力,而足球游戏作为游戏的重要分类也必将拥有极大的市场。本文首先提出足球游戏的开发的总体框架,总结了足球游戏开发涉及的一些关键技术,包括多线程技术、图形处理技术、以及游戏开发中的碰

2、撞检测技术。对游戏的应用环境、性能、功能等进行需求分析。在此基础上对游戏进行详细设计以及编码实现,最后对游戏进行全面测试。经测试,游戏的功能基本实现,并且运行比较流畅,画面效果较好,有一定的可玩性,能够满足用户的需要。关键字:Android,手机游戏,足球,碰撞检测ABSTRACTIn recent years,as development of the 3G Mobile Internet,the penetration rate of smartphone gets higher,various smartphone operating systems have come outAndro

3、id operating system for mobile platform made by Google company is open source operating system,which is also known as the most potential and occupancy smartphone operating systemThe mobile games based on the Android operating system are the main part of Android application software,with a huge numbe

4、r of the user crowd,and must be have great development potentialFootball game is the important classification must be have great market occupancyFirstly in this paper the football game development framework is put forward.Some key technologies which the football game development involves are summari

5、zed,including the multithreading technology,the graphics processing technology and the collision detection technologyIn the function of the site,the overall database design,and detailed analysis and implementation on the basis of the overall design of the game user and administrator modulesAccording

6、 to the test, the game realizes its basic functions, and runs fluently, whose picture effect is pretty good and have a part of gameplay.Keywords: Android,Mobile phone game , Football , Collision detection 目 录目 录5第1章 绪论71.1 课题研究背景71.1.1 手机游戏的发展以及足球游戏的地位71.1.2 Android手机游戏平台71.1.3 Android手机平台的优势71.2 An

7、droid操作系统特性81.3 Android操作系统框架结构91.4 Android手机足球游戏的市场价值91.5 本章小结10第2章 需求分析102.1 环境要求102.1.1 软件需求102.1.2 配置环境102.2 功能模块分析112.3 本章小结12第3章 整体设计123.1 足球类游戏概述123.2 总体结构123.3 游戏的主要流程设计143.4 本章小结15第4章 详细设计与实现154.1 控制调度模块的实现154.2 逻辑计算模块的实现244.2.1 游戏角色的移动和射门244.2.2 电脑角色(NPC)人工智能的实现254.3 图形界面的实现264.3.1 欢迎界面和菜单

8、界面的实现264.3.2 加载界面进度条的实现284.4 声音模块的实现294.5 碰撞检测的实现294.6 本章小结31第5章 系统测试315.1 游戏测试概述315.2 测试环境325.3 游戏运行结果325.4 本章小结32第6章336.1 总结336.2 致谢33参考文献34第1章 绪论1.1 课题研究背景1.1.1 手机游戏的发展以及足球游戏的地位手机游戏是指消费者利用随身携带并具有无线网络联机功能的智能移动终端设备,能随时随地进行的游戏。手机游戏最大的特点是能够随时随地进行游戏的便利性。这些年来,手机游戏市场保持高速的发展,手机游戏已经成为使用率和下载率最高的娱乐应用,手机游戏作为

9、手机用户最喜欢的移动应用之一,在iPhone和Android等智能终端推出后发展迅速。在中国,根据易观智库产业数据库发布的2012年第4季度中国手机游戏市场季度监测数据显示,我国2012年手机游戏市场规模已经达到65亿元,继续保持了较快的发展。足球游戏是最受玩家欢迎的手机游戏类型之一,拥有不同画面和玩法可以满足玩家各种需求,一直以来足球游戏都是游戏下载的热门,拥有广阔的市场和巨大的用户人群。1.1.2 Android手机游戏平台 Android是Google公司于2007年11月5日宣布基于Linux平台的开源手机操作系统,号称是首个为移动终端打造的真正开放和完整的移动软件。自从Android

10、操作系统平台发布以来,Android平台一直以惊人速度发展,并支持Android智能手机迅速进入领先行列。迄今Android是手机市场占有率最高的手机操作系统,是销售增长最快、最成功的竞争者。 游戏作为Android平台最主要的应用,随着Android手机用户数量的增多,移动互联网业界的许多人士都对Android手机游戏的发展表示乐观态度,更有数据表明Android手机游戏是游戏产业的下一个阶段,也是手机游戏的未来。1.1.3 Android手机平台的优势常见的智能手机平台有:Symbian、Windows Mobile、Blackberry、iPhoneOS等。Android平台的优势主要体

11、现在以下方面。(1) 开放性 Android平台是开放性的平台,任何移动厂商都可以加入到Android联盟中来。Android的开放性使其拥有更多的开发者,开放性更有利于积累人气,这里的人气包括消费者和厂商,而对于消费者者来说,开放的平台带来了更大的竞争使软件资源更加丰富,并且手机价格降低,消费者可以花更少的钱购得满意的手机。(2) 挣脱运营商的限制 过去的很长的一段时间,手机的应用往往受到运营商的影响,是用什么功能接入什么网络,几乎都要受到运营商的控制。自从Android上市,用户可以更加方便的连接网络,运营商的制约减少。(3)多样的硬件选择 这一点与Android平台的开放性相关。由于An

12、droid的开放性,厂商可以随意的搭配推出功能特色各异的多种产品。功能上的不同不会影响到数据同步甚至软件的兼容,联系人等个人资料更是可以方便的转移。(4)开发软件不受限制 Android平台提供给第三方开发商一个十分宽裕的环境。因此不会受到各种规则的限制,带来的结果就是有无数新颖别致的软件诞生。 1.2 Android操作系统特性Android操作系统主要包括以下特性:应用框架:用于开发可重用可替代的组件。Dalvik虚拟机:Android采用Java虚拟机是自主研发的代号为Dalvik的虚拟机,Dalvik针对移动手机进行了大幅优化,占用资源更小,运行效率更高。集成的浏览器:基于开源的引擎W

13、ebkit。优化的图形:强大的自定义二维图形库。基于OpenGL ES 1.0标准的3D图形功能,在移动3D开发中有着至关重要的作用。SQLite数据库:SQLite提供结构化的数据存储。SQLite作为一款轻型免费的数据库,设计目标是嵌入式的。SQLite具备占用资源低、需要的内存空间少、处理速度快,并且还支持事务处理功能等优点。多媒体支持:支持各种通用的音视频和静态图像格式(MPEG4、MP3、JPG、PNG、GIF、AAC、AMR)。GSM技术:Global System for Mobile Communication,全球移动通讯系统,简称全球通,是第二代移动通讯技术,其作用是可以让

14、全球各地可以使用一个移动电话网络标准,用户使用一部手机就能走遍全球。蓝牙,EDGE,3G,and Wi-Fi:蓝牙和Wi-Fi都是一种短距离无线连接技术,在短距离内可以实现数据的无线传输。EDGE是增强型数据速率GSM演进技术。Camera,GPS,Compass,and Accelerometer:GPS,即全球定位系统。它是一个由覆盖全球的24颗卫星组成的卫星系统。Compass是一个开放源代码的Java搜索引擎框架。强大的开发环境:包括一个设备模拟器,调试工具,内存和性能检测,以及EclipseIDE的开发插件。Eclipse是个集成开发环境。1.3 Android操作系统框架结构 An

15、droid作为一个开源的移动设备平台,其软件层次结构自上而下分为四个层次,分别是:应用程序(Application)、应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(Run Time)、Linux内核(Linux Kennel)。 1.4 Android手机足球游戏的市场价值 随着计算机技术和移动通信技术的快速发展,手机用户的数量越来越多,用户在挑选手机时已经不再满足于基本的通话功能。而新的技术在某种程度上提高了手机设备处理数据的能力,能够满足用户多样性的需求。已经有越来越多的研发机构开始研发手机应用软件。手机游戏作为手机上的应

16、用软件类型之一,深受广大用户尤其是青少年用户的喜爱。由于手机硬件资源有限、屏幕小、游戏时间短等特点,是手机很适合运行那些剧情简单、操作方便、有竞技性和智力型的游戏。足球游戏作为手机游戏的重要组成部分,具有操作简单易于上手、竞技性较强的特点,有很强的娱乐性,不受地域的限制,甚至能够无视文化壁垒。每一种精良的足球游戏都会点燃周围潜在玩家的激情,是玩家用来娱乐和打发时间的首选游戏之一。综上所诉,Android平台相比其他智能手机平台有许多优势,这些优势使Android发展迅速,而Android游戏作为Android手机最主要的应用,其市场价值是有目共睹的,因此Android足球游戏的市场前景也是广阔

17、的。1.5 本章小结 本章主要论述了足球游戏的研究背景及平台,介绍了Android操作系统的框架结构和应用程序的主要构成,阐述了Android足球游戏的市场价值,为Android足球游戏开发实现打下了理论基础。第2章 需求分析2.1 环境要求2.1.1 软件需求 (1)JDK,Java开发工具包,Android应用软件大部分是用Java语言编写的,所以开发Android应用首先需要Java开发包的支持。 (2)Eclipse,Java开发环境有许多,但Google只为Android的集成开发环境Eclipse提供了专门的开发插件ADT。 (3)Android SDK,Android SDK是A

18、ndroid专属的软件开发包,提供了一系列用于开发应用程序的工具,包括:模拟硬件设备的Emulator、Android资源打包工具AAPT、Dalvik调试监视服务DDMS、Android调试桥ADB和将.class字码文件转换成.dex文件的DX工具等。该软件开发包是编写Android应用程序的核心,必不可少。2.1.2 配置环境 (1)配置JDK,下载完成后双击直接安装即可。Android应用程序的开发过程中,为了使用Java工具进行编译、运行,需要配置Java环境变量。首先在环境变量中创建一个名为“java_home”的环境变量,变量值为java的安装路径,然后修改环境变量path,将J

19、ava的bin目录添加到其中并用“;”隔开,后期如果要安装更高版本的JDK,仅需要修改环境变量java_home的值为新的JDK安装路径。 (2)配置Eclipse,下载后不需要安装,解压后直接可以使用。首先为Eclipse配置Android专用开发包ADT,选择“Help->Install New Software”选项,弹出一个新窗口,然后选择“Add Site”按钮,在弹出“Location”对话框中输入“http:/dl- Tools。 (3)配置Android SDK,将Android SDK开发包解压至硬盘,然后打开环境变量配置,修改环境变量path,将Android SDK

20、下的tools目录添加到其中并用“;”隔开。然后在Eclipse的菜单栏上打开“Preference”选项,成功安装ADT后就可以在左侧列表中看到Android标签,打开并在“SDK Location”中选择解压缩的Android SDK目录,在下面的空白处会显示当前所支持的所有SDK版本,点击“Apply”则Android SDK配置完成。2.2 功能模块分析 足球游戏情景较为简单,给人带来的刺激爽快的感觉和良好的操作才是最重要的。游戏的主要功能模块如下: (1)界面显示模块,整个游戏界面包括游戏界面和辅助页面两个部分。其中游戏界面是游戏的主要界面,辅助界面包括欢迎界面、菜单界面、加载界面、

21、胜利界面以及失败界面,界面的切换有的是自动跳转有的需要按钮来切换界面或退出游戏。 (2)角色模块,本游戏的角色包括游戏主角、NPC等。游戏的主角是玩家的控球队员,玩家通过上下左右控制其游戏方向,按不同的按钮来传球、射门以及抢球。这里还需要设计碰撞检测的算法以及碰撞后的处理。游戏的NPC是指电脑控制的对方球员,对其增加人工智能,使其具有感知足球动向并移动的能力,并设计跟踪算法使其能够追逐玩家角色。 (3)音效模块,为了增加游戏乐趣和玩家强烈体验,根据游戏不同的场景增加一定的音效,包括进球时音效、胜利时音效以及失败时音效、传球音效等。 (4)地图模块,在玩家选定好球队后会有不同的比赛场的,球员的服

22、装也会相应的变化。2.3 本章小结本章着重于介绍研发Android足球游戏的需求分析。对设计时的环境,性能要求进行比较简单的说明。给出游戏中各个模块的功能,为游戏整体设计提供帮助和指导。第3章 整体设计 3.1 足球类游戏概述本课题开发的Android手机游戏名为“疯狂足球”,属于2D动作竞技类游戏。动作竞技类游戏一般都讲究节奏快,考验玩家的反应和操作能力,其火爆刺激的场面受到许多玩家的喜欢。PC机上的足球类游戏在玩法上一般有单人模式、双人模式以及多人对战模式,而手机上的足球类游戏一般都是单人模式。这种游戏一般操作简单,易于上手,主要是控制角色的行走放向以及传球和射门。足球类游戏会给每个队伍不

23、同的属性,使玩家可以选择不同难度的对手,提高游戏乐趣。足球类游戏的特色是游戏节奏快、场面火爆,能锻炼玩家的反应能力、大局观以及不同人物间的配合,需要玩家高度集中精神到游戏中。所以这类游戏在设计时,一般要选好背景,要重视画面的重视,因为画面的精美是吸引玩家的一个重要方面。另外为了提高游戏的可玩性,会使每个球员的属性不同,比如前锋的射门命中率高而抢断率低,而后卫相反。对手的难度也是这类游戏设计的一个重点,难度要适中,不要太难也不要太简单,最好能够让玩家自由选择,否则会大大降低游戏的可玩性。3.2 总体结构在设计游戏时,根据功能的不同,把整个游戏功能架构分为了五个功能模块:控制调度模块、逻辑计算模块

24、、数据存储模块、图形界面模块和声音播放模块,图3.2是游戏的总体功能架构图。图形界面模块声音播放模块逻辑计算模块控 制 调 度 模 块数据存储模块 图3.2 游戏总体功能架构图各个功能模块的设计描述如下:(1) 控制调度模块 是整个游戏的核心模块,它将游戏中的各个模块连接为一个整体,起到整体控制调度的作用。调度控制模块将设计由MainActivity类来实现,其实现的主要功能有: 是整个游戏的入口,在启动游戏时直接调用MainActivity中的onCreat()函数进入游戏。 获取游戏输入信息,设计onKeyUp和onKeyDown两个回调函数来获取输入,获得状态值保存到相应的变量中。 设计

25、通过Handler机制完成多线程之间的通信,实现画面的切换。(2) 逻辑计算模块 此模块的功能有: 根据获取的状态信息,计算出玩家角色的移动方向和距离,以及敌方角色的移动。 根据敌我双方的距离,我方玩家和敌方玩家以及足球之间的碰撞检测,并根据检测结果进行相应的处理。 为敌方角色添加人工智能,使其变得智能化,能够感知足球和玩家角色的位置,并向玩家方向移动,所以在此处需要实现跟踪算法。(3) 数据存储模块此模块设计有两部分组成,一部分设计通过一个常量类来封装游戏中用到的常量,另一部分通过实现地图类来存储敌方角色的移动线路。(4) 图形界面模块主要负责各种显示画面的绘制,在游戏中,设计的可视化界面包

26、括:欢迎界面、菜单界面、游戏说明界面、加载界面、游戏界面、胜利界面以及失败界面。用分别得类来实现,并通过MainActivity实现各个界面之间的转换和调度控制。(5) 声音播放模块此模块主要负责游戏声音的播放。在游戏界面是有背景音乐,在游戏进行是还有穿插不同的音效效果,比如:进球时的欢呼、丢球时的叹息等。此模块通过Android提供的SoundPool类和MediaPlayer类来实现。3.3 游戏的主要流程设计 游戏的总体流程图如图3.3所示 图3.3 游戏总体流程图 上面是游戏总体流程图,进入游戏首先是加载界面。同时会在后台加载欢迎界面和菜单页面的资源。然后进入到欢迎界面然后跳转到菜单界

27、面,在菜单界面有4个按钮,分别是开始游戏、游戏说明、声音设置以及退出游戏,选择开始游戏后将加载游戏所需要的资源,然后后进入游戏界面。程序采用面向对象的设计模式,进入游戏后在主程序运行的线程中,画面将不断的刷新,实时反映整个游戏的进行状态。在屏幕重绘的主程序中,将每次判断若干事件,如玩家与足球的碰撞,敌方与足球的碰撞,足球与球门的碰撞等。 3.4 本章小结 本章主要介绍Android手机游戏“疯狂足球”的总体设计。本游戏属于动作竞技类游戏。本章首先介绍了动作射击游戏,然后描述了本游戏需要实现的功能,接着对本游戏的主要流程进行了设计及整个功能架构的设计,最后给出了游戏总体流程图。第4章 详细设计与

28、实现4.1 控制调度模块的实现 在本游戏中,控制调度模块主要是由MainActivity类来实现的,MainActivity继承自Activity类,它提供了整个游戏的入口。并且在游戏运行过程中也随时需要MainActivity的管理,组成此类的主要成员变量如下所示: int action = 0; GameView gameView WelcomeView welcomeView FailView failView HelpView helpView WinView winView ProcessView processView boolean isSound = true Handler

29、gameHandler以上是主要的成员变量,其中整型变量action表示键盘的状态,其值由封装在此类中的回调函数onKeyUp()、onKeyDown()来获得。之后都是对各种View类的引用。下面重点介绍下Handler,这里定义了一个Handler类的对象gameHandler,Handler主要负责线程之间的通信,通过接受消息来更新UI线程中的控件。这里使用Handler类主要实现的是根据接收到的消息做出相应的切换视图操作,从而控制调度各个视图的显示。Handler机制使得线程间的通信通过Message和Runnable对象来传递和处理29。在此模块的实现中,Handler传递的消息内容

30、被封装到一个Message对象中,Message中包含了消息的描述和任何形式的可以被Handler发送的数据对象,其最主要的字段是what,此字段由用户自己定义,为消息类型码,接收方可以根据该字段的值来确定收到的消息是关于什么的。这里重点实现了Handler类中的handleMessage()方法,此方法用来接收并处理消息,接收的参数为一个Message对象。在这里定义了Message的what字段,根据接收到的what字段的值来切换到不同的界面,从而实现对整个游戏运行的管理。MainActivity类的成员函数,如下图所示MainActivity+onCreat()+toWelcomeVie

31、w()+toGameView()+initHelpView()+initFailView()+initWinView()+onKeyUp()+onKeyDown 图4.1 MainActivity类结构图主要函数介绍如下: onCreat():此函数是 Activity类的入口函数,在此函数中先将手机设置成全屏模式,然后切换到加载界面并在后台初始化欢迎动画界面。 toWelcomeView():此函数实现欢迎界面的切换。 toGameView():此函数实现游戏界面的切换。 initHelpView():此函数初始化帮助界面。 initFailView():此函数初试化失败界面。 initWi

32、nView():此函数初始化胜利界面。 onKeyUp()、onKeyDown():这两个函数为手机键盘的监听方法。用来获得键盘的状态值,并把它存到action变量中。 上面介绍了实现控制调度模块的MainActivity 类,可以看出这里主要通过Android中的 Handler 机制来控制当前屏幕显示哪一个界面,从而完成控制调度功能。下面给出游戏界面代码。public class FootballActivity extends Activity View current; / 记录当前ViewGameView gv; / GameView对象WelcomeView welcome; /

33、欢迎界面LoadingView lv; / 进度条加载界面int keyState = 0; / xxxx00为不动,xxxx10为向左,xxxx01为向右PlayerMoveThread pmt; / 移动球员位置的线程boolean wantSound = true; / 是否播放声音标志位int layoutArray; / 表示球员球场站位的数组MediaPlayer mpWelcomeMusic; / 游戏开始前的欢迎音乐MediaPlayer mpKick; / 踢球音效MediaPlayer mpCheerForWin; / 赢了的音乐MediaPlayer mpCheerFor

34、Lose; / 输了的音乐MediaPlayer mpCheerForGoal; / 进球后的音乐MediaPlayer mpIce; / 撞到冰山后的音乐MediaPlayer mpLargerGoal; / 撞到打开球门后的音乐Rect rectPlus; / 代表增加球员按钮的矩形框Rect rectMinus; / 代表减少球员按钮的矩形框Rect rectSound; / 是否播放声音按钮的矩形框Rect rectStart; / 开始按钮的矩形框Rect rectQuit; / 退出按钮的矩形框Rect rectGallery; / 表示Gallery的矩形框int imageID

35、s = / 存放8个俱乐部的图片IDR.drawable.club_1, R.drawable.club_2, R.drawable.club_3, R.drawable.club_4,R.drawable.club_5, R.drawable.club_6, R.drawable.club_7,R.drawable.club_8 ;int clubID = imageIDs0; / 记录用户选择的俱乐部的IDpublic void onCreate(Bundle savedInstanceState) / 重写onCreate方法super.onCreate(savedInstanceSta

36、te);initWelcomeSound(this); / 初始化开场动画音乐requestWindowFeature(Window.FEATURE_NO_TITLE); / 设置全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);welcome = new WelcomeView(this); / 将屏幕切到欢迎界面setContentView(welcome);/ current是当前activity中打开的视图curren

37、t = welcome;/ wantSound一个变量表示用户是否开启音乐if (wantSound && mpWelcomeMusic != null) / 如需要,播放相应声音mpWelcomeMusic.start();initRects(); / 初始化用于匹配点击事件的矩形框/ 方法:初始化欢迎界面的声音public void initWelcomeSound(Context context) mpWelcomeMusic = MediaPlayer.create(context, R.raw.music);/ 方法:初始化矩形框public void initRec

38、ts() rectPlus = new Rect3;rectMinus = new Rect3;for (int i = 0; i < 3; i+) rectPlusi = new Rect(244, 200 + 40 * i, 280, 236 + 40 * i);rectMinusi = new Rect(280, 200 + 40 * i, 316, 236 + 40 * i);rectSound = new Rect(135, 370, 185, 420);rectStart = new Rect(205, 425, 295, 475);rectQuit = new Rect(2

39、5, 425, 115, 475);rectGallery = new Rect(10, 10, 310, 110);Overridepublic boolean onTouchEvent(MotionEvent event) / 重写onTouchEvent方法if (event.getAction() = MotionEvent.ACTION_UP) / 判断事件类型int x = (int) event.getX(); / 获得点击处的X坐标int y = (int) event.getY(); / 获得点击处的Y坐标if (current = welcome) / 如果当前界面是欢迎界

40、面if (rectGallery.contains(x, y) / 用户点击的是Gallerywelcome.cg.galleryTouchEvnet(x, y); / 交给Gallery来处理点击事件 else if (rectSound.contains(x, y) / 点下的是声音选项this.wantSound = !this.wantSound; / 更改声音选项return true; else if (rectStart.contains(x, y) / 点下开始键if (checkLayout(welcome.layout) / 检查玩家选择的布局是否正确layoutArray

41、 = welcome.layout; / 获得玩家选择站位布局lv = new LoadingView(this); / 创建读取进度Viewthis.setContentView(lv); / 将屏幕设为读取进度的LoadingViewthis.current = lv; / 记录当前Viewlv.lt.start(); / 启动LoadingView的刷屏线程new Thread() / 启动一个新线程,在其中创建GameView对象public void run() if (wantSound) initSound();/ 初始化声音gress = 100;welcome =

42、 null; / 释放掉WelcomeView.start();gv = new GameView(FootballActivity.this,imageIDswelcome.cg.currIndex); else if (rectQuit.contains(x, y) / 按下退出键System.exit(0); / 程序退出 else / 检查是否按下了修改队员站位的加号和减号按钮for (int i = 0; i < 3; i+) if (rectPlusi.contains(x, y) / 如果有加号按钮点下,就增加对应进攻防守线上人数/ 如果有富余的人再加if (welcome

43、.layout0 + welcome.layout1+ welcome.layout2 < 10) welcome.layouti+;break;if (rectMinusi.contains(x, y) / 如果有减号按钮点下,就减少相应人数if (welcome.layouti > 0) / 如果该处人数不为零,就减少一个welcome.layouti-;break; else if (current = gv) / 如果当前显示的View为GameViewif (gv.rectMenu.contains(x, y) / 如果点下了菜单按钮gv.isShowDialog = t

44、rue; / 设置显示对话框gv.ball.isPlaying = false; / 足球停止移动pmt.flag = false; / 使PlayerMoveThread空转 else if (gv.rectYesToDialog.contains(x, y) / 如果点下的是对话框中的”是“按钮if (gv.isShowDialog) / 检查对话框是不是正在显示welcome = new WelcomeView(this); / 新建一个WelcomeViewsetContentView(welcome); / 设置当前屏幕为WelcomeViewwelcome.status = 3;

45、/ 直接设为待命状态current = welcome; / 记录当前屏幕gv = null; / 将GameView指向的对象声明为垃圾if (wantSound && mpWelcomeMusic != null) / 如需要,播放声音mpWelcomeMusic.start(); else if (gv.rectNoToDialog.contains(x, y) / 如果点下的是对话框中的”否“按钮if (gv.isShowDialog) / 检查对话框是不是正在显示gv.isShowDialog = false; / 不显示对话框pmt.flag = true; / 设

46、置双方球员可移动gv.ball.isPlaying = true; / 设置足球可移动 else if (current = lv) / 如果当前屏幕为LoadingViewif (gress = 100) / 如果进度达到100%setContentView(gv); / 屏幕切换到GameViewcurrent = gv; / 记录当前Viewlv = null; / lv指向的对象声明为垃圾/ 将欢迎界面的音乐关掉if (mpWelcomeMusic.isPlaying() mpWelcomeMusic.stop();/ 启动线程,线程控制球和球员gv.startGame()

47、; / 开始游戏return true;/ 方法:加载游戏中用到的声音public void initSound() mpKick = MediaPlayer.create(this, R.raw.kick);updateProgressView();/ 更新进度条mpCheerForWin = MediaPlayer.create(this, R.raw.cheer_win);updateProgressView();/ 更新进度条mpCheerForLose = MediaPlayer.create(this, R.raw.cheer_lose);updateProgressView();

48、/ 更新进度条mpCheerForGoal = MediaPlayer.create(this, R.raw.cheer_goal);updateProgressView();/ 更新进度条mpLargerGoal = MediaPlayer.create(this, R.raw.lager_goal);updateProgressView();/ 更新进度条mpIce = MediaPlayer.create(this, R.raw.ice);updateProgressView();/ 更新进度条/ 更新进度条的进度public void updateProgressView() lv.p

49、rogress += 15;Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) / 处理键盘按下事件的回调方法switch (keyCode) case 21: / 左keyState = keyState | 2;keyState = keyState & 0xfffffffe; / 清除掉其他的键盘状态break;case 22: / 右keyState = keyState | 1;keyState = keyState & 0xffffffd; / 清除掉其他的键盘状态break;default:b

50、reak;return true;Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) / 处理键盘抬起事件的回调方法switch (keyCode) case 21: / 左keyState = keyState & 0xffffffd; / 清楚该状态位break;case 22: / 右keyState = keyState & 0xfffffffe; / 清楚该状态位break;default:break;return true;/ 检查用户输入的layout合不合法public boolean chec

51、kLayout(int layout) int sum = 0;for (int i = 0; i < layout.length; i+) / 遍历存放球员站位的数组if (layouti < 0) / 如果发现某个进攻/防守阵线上的球员为负数return false; else sum += layouti; / 将各个阵线上的球员个数相加if (sum = 10) / 如果和为10,则该站位合法return true; else return false; / 返回false 游戏的主类,负责切换视图,接收和捕获用户的键盘输入并做相应处理。游戏的欢迎View,加载进度的Vie

52、w和游戏视图View在这里都有引用,可以切换,通过onTouchEvent方法处理函数来接受用户点击屏幕事件public class CustomGallery Bitmap bmpContent; / Gallery要显示的内容图片int length; / Gallery要显示的图片数组大小int currIndex; / 当前被显示的图片的索引int startX; / 绘制Gallery时其左上角在屏幕中的X坐标int startY; / 绘制Gallery时其左上角在屏幕中的Y坐标int cellWidth; / 每个图片的宽度int cellHeight; / 每个图片的高度public CustomGallery(int startX, int startY, int cellWidth, int cellHeight) this.startX = startX;this.st

温馨提示

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

评论

0/150

提交评论