版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、<p> 基于Android操作系统的中国象棋手机游戏Chinese Chess Application based on Android Mobile OS</p><p> 指 导 老 师 : xxxxxxxxxxx </p><p> 姓 名 : xxxxxxxxxx </p><p> 学 号 : xxx
2、xxxxxxx </p><p> 学 院 : 软 件 学 院 </p><p> 专 业 : 软 件 工 程 </p><p><b> 摘 要</b></p><p> cnChess是运行在Android平台上的一款支持双人联网对局、即时聊天、对弈记录的休闲棋牌类手机
3、游戏。</p><p> 系统采用面向对象的编程思想进行构思与分析设计;使用UML构建软件模型;使用MVC架构模式实现系统的整体架构及各模块之间的接口设计;在系统的实践过程中还采用了部分GoF的设计模式进行编码与开发。</p><p> 本文详细系统地阐述了在Android平台上,应用MVC分层架构模式及面向对象的软件开发思想对cnChess游戏系统的分析、设计及实现过程。在项目的实践
4、过程中,主要用到了以下技术:手机布局主要使用了XML设计,程序及其子模块的生命周期管理用到了Activity流程控制,数据储存方面使用的是轻量级数据库SQLite、网络通讯部分使用的是XMPP即时通讯协议进行数据的传输、对弈的画面更新使用的是手机的2D图形编程。本论文的前半部分将简要介绍系统相关的行业信息及基础的技术知识,后半部分将对本人在系统各模块中所使用的关键技术的实现进行了全面的介绍。</p><p>
5、关键词:联网对弈;中国象棋;手机游戏 ;Android平台</p><p><b> ABSTRACT</b></p><p> CnChess is a Chinese Chess game that running on the Android platform.It support many of the features such as playing g
6、ames through the network, real-time chat, and play chess records of casual mobile games. </p><p> The CnChess game is object-oriented programming design and analysis of the idea of thinking; build software
7、models using UML; use of MVC architecture patterns to achieve the overall system and the interface between the module designs; in practice the system also uses some of the GoF's design patterns to coding and developm
8、ent. </p><p> This paper systematically expounded in the Android platform, the application of MVC pattern and hierarchical structure of object-oriented software development thoughts cnChess game system anal
9、ysis, design and implementation process. Practice in the course of the project, mainly used in the following technologies: cell phones primarily use XML layout design, process and life cycle management sub-module uses th
10、e Activity process control, data storage areas using a lightweight database SQLite, netw</p><p> Keywords: Network of games; Chinese chess; Mobile Games; Android platform目 录</p><p><b>
11、第1章 绪论1</b></p><p> 1.1问题的提出1</p><p> 1.2相关研究综述1</p><p> 1.2.1 Android手机操作系统的发展历程1</p><p> 1.2.2 国内外关于Android手机应用程序的研究及开发现状2</p><p> 1.3研究
12、目标与内容2</p><p> 1.3.1 研究目标2</p><p> 1.3.2 研究主要内容2</p><p> 第2章 Android程序设计相关技术概述4</p><p> 2.1 XUL界面布局4</p><p> 2.2 Android的Activity组件4</p>
13、<p> 2.3 SQLite数据库5</p><p> 2.4 XMPP协议5</p><p> 2.5 Android 2D图形编程5</p><p> 2.6 MVC模式简介5</p><p> 第3章 系统的分析与实现7</p><p><b> 3.1系统分析7&
14、lt;/b></p><p> 3.1.1 系统功能分析7</p><p> 3.1.2 系统流程分析8</p><p> 3.1.3 系统数据流分析9</p><p> 3.2 系统数据库设计9</p><p> 3.2.1 系统E-R图9</p><p> 3.2
15、.2 数据库表设计10</p><p> 3.3 面向对象的系统设计10</p><p> 3.3.1 系统文件组织结构10</p><p> 3.3.1 用例的设计11</p><p> 3.3.2 类的设计12</p><p> 3.3.3 系统交互模式的设计12</p><
16、;p> 第4章 模块的实现15</p><p> 4.1 MVC分层结构16</p><p> 4.2 总体控制模块17</p><p> 4.3 数据存储模块18</p><p> 4.4 数据传输模块20</p><p> 4.5 对局模块22</p><p>
17、 4.6 XML界面布局模块24</p><p> 4.7 系统中关键技术的应用及实现24</p><p> 4.7.1 SQLite3的应用24</p><p> 4.7.2 XML界面设计25</p><p> 4.7.3 cnChess的2D图像编程25</p><p> 4.7.4 对弈过
18、程中双方棋盘上棋子的同步27</p><p> 4.7.5 XMPP数据传输27</p><p> 4.7.6 走棋规则的判断28</p><p> 第5章 结束语30</p><p> 5.1 后续研究展望30</p><p><b> 参考文献31</b></p&g
19、t;<p><b> 致 谢32</b></p><p><b> 第1章 绪论</b></p><p><b> 1.1问题的提出</b></p><p> 随着3G移动网络应用的推广,手机游戏的规模、复杂程度日益增强;其技术手段、设计思想、系统体系结构都发生了深刻的变化。
20、手机操作系统正朝着高处理能力、多功能、智能化的方向发展。近年来,网络文化市场发展很快,随着互联网的迅速普及、宽带的接入社区和家庭,我国网络游戏市场发展迅速并进入了一个高速增长期,并已经创造了较大的产值,带动了相关产业的发展。</p><p> 如今网络上的提供免费中国象棋游戏,大多数是单机版的,界面单一,功能单一。本系统将实现在网络上对战的中国象棋功能;还对在下棋界面美化,以及下棋中可能出现的意外进行了处理。这
21、样中国象棋休闲游戏将不在是一个功能单一界面枯燥的游戏,而是一个较完善的休闲游戏。</p><p> 在国内外Android手机应用开发如火如荼、日益盛行的大背景下,本人决定开发一款界面友好、操作简单,支持双人联网对局、数据记录、智能规则判断的手机休闲游戏。</p><p><b> 1.2相关研究综述</b></p><p> 近年来,国
22、内外的专家学者以及一线的开发人员从理论、方法、技术等不同的角度对Android手机操作系统进行了一定的研究。本小节将从Android手机操作系统的发展历程、研究现状、程序开发设计简介四个方面分析总结国内外的相关研究结果。</p><p> 1.2.1 Android手机操作系统的发展历程</p><p> Android是Google于2007年11月5日宣布的基于Linux平台开源手
23、机操作系统名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。</p><p> 表1.1 Android手机操作系统的发展阶段</p><p> 1.2.2 国内外关于Android手机应用程序的研究及开发现状</p><p> Android是基于Linux内核的软件平台和操作系统,早期由Google
24、开发,后由开放手机联盟Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。低层以Linux内核工作为基础,只提供基本功能;其他的应用软件则由各公司自行开发,以Java作为编写程序的一部分。另外,为了推广此技术,Google和其它几十个手机公司建立了开放手机联盟。Android在未公开之前常被传闻为Google电话或GPhone。大多传闻认为Google
25、开发的是自己的手机电话产品,而不是一套软件平台。2010年1月,Google开始发表自家品牌手机电话的Nexus One,目前最好的是Android2.1。</p><p> 1.3研究目标与内容</p><p> 1.3.1 研究目标</p><p> 本项目主要研究的目标分为:程序设计思想实践改进目标、Android平台手机开发技术的研究目标以及对XMPP
26、网络传输协议的使用与研究目标。</p><p> (1)运用面向对象的编程思想及RUP统一过程,对cnChess中国象棋手机游戏的系统结构、过程、功能等要素进行可视化的描述,为Android程序设计的可视化提供方法、技术上的支持,为系统的理论模型和软件建模提供参照。</p><p> (2)本系统中使用了多种基于Android平台的软件开发技术,根据要实现的系统功能,系统需要使用到的技
27、术及技术研究的目标主要有:</p><p> 手机游戏用户界面的人性化、个性化界面布局,给用户以良好的游戏体验;</p><p> 移动设备上的图形编程,提供流畅靓丽的游戏过程界面;</p><p> 使用文件、SQLite等数据存储方式,提供游戏配置保存,游戏过程保存、游戏过程回放、游戏结果记录等功能,方便用户查看;</p><p>
28、 (3)使用XMPP即时通讯协议传输数据,提供即时聊天的以及在线探测的功能,实现游戏的实时性。</p><p> 1.3.2 研究主要内容</p><p> 项目研究的内容主要有以下四大块:</p><p> 第一部分是手机游戏的界面设计和背景音效的设计。和PC上的游戏开发有些许不同,手机游戏更加的注重用户体验,一个人性化的、时尚靓丽的游戏界面和优美个性化的
29、音效设计是一个成功的手机游戏要达到的基本要求。</p><p> 第二部分是手机之间的通信模块设计。3G时代,手机通信受流量的限制很大,所以必须尽可能的使用简洁的通信协议,减少数据的流量,减少用户的通讯资费;再者,双人对局这样的在线游戏,必须体现其即时性,在一方因为电话打入或其他原因导致游戏挂起或掉线时,另一方能及时得知道对方的状态,以便做出处理。另外,为了增加游戏的互动性,项目提供了即时聊天的功能。</
30、p><p> 第三部分是对局智能程序的设计。在没有朋友在线的情况下,可以和设计好的AI(Artificial Intelligence)算法进行游戏。人工智能程序设计是一项对算法要求很高的程序设计,特别是在手机这种硬件资源紧缺的环境中,更是需要一个高效的算法来提供强大的AI对局支持。</p><p> 第四部分是逻辑控制模块的设计。当有紧急事件(如电话打入,电池没电等)发生时,需全局模块对
31、当前的游戏状态进行保存或退出等处理,并发送相关信息给对局的伙伴;用户通过触摸屏进行走棋,棋子的走动规则由软件进行智能规则判断;对局结束,软件将对对局的过程及结果使用与国际接轨的棋谱记录格式(PGN,FEN)进行记录,在对局结束后,用户可用软件读入PGN格式的对局过程文件,进行战局的回放。</p><p> 软件采用面向对象的编程思想进行构思设计,使用UML设计软件的模型,采用了部分GoF的设计模式进行编码与开发
32、。</p><p> 第2章 Android程序设计相关技术概述</p><p> Android作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。根据Android的软件框图,其软件层次结构自下而上分为以下几个层次:</p><p> 图2.1 Android系统架构<
33、;/p><p> 2.1 XUL界面布局</p><p> XUL 是一种基于 XML 的语言,因此需要对 XML(特别是 XML 名称空间)很熟悉。XUL是英文“XML User Interface Language”的首字母缩写。顾名思义,它是一种应用XML来描述使用者界面的标示语言。 </p><p> 2.2 Android的Activity组件</
34、p><p> Activity,一般代表手机屏幕的一屏,相当于浏览器的一个页面。在Activity中添加view,实现应用界面和用户交互。一个应用程序一般由多个Activity构成,这些Activity之间可互相跳转,可进行页面间的数据传递。每个Activity都有自己的生命周期。</p><p> 2.3 SQLite数据库</p><p> 在Android平
35、台上,集成了一个嵌入式关系型数据库—SQLite。SQLite是支持结构化查询的轻量级数据库,能很好得适应于移动设备的应用。</p><p> Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。</p>&
36、lt;p> 2.4 XMPP协议</p><p><b> 什么是XMPP </b></p><p> XMPP(可扩展消息处理现场协议)的前身是Jabber,一个开源形式组织产生的网络即时通信协议。具有即时信息传输以及在线现场探测的功能。</p><p> XMPP的基本网络结构</p><p> XM
37、PP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。 </p><p> XMPP通过TCP传输的数据</p><p> XMPP
38、传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。XMPP的核心部分就是一个在网络上分片断发送XML的流协议,这个流协议是XMPP的即时通讯指令的传递基础。 </p><p> 2.5 Android 2D图形编程 </p><p> 1、Simple Graphics in View:就是直接使用Android已经实现的一些画图操作,比如说images,sh
39、apes,colors,pre-defined animation等等。这种方式只能画静态或者极为简单的2D图画,对于实时性很强的动画,高品质的游戏都是没法实现的。2、Canvas:首先我们要明白这个Canvas是一个2D的概念,是在Skia中定义的。也就是说在这个方式下还是说的画2D图形。</p><p> 2.6 MVC模式简介</p><p> 整个系统采用了MVC模式进行设计。
40、MVC模式是一种流行的软件设计模式,它把系统分为3个模块:模型(Model)、视图(View)和控制器(Controller)。</p><p> 各个模块的功能说明参见表2.1</p><p> 表2.1 MVC的三个模块</p><p> 各个模块之间的相互作用如图2.2所示。采用MVC模式有很多好处:一是能将显示、逻辑和数据分开,某一方面的改变不会影响另
41、一方面;其次是可以在不更改视图显示的情况下,更改控制器,以达到更改视图与用户交互的响应模式的目的。</p><p> 图2.2 MVC模型图</p><p> 第3章 系统的分析与实现</p><p> 游戏对用户界面的要求较高,需达到人性化:美观大方、便于操作,个性化:游戏界面时尚靓丽、别具一格,最好能做到自定义皮肤之类的。本游戏是使用即时通讯协议进行通信的
42、,所以,实时的游戏效果、即时聊天以及在线探测是必须做到用户体验良好的。数据存储方面,需存储游戏的配置信息、对局的胜负信息、对局的过程信息。</p><p><b> 3.1系统分析</b></p><p> 本系统的定位是:cnChess中国象棋手机游戏是运行在Android开源手机操作系统平台上的支持双人联网对战的一款手机游戏。</p><p
43、> 由于对国际国内3G移动应用的前景看好,另外也对游戏开发有很大的兴趣,决定开发一款基于Android手机操作系统的中国象棋手机游戏。</p><p> 结合当前移动开发的形式,初步构想之后,定下“基于Android手机操作系统的中国象棋游戏应用”应该是这样一款休闲游戏:以3G方式连入互联网;支持双人之间的游戏互动;支持即使聊天以及在线探测;支持游戏过程记录及回放;支持人机对战;游戏界面布局人性化、个性
44、化;支持紧急事件处理(如电话打入、电池没电等)。可能的话,进行Wi-Fi编程,实现“局域网”对局。</p><p> 3.1.1 系统功能分析</p><p> 本系统的基本功能主要有三大块:</p><p> 即时聊天:方便玩家的交流学习;</p><p> 象棋对弈:游戏的联网互动以及即时性,是本程序与一般的象棋游戏的不同;<
45、;/p><p> 战绩统计:用于统计玩家的对弈胜负情况。</p><p> 详细的系统功能分析图如图3-1所示。</p><p> 图3-1 cnChess系统功能结构图</p><p> 本系统的执行流程较简单,进入系统后有五个选项:联网对局;XMPP设置;查看胜负情况;查看开发者信息及用户帮助信息;退出游戏。在联网对局前,XMPP连接
46、设置必须是已经配置好的,否则无法连接jabber服务器,不能进入对局界面。</p><p> 系统主要的输入输出及模块间的调用情况用IPO图表示如图3-2:</p><p> 图3-2 cnChess IPO图(输入一处理一输出图)</p><p> 3.1.2 系统流程分析</p><p> 系统流程分析是软件工程图表(例如流程图、
47、判定表等)辅以必要的说明来表示本程序的逻辑流程。本系统采用XMPP协议进行网络的连接、数据的交换。站在用户的角度来看,用户之间的信息交流是端对端的;但是站在程序设计开发者的角度来看,数据其实是要经过jabber服务器的。</p><p> 从设计开发者的角度描述系统的数据交互模式,如图3-3。</p><p> 图3-3 系统交互模式图</p><p> 3.
48、1.3 系统数据流分析</p><p> cnChess手机游戏系统需要储存的主要数据有XMPP网络连接的配置信息以及走棋的胜负信息。系统的数据流图如图3-4所示。</p><p> 图3-4 系统数据流图</p><p> 3.2 系统数据库设计</p><p> 3.2.1 系统E-R图</p><p>
49、 系统使用SQLite轻量级数据库进行数据的储存和管理。用户可根据自己的需要进行XMPP网络连接的配置以及胜负情况的查看和清空。系统的E-R图如图3-5所示。</p><p> 图3-5 系统E-R图</p><p> 3.2.2 数据库表设计</p><p> 本程序采用轻量级数据库SQLite存储管理数据,数据库名称为Datas.db 。</p>
50、;<p> Datas.db数据库含有两张表,两张表的名称以及字段属性等定义如下:scoreTable(id,winning,falling,peace),对局得分表主要用来储存对局的胜负信息;settingsTable(id,host,port,service,partnered,userID,userPWD),网络连接配置表主要用来储存XMPP网络连接配置。</p><p> 3.3 面向对
51、象的系统设计</p><p> 本系统使用面向对象的开发思想、UML建模方法、MVC三层架构、GoF的部分设计模式编码设计开发,便于后续的软件扩展。下面将从系统文件组织结构,系统用例图,系统类图以及系统三个角度对系统进行设计方面的说明。</p><p> 3.3.1 系统文件组织结构</p><p> 一个Android程序由Android Library、s
52、rc、Referenced Libraries、res、AndroidManifest.xml组成。其中Android Library为Android系统类库,src内为程序员的代码包,Reserenced Libraries为第三方开发包,res为程序所要用到的资源(如图片,音视频文档,界面布局xml文档等)存放的文件夹,AndroidManifest.xml为程序的主配置声明及版本说明文件。本系统的简要文件组织结构如图3-6所示。&
53、lt;/p><p> 图3-6 项目文件组织结构</p><p> 3.3.1 用例的设计</p><p> 系统的用例主要有三大类:游戏逻辑及流程控制类,走棋及聊天类,网络连接类。以下为系统的详细用例图,各用例作用范围及相互间的关系如图3-7所示。</p><p> 图3-7 系统用例图</p><p> 3.
54、3.2 类的设计</p><p> 根据系统用例图,站在类的功能角度进行分析设计,cnChess程序的类主要分以下五种:界面显示类、逻辑及流程控制类、数据管理类、网络连接类、对弈控制类。各种类的Java类主要功能说明如下:</p><p> 界面显示类:主要用来实现游戏的UI界面布局以及屏幕的刷新等功能,如SettingsDialog、ViewScore、ChatDialog等类;&l
55、t;/p><p> 数据管理类:为保持数据的安全性、完整性及一致性,所有的类必须通过数据管理类进行数据的存取,如SettingsManager、DataManager等类;</p><p> 逻辑及流程控制类:主要负责协调各模块之间的调用及流程的跳转,传递模块之间的信息等功能,如cnChess、startGame等类;</p><p> 网络连接类:用于连接网络,
56、对需要发送的数据进行加密解密,发送数据,状态监听,数据接收等功能,如ConnectDial、ogXMPPClient等类;</p><p> 对弈控制类:主要为对弈过程中各面向对象的抽象模型,也进行必要的数据处理,如BoardView、Umpire等类。</p><p> 3.3.3 系统交互模式的设计</p><p> 序列图主要用于按照交互发生的一系列顺序
57、,显示对象之间的这些交互。</p><p> 序列图的主要用途之一,是把用例表达的需求,转化为进一步、更加正式层次的精细表达[10]。用例常常被细化为一个或者更多的序列图。序列图除了在设计新系统方面的用途外,它们还能用来记录一个存在系统(称它为“遗产”)的对象现在如何交互。当把这个系统移交给另一个人或组织时,这个文档很有用。</p><p> 用例viewScore的顺序图简要的说明了
58、用户是如何与SQLite数据库进行交互,看到自己的战绩这一事件的:</p><p> 用户按下查看战绩的按钮(view score),系统得知这一指令,发出数据请求给SQLite管理类,数据库管理类查询到数据后,将数据返回给系统查看类,系统查看类将战绩数据显示在手机屏幕上;</p><p> 用户发出清除战绩请求,逻辑控制类将这一请求信息发送给SQLite管理类,管理类清除数据后,将结
59、构返回给逻辑控制类,逻辑控制类发送屏幕更新指令,用户看到屏幕显示数据已更新。</p><p> 图3-8 viewScore用例的顺序图</p><p> 网络连接设置用例Setting的顺序图:</p><p> 用户发出查看连接配置请求,SettingsDialog显示类请求数据库管理类去数据库读取数据,数据库管理类读取到数据后,将数据返回给显示类,显示
60、类显示用户请求的配置信息;</p><p> 用户输入新的XMPP网络连接配置信息,SettingsDialog显示类请求添加或者更新网络配置信息,SQLite管理类获知更新请求后更新数据库。</p><p> 图3-9 Setting用例的顺序图</p><p> 游戏对局用例startGame涉及到相关的类较多,如图3-10所示:</p>&
61、lt;p> 用户按下开始游戏键,系统提示是否要联网游戏,用户确认“是”后,系统读取XMPP配置信息建立手机到服务器端的网络连接;若用户确认“否”,则系统退回到游戏主界面(此时系统未连上互联网);</p><p> 用户选择聊天菜单,startGame进行相应的逻辑处理,启动聊天对话框;用户输入聊天信息,按下发送按钮,消息发送到对方的服务器帐号,与此同时,在用户自己的聊天记录单里面显示;</p>
62、;<p> 用户进行走动棋子或者悔棋等请求信息,startGame接收到按键事件或者触摸屏事件后,将相应的信息转交XMPPClient进行信息的发送;XMPPClient还负责客户端监听,当有对方有走棋等信息发送过来时,XMPPClient将分辨是否为cnChess程序格式的信息并进行解码解包之后将信息转交给startGame,startGame对转交过来的信息进行处理。</p><p> 图3
63、-10 startGame用例的顺序图</p><p><b> 第4章 模块的实现</b></p><p> 需求分析阶段回答了目标软件系统“要做什么”的问题,而软件设计阶段则需要回答目标软件系统“要怎么做”以实现用户需求的问题[12]。</p><p> 在cnChess手机游戏系统的软件设计建模阶段,主要是以需求分析阶段的成果(需求
64、分析模型)作为输入,进行系统的体系结构设计、类的详细设计和用例实现设计。总体来说,cnChess系统的软件设计建模阶段是对分析建模结果的进一步精化和调整。</p><p> 图4-1 cnChess的项目开发流程</p><p> 项目要实现的模块主要有四部分。</p><p> 第一部分是手机游戏的界面设计和背景音效的设计。和PC上的游戏开发有些许不同,手机
65、游戏更加的注重用户体验,一个人性化的、时尚靓丽的游戏界面和优美个性化的音效设计是一个成功的手机游戏要达到的基本要求。</p><p> 第二部分是手机之间的通信模块设计。3G时代,手机通信受流量的限制很大,所以必须尽可能的使用简洁的通信协议,减少数据的流量,减少用户的通讯资费;再者,双人对局这样的在线游戏,必须体现其即时性,在一方因为电话打入或其他原因导致游戏挂起或掉线时,另一方能及时得知道对方的状态,以便做出
66、处理。另外,为了增加游戏的互动性,项目提供了即时聊天的功能。</p><p> 第三部分是对局智能程序的设计。在没有朋友在线的情况下,可以和设计好的AI(Artificial Intelligence)算法进行游戏。人工智能程序设计是一项对算法要求很高的程序设计,特别是在手机这种硬件资源紧缺的环境中,更是需要一个高效的算法来提供强大的AI对局支持。</p><p> 第四部分是逻辑控制
67、模块的设计。当有紧急事件(如电话打入,电池没电等)发生时,需全局模块对当前的游戏状态进行保存或退出等处理,并发送相关信息给对局的伙伴;用户通过触摸屏进行走棋,棋子的走动规则由软件进行智能规则判断;对局结束,软件将对对局的过程及结果使用与国际接轨的棋谱记录格式(PGN,FEN)进行记录,在对局结束后,用户可用软件读入PGN格式的对局过程文件,进行战局的回放。</p><p> 软件采用面向对象的编程思想进行构思设
68、计,使用UML设计软件的模型,采用了部分GoF的设计模式进行编码与开发。</p><p> 4.1 MVC分层结构</p><p> 在cnChess系统的设计建模阶段,是回答如何实现系统功能的问题,主要完成软件体系结构设计和详细设计两个方面的工作。</p><p> 软件体系结构设计是高级设计,主要包括以下步骤:</p><p>
69、(1)体系结构的层次划分。</p><p> (2)体系结构的子系统划分。</p><p> (3)建立三层体系结构与类之间的映射关系。</p><p> 详细设计中首先要详细描述每一个类,包括类的属性、操作、类之间的关系,同时对系统用例进行设计。详细设计包括如下内容:</p><p> (1)设计实体类的属性和操作。</p&g
70、t;<p> (2)设计边界类的功能组成和操作。</p><p> (3)设计类之间的关系。</p><p> (4)构造设计类图模型。</p><p> (5)借助交互图实现用例设计。</p><p> (6)数据模型的设计。</p><p> (7)实现模型的设计。</p>
71、<p> (8)设计建模的评审。</p><p> 本系统使用MVC设计模式[13]进行体系的基础架构,如图4-2所示:</p><p> 图4-2 cnChess的MVC三层架构</p><p> Android应用程序的一般架构为:Views + Content Providers + Resource Manager + Notificati
72、on Manager + Activity Manager ,你可以选择其中的若干项作为你应用的架构元素。</p><p> 系统的项目文件组织结构如图4-3所示,其中:</p><p> 源代码包中的View类和Dialog类以及res资源文件夹中的所有XML文件,充当视图的角色,负责手机界面的显示和与用户的交互;cnChess,startGame两个类充当“C”的角色,重要控制程序
73、界面的切换和信息的分发;BoardView,Umpire,XMPPClient分别是棋盘类、裁判类、信息收发类,充当模型的角色,分别负责棋盘模型的显示与更新、裁判对象模型的建立、即时信息通信模型的建立; DataManager,SettingsManager两个类负责与SQLite数据库的沟通,分别负责战绩胜负次数、XMPP联接设置的数据存取。</p><p> 图4-3 cnChess的文件组织结构</
74、p><p> 4.2 总体控制模块</p><p> 软件体系结构是软件在设计构成上基本的、可供设计选择的形态和总体结构,本质上,它是对软件需求的一种抽象解决方案。在引入了体系结构的软件开发之后,cnChess中国象棋手机游戏系统的构造过程变为“问题定义—软件需求—软件体系结构设计—软件详细设计—软件实现”。本系统的总体控制模块主要有cnChess以及startGame。</p>
75、;<p> cnChess:用于控制各子模块(Activity)的启动、休眠以及消亡;例如,当用户按下“开始游戏”按钮时,startGame内置的监听器startGame.setOnClickListener将获取onClick事件并调用showStartGame()函数,启动对弈相关的模块。</p><p> startGame属于对局子模块,用于协调对局过程中对各中系统信息进行逻辑判断、消
76、息分发,控制、调用、协调各二级子模块的运行。</p><p> 依据上一阶段中UML设计出来的模型及相关的文档,对系统的各类进行细化后,得出系统各模块的类以及各类之间的相互关联关系。</p><p> 下面将详细介绍各类模块作用以及类之间的相互关联性。</p><p> 关于总体流程控制类cnChess,如图4-4所示,各类相关作用简介如下:</p>
77、;<p> 负责启动游戏,控制协调各模块的运行;startGame:负责启动对局模块以及对局时候各对局子模块的相互协调;SettingsDialog:负责游戏网络配置的UI显示以及数据获取、数据储存等;ViewScore:负责游戏胜负战绩的UI显示以及管理功能;companyInfo:负责游戏开发商信息的显示以及用户帮助文档的UI显示;ExitGameDialog:负责结束游戏相关进程、线程,保存相关游戏数据,安全退出游
78、戏。</p><p> 图4-4 总体控制类及相关类的联系图图 4-5 对弈流程控制模块与网络通信模块联系图</p><p> 关于对弈流程控制类startGame与通信模块的组织联系图,如图4-5所示。对弈流程控制主要作用为协调各对弈子模块的通信与调用。与对弈流程控制有关的模块有网络连接部分中建立连接以及数据发送接收的类,负责数据存取的Manager类,用于聊天的chatDi
79、alog窗体类,走棋、棋盘同步更新模块的类、请求回复窗体类等。</p><p> 4.3 数据存储模块</p><p> 数据存储模块有四个类,分为储存控制类和界面信息显示两种,说明如下:类SettingsDialog、viewScore用来做用户UI界面输入设置等信息的获取和查看、清除对局胜负情况;类DataManager与SettingsManager是数据管理类。</p&g
80、t;<p> 下面就DataManager()函数简要介绍一个数据管理类是怎样实现的:</p><p> 变量设置:管理类中有属性为private的变量,存取都必须通过函数内置的get、set函数进行;</p><p> 判断表是否存在:管理数据,必须先是有你需要管理的表,isScoreTable()函数通过系统API中的query()函数对系统表sysobject进行
81、查询,若系统表中没有所要查找的对象,则需建立scoreTable表;</p><p> 表的创建与删除、记录的添删修:数据的存取都是通过系统API接口中的execSQL()函数来完成的,例如:当需要删除scoreTable这张表,语句为db.execSQL(sql),db为所要操作的数据库的句柄,sql为所要执行的语句。</p><p> Manager的这两个类有些类似JavaBea
82、n,是为了保证数据的安全、完整、一致,其他类必须通过数据库Manager类才能与SQLite数据库进行沟通,完成对数据的操作。</p><p> 实践编程难点在类Umpire、Manager,由分析设计的结果生成各模块的详细编码单元以及各类的模型。Umpire是裁判员类,主要用于判断棋子走动是否规则、对弈的胜负结果。系统源码包中,带Manager后缀的都是属于数据管理相关类。Manager类主要调用系统API如
83、android.database. * 或者android.database.sqlite. * 进行数据的存取。如图4-6所示,各类作用相关作用如下:</p><p> 图4-6 查看战绩、连接设置以及走棋模块的类图</p><p> 本程序采用轻量级数据库SQLite[3]存储管理数据,数据库名称为Datas.db 。</p><p> Datas.db数
84、据库含有两张表,scoreTable表用来储存对局的胜负信息,settingsTable用来储存XMPP网络连接配置。</p><p> 表4-1 scoreTable存储对局的胜负信息:</p><p> 表4-2 settingsTable存储XMPP的连接设置:</p><p> 4.4 数据传输模块</p><p> 数据传输
85、模块有两个类,很多算法及技术难点都需要用到第三方开发包smack.jar中的XMPP组件及其API完成[9],模块说明如下:</p><p> ConnectDialog用来连接或者断开XMPP网络连接,当连接上服务器后,启动对局模块,进行游戏;</p><p> XMPPClite接受startGame模块转交过来的数据,在信息分类、格式化、加密后,发送给网络中的jabber服务器;
86、同时,监听服务器发送过来的cnChess格式化数据,解密、解包分类后转交给startGame模块;另外,也监听对手的在线状态等信息,以便在发生突发情况时进行相应的处理,从而真正的达到即时游戏的效果。</p><p> 系统在进行联网对局前,必须对网络连接进行有效的配置。游戏的网络连接配置UI界面以及各配置项的说明如图4-7及表4-3所示,配置信息的数据存储流程图如图4-7所示。</p><p
87、> 图4-7 SettingsDialog对话框输入项</p><p> 游戏连接配置对话框各输入项的详细定义如表4-3所列。</p><p> 表4-3 XMPP设置界面各项目详细定义</p><p> 系统使用SQLite数据库,若无游戏配置信息或者配置信息无效,系统将提示进行正确的网络连接配置,并对正确的配置进行存储。配置信息的存储数据流程图如图
88、4-8所示。</p><p> 图4-8 XMPP网络连接设置数据流程图</p><p> 为保证用户手机之间数据传输中各类数据的区分,系统在数据发送前需对各类数据信息进行一定的格式化,待数据信息到达对方的手机后,系统再进行相应的解包。另外,为保证数据在网络间传输的安全性,在手机发送信息至互联网这一段使用了smack.jar类库中的加密函数。</p><p>
89、 图4-9 Chat聊天模块数据流程图</p><p><b> 4.5 对局模块</b></p><p> 对局模块是本系统设计编码中较复杂,内容比较多的一个模块。主要有以下子模块:</p><p> startGame:用来启动对局、网络连接以及对各局子模块进行协调;</p><p> Umpire:裁判类,
90、定义走棋规则,用来控制走棋的顺序以及对弈双方的同步,判定对局的胜负;</p><p> AnswerDialog:回话类,回答对方的对局请求等信息;</p><p> ChatDialog:对话聊天类,走棋的过程中,用来启动对话框以和对方进行即时聊天;</p><p> RestorePoint:用来记录游戏过程中的一定走棋记录,创建还原点,以方便悔棋时,棋盘
91、上棋子的回滚;</p><p> companyInfo:用来显示开发商信息以及用户帮助信息的UI类;</p><p> ErrorDialog:用来显示游戏过程中出现的错误信息;</p><p> ExitGameDialog:用来结束游戏进程,包括游戏相关的各线程 ;</p><p> smack.jar:第三方开发包,提供XMP
92、P服务接口,数据加密等功能。</p><p> 对局模块主要处理的是用户之间对弈的过程同步、规则控制等信息。</p><p> 用户走棋,产生走棋信息,系统捕获到按键事件或者触摸屏事件后,会进行数据的分类以及格式化,然后加密发送到对手的手机中。</p><p> 在接收到对手发来的走棋信息时,系统则先通过smack.jar类库进行解密,然后解包,进行走棋信息的
93、逻辑处理,最后通过界面显示类呈现于用户的手机屏幕。</p><p> 图4-10 走棋模块数据流程图</p><p> 对弈过程中,可打开聊天框与对手进行即时聊天。聊天框如图4-11所示。对局的棋盘界面以及菜单的设置显示如图4-12所示。</p><p> 图4-11 chatDialog对话框输入项 图4-12 startGame对弈界面</
94、p><p> 4.6 XML界面布局模块</p><p> cnChess系统使用XML进行游戏界面的基础布局[1],主要有以下布局界面,各界面的布局内容以及与各Java类的映射关系为:</p><p> answerdialogbox.xml:回复对话框的界面布局;</p><p> chatdialogbox.xml:聊天对话框的界面
95、布局;</p><p> companyinfo.xml:显示开发商信息以及用户帮助文件;</p><p> errordialog.xml:错误信息提示框布局;</p><p> exitgame.xml:退出游戏提示框;</p><p> main.xml:游戏主界面布局;</p><p> settin
96、gs.xml:游戏XMPP连接配置界面布局;</p><p> startgame.xml:游戏对局界面布局;</p><p> sure_connect.xml:确认进行网络连接对话框布局;</p><p> toconfirm.xml:确认回复对方请求的对话框布局;</p><p> viewscore.xml:查看战绩界面布局。
97、</p><p> 图4-13为res文件夹下layout(界面布局资源)的文件组织结构。</p><p> 图4-13 XML界面布局文件</p><p> 4.7 系统中关键技术的应用及实现</p><p> 4.7.1 SQLite3的应用</p><p> SQLite是集成在Android平台上的嵌
98、入式关系型数据库。它是一个支持结构化存储、查询轻量级开源数据库。SQLite3支持的数据类型有NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五种数据类型。</p><p> 在Android系
99、统,为我们提供了一个名为SQLiteOpenHelper的类,该类用于对数据库版本进行管理,该类是一个抽象类,必须继承它才能使用。</p><p> 为了实现对数据库版本进行管理,SQLiteOpenHelper类有两种重要的方法,分别是onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。
100、</p><p> 在项目的实现过程中:DataManager.java和SettingsManager.java两个类都是通过调用Android的SQLiteOpenHelper类对SQLite数据库进行数据库以及其中的数据进行创建、修改和删除。</p><p> 4.7.2 XML界面设计</p><p> 在本系统的软件设计开发过程中,xml的布局是最先
101、开始的。</p><p> Android的界面[1],需要写在res/layout的xml里面,一般情况下一个xml对应一个界面。做android的界面有点像写html(连注释代码的方式都一样),要先给android定框架,然后再在框架里面放控件,android提供了几种框架,AbsoluteLayout,LinearLayout,RelativeLayout,TableLayout,FrameLayout,
102、FrameLayout:里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角</p><p> LinearLayout:里面可以放多个控件,但是一行只能放一个控件</p><p> TableLayout:这个要和TableRow配合使用,很像html里面的table</p><p> AbsoluteLayout:里面可以放多个控件,并且可以
103、自己定义控件的x,y的位置</p><p> RelativeLayout:里面可以放多个控件,不过控件的位置都是相对位置(界面的布局好像还可以直接引用一些view,如ScrollView等)框架的xml</p><p><b> 如下:</b></p><p> android:id="@+id/widget36"&
104、lt;/p><p> android:layout_width="fill_parent"</p><p> android:layout_height="fill_parent"</p><p> 上面代码中以android:开头,表示控件的属性,fill_parent是系统自带参数,表示最大的宽或高,还有一个wrap_c
105、ontent,表示刚好合适的宽或高。除了上面的三个属性外,还有一些其他的属性,如android:background=“#FF0000FF”,设置框架的背景色,androidrientation=“vertical”用来设置这个框架里面的走向属性。</p><p> 框架弄好,就可以在里面添加控件了,控件的基本写法也和框架一样,后面用到的时候将具体研究各个控件的细节。</p><p>
106、 4.7.3 cnChess的2D图像编程</p><p> 本系统的2D图像编程主要用于对局模块中棋盘、棋子、选择框、提示信息等图像元素的更新。</p><p> SGL编程是本系统设计中的难点,在系统的开发过程中主要使用了Android系统类库中的2D图形库接口[2],达到了预期的效果,实现了项目的目标。</p><p> 通过使用Android提供的2D
107、画图API,程序员能一笔一划或者使用Graphic来画所需要的东西了,要画什么要显示什么都完全可控。这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种
108、主要用在游戏,高品质动画方面的画图。</p><p> 本系统使用的是前一种图像处理方式,系统棋盘棋子以及对局信息的绘制、棋盘的显示更新等图像处理部分主要使用了系统API中的android.graphics.* 类库进行处理。</p><p> 在本项目中,BoardView类主要是做棋盘模型的构建、更行以及图像方面的处理工作。下面简要介绍下在本项目的开发中,是如何构建棋盘模型以及如何
109、实现棋盘图形的重绘。</p><p> 模型构建:棋盘的模型实际上是一个int[10][9]的二维数组,二维数组中每一个数值代表棋盘上相应十行九列交叉点上的棋子代码。象棋一共32个棋子,每个棋子的代码从1至32不等,棋盘网格线上没有棋子的交叉点代码为0。对弈模块初次启动或者对弈完一局后,将进行棋盘的数学模型以及手机屏幕上棋盘、棋子的初始化,初始化后的棋盘数学模型如图4-14所示。</p><
110、p> 图4-14 棋盘数学模型</p><p> 当棋子走动时,棋盘的数学模型里的各项数据随之更新,模型里面的数据每一次的更新,都将使函数调用系统2D函数库中的invalidate()方法,此方法通知系统屏幕已过期无效,需重新取数据绘制屏幕。系统取更新后的棋盘模型中的数据,并调用相关方法把棋盘重新绘制出来。</p><p> 棋盘、棋子的重绘:本游戏使用到的Android平台的
111、系统2D函数库中的drawLine()、drawCircle()、drawText()三种线条绘制、填充方法。</p><p> 一个棋盘数学模型的图像绘制过程是这样的:设置桌布底色、在桌布上绘制黑色十行九列的横线和纵线以及棋盘边框、在四个炮的初始点绘制十字架以及“楚河汉界”字样、根据棋盘数学模型在棋盘上相应位置绘制棋子圆圈并填充黑色或者红色、根据棋盘数学模型中棋子的代码绘制出棋子上相应的中文文字、根据触摸屏返
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 众赏文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 毕业论文--基于android操作系统的飞机大战手机游戏
- 基于android操作系统的足球小将手机游戏毕业论文
- 基于android操作系统的飞机大战手机游戏毕业论文(设计)
- 毕业论文-- 基于java的手机游戏《中国象棋》的设计与实现
- 毕业论文---基于java的中国象棋游戏设计
- 基于qt的中国象棋-毕业论文
- 基于android的中国象棋毕业设计
- java中国象棋对弈系统毕业论文
- java中国象棋对弈系统毕业论文
- java中国象棋对弈系统毕业论文
- 基于android操作系统的足球小将手机游戏
- android操作系统毕业论文
- 中国象棋游戏博弈算法的研究与实现-毕业论文
- 毕业论文 ios系统手机app象棋游戏
- 基于android平台中国象棋对战游戏本科设计
- 基于android技术的中国象棋人机对弈游戏的设计与实现毕业设计论文
- 基于android平台中国象棋对战游戏本科设计
- 中国象棋游戏设计
- 基于android平台的中国象棋人人对弈的游戏软件毕业设计
- 毕业设计(论文)中国象棋对弈系统
评论
0/150
提交评论