基于Android策略型游戏开发毕业设计

上传人:仙*** 文档编号:106755704 上传时间:2022-06-13 格式:DOC 页数:34 大小:867KB
收藏 版权申诉 举报 下载
基于Android策略型游戏开发毕业设计_第1页
第1页 / 共34页
基于Android策略型游戏开发毕业设计_第2页
第2页 / 共34页
基于Android策略型游戏开发毕业设计_第3页
第3页 / 共34页
资源描述:

《基于Android策略型游戏开发毕业设计》由会员分享,可在线阅读,更多相关《基于Android策略型游戏开发毕业设计(34页珍藏版)》请在装配图网上搜索。

1、毕业设计 题 目 基于Android策略型游戏开发毕业设计 系 别 计算机科学与工程系 专 业 计算机科学与技术 年 级 级 层 次 学 号 姓 名 指导老师 2012年4月15日教务处 毕业设计书原创性声明本人郑重声明:所呈交的论文设计书是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。本人完全意识到本声明的法律后果由本人承担。 毕业设计作者签名 2012年 4月 20 日毕业设计书版权使用授权书本毕业设计书作者完全了解学校有关保障、使用毕业设计书的规定,同意学校保留并向有关学位论文管理部门或机构送交设

2、计书的复印件和电子版,允许论文被查阅和借阅。本人授权省级优秀学士学位设计书评选机构将本设计书全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本设计书属于: 保密,在 年解密后适用本授权书。 不保密。 (请在以上相应的方框内打“”) 作者签名(手写) 年 月 日指导教师签名(手写) 年 月 日目录Abstract:5摘要:11.前言111 手机游戏的现状2111 手机系统2112 手机游戏的种类3113 android手机的特性312 对研究课题的启发42. 需求分析与系统设计结构421 Android架构422 系统设计6221 功能模块划分622

3、2 运行环境7223 控制引擎823 游戏研究思路1024 游戏所涉及的各个类11241 前台表示模块的类结构11242 游戏实体模块的类结构12243 数据存取模块的类结构12244 游戏工具模块的类结构133.游戏实现1331 游戏开始菜单页面设计1332 游戏主界面设计1433 数据存取模块的开发2034 英雄角色模块的开发2335 管理面板模块的开发264.结束语29参考文献:29致谢30Develop The Simulation Game of Android 2.1 ByLiu MuxiApril, 2012Abstract: With the rapid development

4、 of SciTech and culture in nowadays, people raise their requirements for video games. From the earliest Snake and Tetris to network games, the charm of video games swept over the world. Moreover, the emerging smart phone has offer a platform for the rapid growth of video games. These terminals provi

5、de better environment for developing mobile casual games and applications, especially iPhone and Android.This article will research and develop a strategy game Dynasties in Flame, which is based on the Android system provided by Google. Adopting game design, map design, the development of Said layer

6、 interface module, data access Module and Map in case of an entity module, this game is a combination of great entertainment interface and logical content. Firstly this article introduces the strategy games related basic theory, operation platform and implementation technique. Secondly, it mainly re

7、searches the technical feature of Case of an entity module and data access method, which brings higher efficiency on mass data integration and data assessment. Thirdly, it researches graphic component and audio component in order to enhance the visual and audio effects of the game. Lastly, it carrie

8、s a performance test of different modules.Keyword: Android; Simulation Game; Smartphone; Data accessAndroid2.1策略型游戏开发刘沐曦摘要:在科技文化高速发展的今天,人们对电子游戏娱乐的需求也日益高涨。从最初的运行于掌上游戏机的“贪吃蛇”和“俄罗斯方块”到如今风靡全世界的网游无不体现了游戏的魅力。而随着智能手机终端的涌现,更是为电子游戏提供了高速发展的平台。特别是iPhone智能手机和Android智能手机的面世,为掌上休闲游戏与应用提供了更完善的的开发环境。本文基于Google公司为广大

9、智能手机开发者提供的Android系统环境,研究并开发了一款名为“烽火三国”的策略型游戏。该游戏主要是综合使用游戏的策划,地图设计,表示层界面模块的开发,数据存取模块的开发,地图中可遇实体模块的开发,并将它们整合开发出一个具有良好娱乐界面和思维性的策略型游戏。首先,论文介绍了实现策略游戏的相关理论基础、运行平台和实现技术;其次,论文重点研究了可遇实体模块的技术特点及游戏数据的存取,让本游戏的大量数据更易整合,提高数据的存取效率;再次,为了让游戏具有较强的视觉和听觉冲击,本论文研究并融入了图形图像组件和音效组件;最后,论文对游戏的各个模块进行了功能和性能测试。关键词:android;策略游戏;智

10、能手机;数据存取1.前言随着人们生活水平的提高,以及商品的多样化更新的加快,人们对游戏娱乐已经成为了生活中不可或缺的一部分。与此同时,人们的生活节奏也随着加快,这就直接影响了人们是否只能在电脑上玩游戏。再加上经济全球化和智能手机的普及,人们逐渐认识到手机游戏的方便,因而手机游戏成为了人们娱乐的另一种娱乐方式1。手机游戏带使人们在随时随地都能享受到它带来的乐趣,成为人们跨地域娱乐的重要渠道,因而逐渐的改变人们娱乐模式和消费观念,让手机游戏成为了当今的时尚2。电脑游戏从八九十年代开始便在大家的记忆里扎根,二十年过去了,说起“贪吃蛇”和“超级玛丽”依然在脑海里根深蒂固。近来二十年,随着计算机硬件的性

11、能不断的提升以及软件开发者的努力,游戏作品在创意和视听效觉都有飞跃的发展。目前电脑游戏行业非常繁荣,竞争激烈。随着智能手机的普及,越来越多的游戏开发人员逐渐把目光转移向这个新兴行业。目前手机游戏应用开发方面以Android SDK、J2ME MIDP、Objective C为主流开发环境。Android SDK为开发者提供大量全面的API,包括SQLite数据库操作的API, 2D图形渲染的SurfaceView,3D图形图像框架OPENGL ES。论文在研究了Android SQLite、图形图像处理、AppWidget框架、多点触控接口、多线程等游戏相关技术的基础上融合中国古代三国历史文化

12、实现的一款策略型游戏。11 手机游戏的现状无论是出于效仿,还是迫于竞争,多数的游戏运营商也加入了手机游戏的行列,使手机游戏极具竞争性。这样导致了个游戏研发商为了赢得最终的消费者,对手机游戏的优缺都进行了大优化。111 手机系统现在主流的智能手机操作系统主要有Google的Android系统,苹果公司的iOS系统以及微软的Windows Mobile系列。Android系统是Google推出的基于Linux平台的开源手机操作系统,它采用软件叠层的架构,由三层组成。底层只提供基本功能,在Linux内核工作,由C语言开发;中间层是由C+开发的Library和Virtual Machine;上层是由j

13、ava开发的各种应用软件,本次的设计Android游戏便是在上层开发的3。iOS系统是苹果公司开发iPhone所用的操作系统,它是以Darwin为基础,主要用于苹果公司的平板产品。iOS的系统架构为四层组成,分别是核心服务处、核心操作系统层、可轻触层、媒体层。Windows Mobile 系列操作系统是从微软计算机的Windows操作系统演化而来的。Windows Mobile系统是微软从windows操作系统演化而来的。使用Windows mobile系统的智能手机大多采用英特尔嵌入式处理器,主频比较高,再加上内存、储存卡容量也比采用其他操作系统的智能手机高出很多,所以性能比强劲,速度比较快

14、。112 手机游戏的种类手机游戏的种类基本和电脑游戏一样,目前在手机上开发出的较为成功的游戏主要有FTG格斗游戏、PUZ益智类游戏、RPG角色扮演游戏、SLG策略型游戏五类。其中格斗游戏诞生于街机,曾经风靡一时的“街头霸王”就是典型的代表。FTG系统的核心是对战斗部分进行碰撞检测计算。益智游戏需要玩家以自己的智慧对游戏的规则进行思考、判断从而通关以获得成就感4。PUZ系统对玩家要求不高,是手机游戏中受众面最广的游戏,代表作品是“推箱子”。角色扮演游戏是最能与用户共鸣的游戏,开启了一扇通往虚拟现实的大门,让玩家融入到游戏的世界里,沉浸在成长中,“仙剑奇侠传”是其经典例子。RPG游戏的核心是代表玩

15、家角色成长的升级系统,一个个故事情节贯穿游戏,牵动着玩家的情感。策略型游戏没有固定的玩法,玩家根据自己的喜好排兵布阵,与敌方展开战斗。SLG游戏的核心是游戏的不定性,完全由玩家主观意识控制,其代表作是“三国志”。手机游戏研发的重点是游戏的情节和UI。视觉是人的第一感知,UI的好坏直接影响人们对于游戏的第一印象,所以一个好的UI是非常重要的。游戏的情节是一个游戏可玩性的重点,是否有内涵、有深度,有未知的东西可玩,有否求追,还是无尽的刷刷刷,关系到一个游戏的寿命。韩国游戏就因为不重视情节,没有什么深度,所以被戏称为泡菜游戏。游戏的操纵方面也有革命性发展,从最初按键操纵到后来的屏幕多点触控再发展到现

16、在的重力感应操纵。随着手机游戏的高速发展,Google公司也越来越重视游戏的开发。在推出的Android2.3版本时增强了对游戏开发支持力度,同时提升了多媒体影音和通信功能。增加了新的垃圾回收和优化处理事件,以提高对游戏的支持能力。原生代码可直接存取输入和感应器事件、EGL/OpenGL ES、OpenSL ES、新的管理窗口和生命周期的框架。同时还强化了SQLite数据库管理功能,更加方便游戏数据的存取5。113 android手机的特性Android系统是一个处处体现与手机相关特性,应用于智能手机之上的操作系统。Android SDK2.2只要的特性有:可重用和可替换组件的程序应用框架针对

17、移动设备优化过的dalvik虚拟机继承了基于开源webkit引擎的网页浏览器经过优化的自定义2D图形库和基于opensl ES 1.0库 可选硬件加速SQLite结构化的数据存储数据库支持常规的音频视频多媒体格式蓝牙、GPRS-EDGE、3G和wifi无线网络相机、GPS全球定位、导航和感应加速器丰富的开发环境包含设备模拟器、工具、调试器、内存和性能分析工具以及Eclipse继承开发环境插件12 对研究课题的启发论文研究了Andriod SDK开发环境以及该环境下的appwidget框架、SQLite数据库、surfaceview 2D图形渲染技术等手机游戏开发相关技术。在本游戏软件中,首先运

18、用android内嵌的SQLite数据库实现游戏数据的存取,为游戏的各个功能模块提供数据源。本论文重点研究了两种游戏数据的存取方式,第一种方式是android内置的sqlite数据库,用于存取大容量的永久性游戏数据,提供给游戏一个安全稳定的数据源;第二种方式是share preferences,是一个轻量级的数据存储,用于暂存游戏的中间数据。二者构成游戏的数据核心。其次通过appwidget框架的broadcast和service机制,将游戏界面映射至手机桌面,使用户更直接的体验游戏的精彩。2. 需求分析与系统设计结构这里要讲的是android的架构,系统的需求分析与系统设计结构,分析本游戏的

19、可运行性以及详细的介绍了烽火三国系统的结构。21 Android架构Android平台大致可以划分成三个大层次,包括一个操作系统,中间件和应用程序,android是一组面向移动设备的软件包。图2.1为android系统软件层架构图,android系统软件层由上往下分成应用程序(applications)、应用框架(application frameworks)、库函数(libraries)、运行时库(android runtime)、操作系统(linux kernel):图2.1 android软件层架构图1.应用程序Android将同一系列核心应用程序包一起发布,基本上都是通过JAVA语言开

20、发的能够独立完成特别功能的应用程序。该应用程序包包括SMS短消息程序,日历,电子地图,浏览器,联系人等基本的应用程序。应用程序的框架组件主要包括9种: UI组件,如按钮、文本框、标签、列表等,如果想方便高效的创建友好的用户交互界面就必须要灵活的运用这些组件; Content Providers内容提供者,可以简单的理解成为应用程序提供的一种服务,让服务与应用程序之间能够实现数据的共享与相互访问; Resource Manager资源管理,android中大量的资源很多例如颜色、字体、图片、UI组件的Id、用户界面(Layout xml)等等都被称之为资源,这些丰富的资源,都需要通过Resour

21、ce Manager来统一进行管理; Notification Manager消息通知管理,它可以在不影响用户使用设备喝正常操作的时候在系统的状态栏上自动的提供消息提示,让用户可以及时的看到; Activity Manager活动管理,它管理着所有应用程序的生命周期,并且控制着应用程序的导航,充当一个控制器的角色。每个Activity相当于Windows应用中的一个窗口。通常的应用一般都是通过多个Activity交互的构成; Window Manager窗口管理,所有启动的窗口都被其管理; Location Manager地理位置管理是Google为开发者提供的独具特色的功能,用其管理地图相关

22、的服务; Telephoney Manager电话管理,为应用程序提供与电话相关的诸如来电监听之功能; Package Manager包管理,实现软件包的安装并管理安装在系统之内的所有应用程序。 2.应用框架 开发人员也可以在自己开发的项目中直接访问应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;在遵循框架安全性限制的原则下,任何一个应用程序都可以发布它的功能块给任何其它的应用程序使用。同样,该应用程序重用机制也使用户可以重构来突破原先组件的功能限制。3.库函数/运行时库 该层内容大部分已经涉及到底层,普通的应用不需直接对此层进行操作。每一个Android应用程序都在它自己的

23、进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik VM是android平台下的一个虚拟机。Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的“dx” 工具转化成“.dex”格式由虚拟机执行6。4.Linux 内核 Android 的核心系统服务是在 Linux 2.6 内核的基础上开发出来的,包括安全性,内存管理,进程管理, 网络协议栈和驱动模型7。驱动程序模型包含触摸屏驱动、摄像头驱动、WiFi驱动、闪存驱动、音频驱动、按键驱动、电源管理驱动、IPC驱动

24、共八个重要驱动。22 系统设计221 功能模块划分该策略型游戏应该具备有视图面板、管理面板、游戏提示、可遇实体、英雄角色、地图加载、存档与读档、公式计算、常量管理等功能。根据游戏系统功能的需求分析,可以将系统的功能划分为4个模块。 前台表示模块该模块用于游戏的画面渲染,包括视图界面、管理面板、游戏提示,面向所有的玩家,是玩家直接操作的页面。 游戏实体模块该模块是游戏主要用于后台游戏逻辑,包括可遇实体模块、英雄角色模块,可遇实体模块是地图上那些可以被英雄遇到并假发一系列动作的实体,由于每个玩家的玩法不同导致成长不同,所获取的页面也会不同。 数据存取模块该模块用于获取源文件信息和玩家游戏数据,包括

25、地图加载模块和游戏的存档与读档模块。地图加载主要是将从地图设计器中所获取的地图信息文件加载到游戏中生成地图矩阵的过程。存档与读档用于玩家对游戏的连续性。 工具类模块该模块将自身的静态类提供给游戏中的其他类使用。本游戏中的工具类包括对常量进行统一管理的constantUtil和用于存储公式的gameformula类,游戏的公式主要是对战斗的结果、英雄体力增减等计算。根据本系统的功能模块介绍,本游戏的系统功能模块图如图2.2所示。烽火三国前台表示模块数据存取模块工具类模块视图界面游戏实体模块游戏提示管理面板可遇实体模块英雄角色模块地图加载存档与读取公式计算模块常量管理模块图2.2 烽火三国系统功能

26、模块图 222 运行环境操作系统:Android2.1要求手机有足够大容量的内存。223 控制引擎 Activit是Android构造块中最基本的也是必须的一种,所有程序的流程都必须运行于Activity中。在游戏程序中,各个Activity是层级的关系,一个Activity通常就是一个单独的屏幕。每一个Activity都被实现为一个独立的类,并且继承于Activity这个基类。这个Activity类将会显示由几个Views组件组成的用户接口,并对事件做出响应。Activity是Android用户唯一可以看见的东西,几乎所有的Activity都与用户进行交互,它最主要的作用是创建显示窗口,在程

27、序中可以通过setContentView(View)来显示在Res/Layout中自定义的UI界面,并可提取UI元素进行操作8。一个游戏由若干屏幕页面组成,所以便有多个Activity。Activity之间的可以相互切换,并通过Intent来实现通信。Android系统是通过Activity栈来管理Activity的,在游戏的运行过程不同的Activity会经历不同的生命周期。 Activity的生命周期中本质上分为四种状态即:(1)activity在屏幕的前景中则处于activity栈的顶端,它是active或者running状态。 (2)activity失去了焦点但是仍然可见,如这个act

28、ivity顶上遮挡了一个透明的或者非全屏的activity,它的状态则是paused。一个paused状态的activity完全是alive的。它维护自己所有的状态和成员信息,而且仍然在window manager的管理中,但当系统内存极度贫乏时也会将其killed9。(3)activity由于其他的activity而完全变暗,它就进入了stopped状态。它仍然保持着所有的状态和成员的信息,可是,他对于用户来说不可见,当别的地方需要内存的时候它经常会被killed。 (4)activity是paused或者stopped,系统需要将其清理出内存的时可以命令其finish或者简单kill其进程

29、。当它重新在用户面前显示的时候,它必须完全重新启动并且将其关闭之前的状态全部恢复回来。游戏在操作过程中可能会发生界面切换,遇到接电话、收发短信甚至电量不足关机等偶发情况都会影响Activity的状态。Android系统对资源控制较严,在状态的转换时可能对资源回收,为了保证程序的正确性,必须在onPause()里写上持久层操作的代码,将游戏产生的数据都保存到存数据库中。游戏运行中生命周期的变化而带来的其他问题也很多,例如游戏创建的线程在运行中被中断了,则可以暂停、杀掉或数据回滚来维护此线程。因为Activity可能被杀掉,所以线程中使用的变量和一些界面元素就需要采用Android的消息机制Han

30、dler或Message来处理多线程和界面交互的问题。Intent是Android系统中用于通信和交互的一种机制,不但可以实现不同应用间的通信与交互还可以在应用程序内部的不同Activity以及Service间实现交互。在通信过程Intent起了一个媒介的作用,提供组件互相调用的相关信息,为调用者与被调用者解耦。在不同应用程序交互时,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。在本宠物游戏中不同Activity就是通过Intent来交换数据的10。游戏中

31、Activity的相互调用的动作需要在AndroidManiFest.xml的Intent Filter中进行描述,当发生调用关系时,Android会解析对应的Intent来决定如何来调用Activity,需要解析Intent属性包括以下六类:(1)Action,指定要执行的动作。可以是自己定义的动作也可以是系统预定义的动作。宠物游戏中指定的通常是自定义的动作以完成特定功能,如掉调用输入屏幕为游戏提供用户数据。系统预定义的动作通常是与手机使用紧密相关的动作,例如发送短信的动作ACTION_CALL。(2)Data,指定动作要操作的数据,通常用URI来表示,例如联系人的URI为content:/

32、contacts/1。(3)type,显式指定Intent的数据类型。(4)category,动作的类别,例如LAUNCHER_CATEGORY 表示此动作为顶级应用,在应用软件启动后便执行,相当于MAIN函数。(5)component,指定Intent的的目标组件的类名称。(6)extras,指定动作的附加信息集合。需要传递的数据都可以保存到extras中来实现数据通信。相应动作在Intent Filter中配置好后就可以在Activity中实例化,如果需要传递参数则需要绑定Bundle来附加需要传递的数据,最后使用startActivity(myIntent)来启动动作。Service是一

33、种没有用户界面的后台程序,通常为前台Activity服务。它在Activity中由Content.startService()启动,也可以使用Content.bindService连接到另一个Service,之后可以通过Service提供的接口进行通信。当一个Service启动之后其他组件可以绑定到此Service,并通过远程调用来调用它定义的方法。在宠物游戏中定义了一个为AppWidget服务的Service和一个实现游戏版本升级的Service。由于Service运行于主进程中的,为减少对主线程或UI操作的阻塞,通常在Service中另启动一个新线程来完成特定操作。Service的生命周期

34、不一定与前台Activity同步,可以使用stopService()方法来结束Service从而回收线程占用的资源在策略游戏中要实现角色动画以及游戏声效,必须要采用多线程技术来与游戏同步,另外为AppWidget提供动画的Service也需要后台线程来支持。在Android虚拟机中每个线程的资源都有一定的限制,游戏在渲染角色动画时会消耗大量的系统资源,有时会出现内存溢出的状况,为减少线程阻塞的情况发生可以采取多线程渲染的方式。游戏在运行后会进入主屏幕的Activity,这时会启动一个主线程,这个线程主要负责与UI相关的工作,通常又称为UI线程。之后主线程根据需要实例化渲染线程、声效线程以及其他

35、服务线程并用Run()方法启动。当这些线程需要与其他线程或主线程通信同步时可以通过Android提供的Handle和Looper来进行数据以及参数传递。Android的线程分为有消息循环的线程和没有消息循环的线程。有消息循环的线程一般都会有一个Looper,主线程就是一个消息循环的线程。针对这种消息循环的机制引入了一个新的机制Handler。如果有消息循环,就要往消息循环里面发送相应的消息,自定义消息一般都会有自己对应的处理,消息的发送和清除,把这些都封装在Handler里面。Handler只是针对那 些有Looper的线程,不管是UI线程还是子线程,只要有Looper,就可以往消息队列里面添

36、加东西,并做相应的处理。但是关于UI相关的东西,就不能放在子线程中,因为子线程是不能操作UI的,只能进行数据、系统等其他非UI的操作。一个Handler的创建它就会被绑定到这个线程的消息队列中,如果是在主线程创建的,那就不需要写代码来创建消息队列了,默认的消息队列会在主线程被创建。但是如果是在子线程的话,就必须在创建Handler之前先初始化线程的消息队列。23 游戏研究思路本游戏的故事背景定在三国时期,游戏中的人名、城池名、对话等都根据三国时期的历史背景来确定。玩家的目标是控制英雄在三国乱世中并起中通过不断扩张自己的势力最终统一汉室。本游戏的地图界面采用图元技术,由于本游戏中的地图元素不仅仅

37、只有通过与否那么简单,因此开发该游戏时必须使用地图设计器,否则在设计地图及地图元素时很难进行。本游戏采用的游戏时间为正902.5D俯视视角。同时由于地图的尺寸超过了手机屏幕的尺寸,还需要在游戏中实现滚屏功能。24 游戏所涉及的各个类游戏中各个类的应用的好坏将直接影响到游戏的可玩性和实现的效果。本节将对实现了游戏各个功能模块的具体类进行简单的说明。241 前台表示模块的类结构 图2.3 前台表示模块的类结构 AboutView、MenuView和GameView等一系列继承自SurfaceView的视图是组成游戏视图界面的主要部分 GameAlert是继承自Object的自定义类,其子类组成了游

38、戏提示模块242 游戏实体模块的类结构 图2.4 游戏实体模块的类结构 MyDrawable对象是绘制地图的图元,其抽象类MyMeetableDrawable类实现对象在与英雄相遇,在相遇之后可以触发特定的操作。 Hero对象是游戏中另一个重要的实体对象,其封装了英雄的属性243 数据存取模块的类结构图2.5 游戏存取模块的类结构 GameData负责加载并生成下层平铺层的地图。 GameData2负责加载并生成上层平铺层的地图,地图中的可遇实体对象位于上层平铺层。 SerializableGame实现存储游戏状态和加载已存储的游戏。244 游戏工具模块的类结构图2.6 游戏工具模块的类结构工

39、具类模块比较简单,主要是对游戏中用到的常量进行统一管理。3.游戏实现从游戏功能模块可以知道,本游戏的模块可以分为一下几个部分。 数据存取模块 英雄角色模块 表示层界面模块 管理面板模块 地图中可遇实体模块 英雄技能模块 游戏提示模块下面对烽火三国的一些关键部分的模块给予介绍。31 游戏开始菜单页面设计菜单页面是玩家打开游戏后所见到的第一个页面,其中提供了初入江湖、风云再起、音效设置、江湖指引、群英荟萃、封剑归隐等选项。设计的页面如图3.1所示。图3.1 烽火三国开始菜单页面32 游戏主界面设计当玩家开始游戏后,进入游戏的主界面。玩家可以通过自己的玩法来扩张自己的领地,招募更多的武将。主UI的设

40、计如图3.2所示。图3.2 烽火三国主UI主UI各个功能代码实现如程序清单。ackage wyf.ytl;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.view.KeyEvent;import android.view.View;import android.view.Window;import android.view.WindowManager;pu

41、blic class HDZGActivity extends Activity LoadingView loadingView;/进度条界面的引用MenuView menuView;/开始游戏的主菜单界面 GameView gameView;/游戏主界面HelpView helpView;/帮助界面SoundView soundView;/刚开始时选择是否开启声音的界面SoundManageView soundManageView;/声音设置界面ScreenRollView screenRoll;/竹简滚屏界面AboutView aboutView;/关于界面boolean isBackSo

42、und = true;/是否有背景声音boolean isStartSound = true;/开场声音boolean isBattleSound = true;/战斗声音boolean isEnvironmentSound = true;/环境音View currentView = null;/当前的ViewHandler myHandler = new Handler()/用来更新UI线程中的控件 public void handleMessage(Message msg) switch(msg.what) case 1:/收到LoadingView的消息,切到MenuView if(lo

43、adingView != null) loadingView = null;/释放LoadingView toMenuView();/切换到开始游戏时的主菜单 break; case 2:/收到MenuView的消息,切换到ScreenRoll竹简滚屏 if(loadingView != null) loadingView = null; if(menuView != null)/释放 menuView = null; screenRoll = new ScreenRollView(HDZGActivity.this); setContentView(screenRoll); break; c

44、ase 3:/收到LoadingView的消息,切到GameView if(loadingView != null) loadingView = null;/释放LoadingView toGameView();/切换到游戏的主界面 break; case 4:/收到MenuView界面的消息,切换到HelpView helpView = new HelpView(HDZGActivity.this,5); HDZGActivity.this.currentView = helpView;/设置当前的View为HelpView HDZGActivity.this.setContentView(

45、helpView); break; case 5: menuView = new MenuView(HDZGActivity.this); toMenuView(); break; case 6: toGameView();/切换到游戏的主界面 break; case 7:/开始时的声音选择界面传来的消息 toLoadingView(1); new Thread()/后台启动加载需要加载的View public void run() Looper.prepare(); menuView = new MenuView(HDZGActivity.this);/初始化MenuView .start(

46、); break; case 8: helpView = new HelpView(HDZGActivity.this,6); HDZGActivity.this.currentView = helpView;/设置当前的View为HelpView HDZGActivity.this.setContentView(helpView); break; case 9: soundManageView = new SoundManageView(HDZGActivity.this,5); HDZGActivity.this.currentView = soundManageView; HDZGAct

47、ivity.this.setContentView(soundManageView); break; case 10: soundManageView = new SoundManageView(HDZGActivity.this,6); HDZGActivity.this.currentView = soundManageView; HDZGActivity.this.setContentView(soundManageView); break; case 11: if(loadingView != null) loadingView = null; if(screenRoll != nul

48、l)/释放 screenRoll = null; toLoadingView(3); new Thread() public void run() Looper.prepare(); gameView = new GameView(HDZGActivity.this);/初始化GameView .start(); break; case 12:/从AboutView传来的消息,需要到MenuView menuView = new MenuView(HDZGActivity.this); HDZGActivity.this.setContentView(menuView); HDZGActivi

49、ty.this.currentView = menuView; break; case 13:/从MenuView传来的消息,要到AboutView if(aboutView = null) aboutView = new AboutView(HDZGActivity.this); HDZGActivity.this.setContentView(aboutView); HDZGActivity.this.currentView = aboutView; break; case 14:/从GameView传来的消息,要到MenuView menuView = new MenuView(HDZG

50、Activity.this); HDZGActivity.this.setContentView(menuView); HDZGActivity.this.currentView = menuView; break; case 99: if(loadingView != null) loadingView = null; currentView = null; if(SerializableGame.check(HDZGActivity.this) toLoadingView(101);new Thread()public void run()tryThread.sleep(2000);cat

51、ch(Exception e)e.printStackTrace();Looper.prepare();if(gameView=null)gameView = new GameView(HDZGActivity.this);SerializableGame.loadingGameStatus(gameView);.start(); break; case 100: if(gameView != null) HDZGActivity.this.setContentView(gameView); break; ; public void onCreate(Bundle savedInstanceS

52、tate) super.onCreate(savedInstanceState);/全屏requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN , WindowManager.LayoutParams.FLAG_FULLSCREEN);soundView = new SoundView(this);this.setContentView(soundView);/先切到简单的声音开关界面GameData.resources=this

53、.getResources();GameData.initMapImage();GameData.initMapData();GameData2.resources=this.getResources();GameData2.initBitmap();GameData2.initMapData();GameView.initBitmap(this.getResources();BattleField.initBitmap(this.getResources();ManPanelView.initBitmap(this.getResources();WuJiangView.initBitmap(

54、this.getResources();UseSkillView.initBitmap(this.getResources();CityManageView.initBitmap(this.getResources();SelectGeneral.initBitmap(this.getResources();TianXiaView.initBitmap(this.getResources(); public void toLoadingView(int toViewID)loadingView = new LoadingView(this,toViewID);/初始化进度条this.curre

55、ntView = loadingView; this.setContentView(loadingView);/切换到进度条View /切换到开始游戏的主菜单 public void toMenuView() if(this.menuView != null)/当menuView不为空时切屏 this.currentView = menuView; this.setContentView(menuView); else/当为空时打印并退出 System.exit(0); /切换到游戏主界面 public void toGameView() if(this.gameView != null)/当

56、gameView不为空时 this.currentView = gameView; this.setContentView(gameView); else/当为空时打印并退出 System.exit(0); public boolean onKeyDown(int keyCode, KeyEvent event) if(currentView != null)currentView.onKeyDown(keyCode, event);return super.onKeyDown(keyCode, event);33 数据存取模块的开发该模块主要负责对游戏数据的存储和读取,包括依稀存档的恢复和地图文件的加载。CityInfo类封装了城池的静态信息,包括了城池名称、所属势力、兵力、

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