西安邮电大学
毕业设计(论文)
题目:基于android技术的中国象棋人机对
弈游戏的设计与实现
目录
摘要......................................................I
1绪论.......................................................1
1.1研究背景.......................................................1
1.1.1中国象棋背景..............................................1
1.1.2Android系统简介..........................................1
1.2本论文研究意义.................................................3
2设计相关技术理论...........................................5
2.1游戏系统开发平台及搭建.........................................5
2.2可行性研究.....................................................6
3游戏系统功能分析与设计.....................................7
3.1界面的需求分析.................................................7
3.2游戏走棋需求设计分析............................................7
3.3类框架的设计....................................................8
4游戏系统的设计与实现.......................................9
4.1游戏界面的设计..................................................9
4.1.1共有类ChessActivity的实现...............................9
4.1.2辅助界面相关类的实现.....................................9
4.1.3游戏界面相关类的实现.....................................9
4.2中国象棋的规则及走法的实现....................................10
4.2.1行棋规则.................................................10
4.2.2棋盘的表示...............................................22
4.3游戏人机会话的实现............................................23
4.3.1着法的生成..............................................23
4.3.2搜索算法................................................24
4.3.3局面评估................................................26
5游戏系统模块的设计实现....................................28
5.1欢迎界面......................................................28
5.2菜单界面.......................................................28
5.3帮助界面......................................................30
5.4游戏界面.......................................................30
6运行测试..................................................34
7结束语....................................................35
致谢......................................................36
参考文献....................................................37
附录:......................................................38
译文........................................................48
基于Android技术的中国象棋人机对弈游戏的设计与实现
I
摘要
中国象棋是一款智力休闲游戏,具有历史悠久而且拥有巨大的游戏爱好者群体,
他们以中国象棋陶冶情操、锻炼智力、体验象棋带来的快乐,中国象棋还是一个老少
皆宜的娱乐游戏。随着手持设备、智能手机的普及,搭载Android操作系统的智能手
机也已经走进了千家万户,当人们闲暇偶尔需要娱乐时,却发现没有实物象棋,该软
件不失为一个很好的替代品,供大家进行娱乐享受,尤其是在现在这个快节奏的社会
中,人们更满足于手机的使用,可以方便地随意移动,不像实物象棋那样静静的坐
着。
本论文通过实际应用软件的开发深入分析和研究Android开发技术。实现中国
象棋的人机会话。本文实现了中国象棋在计算机中表示问题,基于Android平台应用,
人机对战模拟现实中的人人对战;讨论走棋规则和着法的实现等一系列问题,最终电
脑能够通过产生着法,搜索,估计来产生一步最优的走棋,实现人机会话的目的。
关键字:中国象棋,Android,智能手机,人机对战
基于Android技术的中国象棋人机对弈游戏的设计与实现
II
ABSTRACT
ChineChessisanintellectualcasualgames,hasalonghistoryandhasahugegame
enthusiastsgroups,ChineChesdifyntiment,exerciintelligence,experiencethe
e
popularityofhandhelddevicesandsmartphone,smartphoneequippedwithAndroid
operatingsystemhanteredeveryhouhold,whenpeopleleisureoccasionallyneed
entertainment,butfoundnophysicalchess,thesoftwarewouldbeagoodsubstitutefor
entertainment,especiallyinthisfast-pacedsociety,peoplearemoresatisfiedwiththeu
ofmobilephones,youcaneasilymovefreely,unlikephysicalchessassittingquietly.
Withthedevelopmentforthepracticalapplicationofsoftware,Androiddevelopment
technologywasdeeplyanalyzedandrearchedtoachievehuman-machinechessbattleof
ticlerealizationoftheChinechessinthecomputer
reprentationthattheproblem,badontheapplicationofAndroidplatform,ariesof
questionswerediscusdabouttheman-machinewarsimulateandrelatedplayingchess
y,thecomputerproductsabestwayforcomputer
movestoachievethepurpoofman-machinewarwiththechessmovingandarching
andestimating.
Keywords:ChineChess,Android,smartphone,man-machinewar
基于Android技术的中国象棋人机对弈游戏的设计与实现
1
1绪论
1.1研究背景
1.1.1中国象棋背景
中国象棋发展至今已有两千三、四百年的历史,早在战国时期就有正式的记载,
堪称中国的国粹。中国象棋具有悠久的历史,深的人们的喜爱,象棋的爱好者也更是
数不胜数,远在战国中国象棋便在贵族阶层广为流传,早期的象棋是象征着当时战斗
场面的游戏,后来这种观念慢慢被改变,经过千年的流传不断的完善和改进,成为人
们休闲娱乐、锻炼脑力思维不可获取的好方式。
中国象棋体现的是一种策略,方寸之间包含天地玄机,人生哲理,使人越是细玩
越觉其味悠然深远。由于简单的行棋规则,趣味性强,便捷的载体,使得象棋成为雅
俗共赏的竞技项目。因此,也成为流行极为广泛的棋艺活动。是我国正式开展的78
个体育项目之一,为促进该项目在世界范围内的普及和推广,在中国古代,象棋被列
为士大夫们的修身之艺,现在则被视为怡神益智的一种有益的活动。有着数以亿计的
爱好者。它不仅能丰富文化生活,陶冶情操,在棋战中,人们可以从攻与防、虚与实、
整体与局部等复杂关系的变化中悟出某种哲理;更有助于开发智力,启迪思维,锻炼
辨证分析能力和培养顽强的意志。
象棋是中华民族的传统文化,不仅在国内深受群众喜爱,而且流传国外。
1.1.2Android系统简介
Android系统构架简介:
Android是一个基于LinuxV2.6内核的交互性操作环境,同时它也是一个分层
系统,Android系统架构显示如下图1.1。
基于Android技术的中国象棋人机对弈游戏的设计与实现
2
图1.1Android系统构架图
应用层由所有的Android应用程序组成。其中包括电子邮件客户端,SMS程序,
地图,浏览器,联系人及其他。所有的应用程序都是用Java编程语言编写的。
应用框架层定义了Android应用程序框架。所有的Android应用程序都是基于应
用框架的。Android应用框架包括:
丰富及可扩展性的视图,可以用来建立一个美观的用户界面,包括列表,
网格,文本框,按钮,甚至是嵌入到Web浏览器的应用程序。
一组内容提供商,使应用程序能够访问其他应用程序的数据(如电话簿),
或共享自己的数据。
资源管理器提供了访问的非编码资源的途径,如本地化的字符串,图形,
布局文件。
通知管理器允许所有应用程序显示定制的提示或通知在状态栏里。
活动管理器可以管理应用程序的生命周期,并提供一个通用的后台堆栈
导航。
库层包括了一套被各类Android系统组件使用的C/C++库并对应用程序框
架提供支持。
Android的运行环境包括一套核心库和Java虚拟机(Dalvik虚拟机),已经
基于Android技术的中国象棋人机对弈游戏的设计与实现
3
由谷歌重新设计和优化来适合Android平台。
Linux内核位于Android系统的底层并作为硬件和软件之间的一个抽象层。它
提供了核心系统服务,如安全,内存管理,进程管理,网络协议栈和驱动模型。此外,
一些底层功能如Dalvik虚拟机线程管理也依赖于Linux内核。
Android应用新特点
作为一个新的操作系统,一方面,Android可以受益于其他的成熟的操作系统的
技术。另一方面,Android也会改善出现在其他操作系统上的缺陷。对于开发商的前
瞻性,Android系统具有以下新的特点:
允许一个应用程序被明确的定义。Android应用程序中,所有的组件可以通过系
统独立启动,不过需要在一个XML文件名为AndroidManifest的文件中被声明。
AndroidManifest做许多另外声明应用的组件的东西,包括:
定义一些应用所需要的用户权限,如互联网接入。仅定义应用程序需要
的权限和应用程序必须执行的操作权限。
声明应用程序所需的最低API级别。
定义硬件和软件的使用或应用程序所需的功能。
声明API函数库的应用需要被对应的链接。
资源和代码是分开的。在Android中,所有的非代码资源是在XML文件中定义。
对于每一个包括在Android项目中的资源,SDK构建工具定义一个唯一的整数ID,
它可以用来参考从应用程序代码的资源或从XML文件中定义其他资源。提供单独的资
源可以从源代码中很容易地更新应用程序的不同特性,从而无需修改代码。同时通过
提供一套替代资源集,使开发人员能够针对各种设备配置优化中的应用,如不同的语
言和屏幕尺寸。
Android作为一个完整的,开放的和自由的移动设备平台,凭借其强大的功能和
良好的用户体验迅速发展成为最流行的移动操作系统。本文给出了关于Android应用
框架和Android应用程序的主要工作的详细介绍。最后,推出了android平台上的音
乐播放器作为一个例子来说明了这个机制。
1.2本论文研究意义
中国象棋是一项智力和策略的游戏,以往都是人和人下棋,现在有了计算机我
们可以和计算机竞技,人可以与计算机进行对弈。控制计算机的是人类,而人机会话
基于Android技术的中国象棋人机对弈游戏的设计与实现
4
综合性很强的一门边缘学科,它的中心任务是研究使计算机如何去做那些过去只能靠
人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成
了业界的一个热门研究方向。
本次论文的研究,主要是对中国象棋在Android系统中的兼容行性,对游戏界面
可观性,游戏中人机会话的研究。对于游戏中的人机会话的要点:
a某种在及其上表示棋局的方法,让程序知道会话的状态;
b产生合法的走棋法则,使得会话双方公正,并可以判断人类对手是否乱走;
c从所有和法定的走法中选择最佳的走法的技术;
d一种评估局面优化的方法,同上面技术配合做出智能选择;
e一个实现游戏的界面;
通过对游戏的设计,来实现游戏中棋牌的表示,着法的生成,对着法的搜索,最
后对局面的评估来实现中国象棋的人机会话。
基于Android技术的中国象棋人机对弈游戏的设计与实现
5
2设计相关技术理论
2.1游戏系统开发平台及搭建
JDK和Eclip:
JDK是Sun公司针对java开发员的产品。自从Java推出以来,JDK已经成为使用
最广泛的javaSDK。JDK是整个java的核心。包括运行环境Java工具和Java基础
类库。JDK是学好Java的第一步。
安装Eclip的开发环境需要JDK的支持,如果没有JDK,则启动Eclip时会
报告错误。在windows上安装JDK非常简单首先在Sun官网上下载,按照默认路径进
行安装。安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java
–version查看JDK的版本信息。出现类似下面的画面表示安装成功了:
图2.1JDK测试
Eclip如果你还没有Eclip的话,从官网上下载EclipIDEforJavaDevelopers
解压之后即可使用。
AndroidSDK
AndroidSDK提供了在windows平台上的开发安卓应用程序的开发组件,也就
是说,不论读者使用什么样的平台都可以开发出安卓平台的应用软件,其中包含了安
基于Android技术的中国象棋人机对弈游戏的设计与实现
6
卓平台上开发移动应用的各种工具集。它不仅包括了安卓模拟器和用于Eclip的安
卓开发工具插件(ADT),而且包括了各种用来调试,打包盒在模拟器上安装应用的
工具。
安卓主要是以java语言为基础,用户可以使用java语言来开发安卓平台上的
软件应用。通过SDK提供的一些工具将其打包成安卓平台使用的apk文件,然后在
使用SDK中的模拟器(Emulator)来模拟和测试软件在安卓平台运行情况和效果。
安装安卓的SDK,安装好JDK和Eclip后,打开EclipIDE。依次单击Menu
项中的windows->AndroidSDKManager项,进入AndroidSDKManager界面选择Tool
和需要的Android版本项进行更新安装。
ADT
Android为Eclip定制了一个插件,及ADT(AndroidDevelopmentTools),目的
是为用户提供一个强大的综合环境用于开发Android应用程序,ADT扩展了Eclip
的功能,可以让用户快速的建立Android项目,创建应用程序界面,在基于AndroidAPI
的基础上添加组件,以及用SDK工具集调试应用程序,甚至导出签名(或未签名)
的APKs以便发行应用程序。
安装AndroidDevelopmentToolplug-in,打开EclipIDE。依次单击Menu项中
的Help->SoftwareUpdate项
2.2可行性研究
本次毕业设计的题目是:基于Android技术的中国象棋人机对弈游戏的设计与
实现;主要是在基于Android平台开发一个手持设备应用游戏,使得游戏具有兼容性
和人机会话;并对整个系统分析,设计过程给出一个论证。
中国象棋游戏是棋牌类游戏,体现的是一种策略。对于行棋走棋不同的棋子有不
同走棋规则,走棋都必须按照走棋规则要求,双方轮换走棋,吃子,将军。本游戏设
计无疑是模拟现实人人博弈,虚拟的替换了真实的棋子棋盘,由人来和电脑直接对弈;
在一个人闲暇时也可以体验博弈的乐趣。
该应用游戏的设计主要从以下几方面做起:系统流程分析、系统的功能设计、系
统的数据结构设计。做好这些工作需要对Android开发平台了解,并搭建平台;深入
了解数据结构、Android应用程序以及各种组件(API)库函数。
基于Android技术的中国象棋人机对弈游戏的设计与实现
7
3游戏系统功能分析与设计
3.1界面的需求分析
通过以往手持设备游戏的体验,和用户对中国象棋游戏需求逻辑,游戏的功能
以及操作方法把整个设计划分成单元;先是运行游戏,进入欢迎游戏界面,随后单击
欢迎界面的图片进入菜单界面,在菜单中可以点击“打开声音”/“关闭声音”按钮来
控制声音开关,单击“帮助”菜单可以进入帮助界面显示游戏操作方法,而在菜单界
面单击“开始游戏”菜单将进入游戏主界面开始游戏,在游戏界面玩家可以通过单击
自己的棋子按照行棋规则来走棋,同时可以单击声音按钮打开关闭声音,当游戏一方
的“将”或者敌方的“帅”被吃掉是,会出现游戏失败或游戏胜利的界面,在游戏过
程中玩家可以随时通过单击“退出”按钮返回到游戏主菜单,主菜单中还可以点击“退
出游戏”结束关闭游戏。
3.2游戏走棋需求设计分析
进入游戏界面,游戏提示当前走棋为“帅”或者“将”,双方各走一着,直至分
出胜负或者直接点击退出结束游戏,轮到走棋的一方,将某个棋子从一个交叉点走到
另一个交叉点,或者吃掉对方的棋子而占领其交叉点,都算走一着,双方各走一着即
一个回合,吃子时,任何棋子走动,如果目标位置上有对方的棋子,就可以把对方的
棋子拿出棋盘,即屏幕上消失在显示自己的棋子。
玩家走完棋后电脑相对应搜索出自己相对应的走法。程序需要让计算机在轮到它
走子的时候能够执行一步它认为最有利的着法,而不是乱走;那么它就要有在诸多可
供选择的着法,提供所有候选着法的列表就是着法生成器所要完成的。之后用搜索函
数来搜索列表,并用局面评估函数逐一打分,最后就可以选择出最佳着法并执行。
基于Android技术的中国象棋人机对弈游戏的设计与实现
8
3.3类框架的设计
通过对中国象棋游戏的了解,对基于Android技术的中国象棋人机对弈游戏的需
求分析,游戏实现的理解并结合自己对知识点所掌握的程度;对中国象棋游戏总体设
计,主要由三个类组成:共有类,辅助界面相关类,游戏界面相关类。
共有类是Activity的实现类ChessActivity,该类是通过扩展基类Activity得
到的,是整个游戏的控制器,也是整个游戏程序的入口;辅助界面相关类由
WelcomeView欢迎界面类(该类为游戏欢迎界面的实现类,主要负责欢迎界面的绘制
工作),HelpView帮助界面类(该类为帮助界面的实现类),MenuView菜单界面类(该
类为菜单界面的实现类,负责绘制菜单界面以及对菜单界面的屏幕进行监听)三个类
实现;游戏界面相关类由GameView游戏界面类(该类为游戏程序中最主要的类,负
责绘制游戏过程中所有的信息,如棋盘、棋子、各个按钮以及胜利或失败菜单等),
GuiZe象棋规则类(该类是象棋规则的实现类,其中包含所有棋子的走棋规则以及当
前棋牌所有可能走法),ChessMove走法类(该类为棋子的走法的封装类,包括棋子
的名称,出发点以及目标点)SearchEngine类和NegamaxEngine类对当前棋局进行
搜索,搜索出最优的走棋着法;Eveluation类和ConstData类对棋局的评估,通
过评估给出当前棋局分数;几个类组成。之间关系如图所示:
图3.1游戏类框架图
基于Android技术的中国象棋人机对弈游戏的设计与实现
9
4游戏系统的设计与实现
4.1游戏界面的设计
4.1.1共有类ChessActivity的实现
该类的主要作用是通过接受Handler消息变量,根据各个界面发送的Handler
消息的类型判断所需要执行的操作。在适当的时间初始化相应的用户界面,各个界面
初始化方法被调用时,并根据其他界面的需求直接将用户界面切换到相应的界面
4.1.2辅助界面相关类的实现
该游戏的第一个用户界面即欢迎界面,通过WelcomeView类来实现该界面加载了
一个欢迎中国象棋图片,并通过监听触击屏幕图片,向Activity发送Handler消息
通知控制器切换用户界面;然后切换到菜单界面MenuView。
MenuView类中通过监听“开始游戏”切换到游戏界面;通过监听“打开声音”/
“关闭声音”进行声音的打开与关闭,与此同时“打开声音”、“关闭声音”按钮进行
切换;通过监听“帮助”来切换都帮助界面;通过监听“退出游戏”结束游戏用行退
出游戏。
帮助界面HelpView,该类中加载图片,图片中显示该游戏“怎么玩”同时监听
“返回”按钮,向Activity发送Handler消息通知控制器切换用户界面从而返回到
菜单界面。
4.1.3游戏界面相关类的实现
游戏界面GameView,该类是整个程序中最主要的类,该类首先是绘萨德导弹 制屏幕上的
内容棋盘和对应的棋子。提示一方先走;当“黑帅”或者“红将”被吃的话,弹出您
赢了或者您输了通过监听结束游戏切换到菜单界面。或者点击退出按钮也可结束游戏
切换至菜单界面。监听声音按钮来控制声音的开与关并以红色显示声音开,消失即为
关。
在游戏过程中,电脑走棋通过调动NegamaxEngine类中的Search()函数调动
基于Android技术的中国象棋人机对弈游戏的设计与实现
10
GuiZe类中的allPossibleMoves()产生所有可能的走棋着法,然后在通过
Eveluation类和ConstData类来对当前棋局进行评估得分。给不同的棋子不同的位
置给不同的棋子基本值,棋子灵活价值,棋子被威胁价值,棋子被保护价值;按照算
法计算出走法的价值,最后对所有的价值进行比较,价值高的也就是最终的要查找最
优走棋着法。
4.2中国象棋的规则及走法的实现
4.2.1行棋规则
中国象棋分为红黑双方,以楚河汉界为分界线,双方各执16字,分别为2车
2马2相2仕2炮1将5卒,各自走法不同,具体如下:
车:只可以走直线,且一步可以走任意距离,且起始点与目标点之间不得存在
其他棋子。车吃子的条件是与目标棋子在一条直线上,且两子之间不得存在任何其
他的棋子。
红黑车规则走法的介绍:
图4.1車的走法
基于Android技术的中国象棋人机对弈游戏的设计与实现
11
if(fromY!=toY&&fromX!=toX){//只能走直线
returnfal;
}
if(fromY==toY){//走横线
if(fromX
for(i=fromX+1;i
if(qizi[fromY][i]!=0){
returnfal;//返回fal
}
}
}
el{//向左走
for(i=toX+1;i
if(qizi[fromY][i]!=0){
returnfal;//返回fal
}
}
}
}
el{//走的是竖线
if(fromY
for(j=fromY+1;j
if(qizi[j][fromX]!=0)
returnfal;//返回fal
}
}
el{//向左走
for(j=toY+1;j
if(qizi[j][fromX]!=0)
returnfal;//返回fal
基于Android技术的中国象棋人机对弈游戏的设计与实现
12
}
}
}
break;
马:只可以走“日”字方格,因此一匹马的最理想落子点有8个,但存在绊马
腿的情况,即从马的位置到要走到的目标位置,顺着此方向,休息用英语怎么说 “日”字方格有两个
方向,即两格长度和一个长度,马紧挨的两格长度方向的位置不能有子,否则即被
绊住,不能走动。若目标位置为空,即可走过,若为对方的棋子,即可吃掉。
图4.2马的走法
红黑马规则走法的介绍:
if(!(((toX-fromX)==1&&(toY-fromY)==2)
||((toX-fromX)==2&&(toY-fromY)==1))){
returnfal;//马走的不是日字时
}
if(toX-fromX==2){//向右走
i=fromX+1;//移动
基于Android技术的中国象棋人机对弈游戏的设计与实现
13
j=fromY;
}
elif(fromX-toX==2){//向左走
i=fromX-1;//移动
j=fromY;
}
elif(toY-fromY==2){//向下走
i=fromX;//移动
j=fromY+1;
}
elif(fromY-toY==2){//向上走
i=fromX;//移动
j=fromY-1;
}
if(qizi[j][i]!=0)
returnfal;//绊马腿
break;
炮:只可以走直线,且一步可以走任意距离,其起始点与目标点之间不得存在
其他棋子。炮吃子的条件是与目标棋子在一条直线上,且两子之间必须有且只有一
个棋子作为“跳板”,让炮进行跳跃式攻击。
红黑炮规则走法的介绍:
基于Android技术的中国象棋人机对弈游戏的设计与实现
14
图4.3炮的走法
if(fromY!=toY&&fromX!=toX){//炮走直线
returnfal;//返回fal
}
if(qizi[toY][toX]==0){//不吃子时
if(fromY==toY){//横线
if(fromX
for(i=fromX+1;i
if(qizi[fromY][i]!=0){
returnfal;//返回fal
}
}
}
l{//向走走
for(i=toX+1;i
if(qizi[fromY][i]!=0){
returnfal;//返回fal
基于Android技术的中国象棋人机对弈游戏的设计与实现
15
}
}
}
}
el{//竖线
if(fromY
for(j=fromY+1;j
if(qizi[j][fromX]!=0){
returnfal;//返回fal
}
}
}
el{//向上走
for(j=toY+1;j
if(qizi[j][fromX]!=0){
returnfal;//返回fal
}
}
}
}
}
el{//吃子时
intcount=0;
if(fromY==toY){//走的是横线
if(fromX
for(i=fromX+1;i
if(qizi[fromY][i]!=0){
count++;
}
}
if(count!=1){
基于Android技术的中国象棋人机对弈游戏的设计与实现
16
returnfal;//返回fal
}
}
el{//向左走
for(i=toX+1;i
if(qizi[fromY][i]!=0){
count++;
}
}
if(count!=1){
returnfal;//返回fal
}
}
}
el{//走的是竖线
if(fromY
for(j=fromY+1;j
if(qizi[j][fromX]!=0){
count++;//返回fal
}
}
if(count!=1){
returnfal;//返回fal
}
}
el{//向上走
for(j=toY+1;j
if(qizi[j][fromX]!=0){
count++;//返回fal
}
}
基于Android技术的中国象棋人机对弈游戏的设计与实现
17
if(count!=1){
returnfal;//返回fal
}
}
}
}
break;
卒、兵:一步只可以走过一个方格的距离。当兵卒位于己方阵营时,只可以向
前走动。当兵卒过河后到达对方阵营,可向前、向左、向右三个方向行走,即兵卒
遵循的规律是绝不后退。
图4.4卒的走法
黑兵规则走法的介绍
if(toY
returnfal;//返回fal
}
if(fromY<5&&fromY==toY){//过河前只能直走
基于Android技术的中国象棋人机对弈游戏的设计与实现
18
returnfal;//返回fal
}
if(toY-fromY+(toX-fromX)>1){
//只能走一步并且是直线
returnfal;//返回fal
}
break;
//////////////////////////////////////////////////////
红卒规则走法的介绍
if(toY>fromY){//不能回头
returnfal;//返回fal
}
if(fromY>4&&fromY==toY){//过河前只能直走
returnfal;//返回fal
}
if(toY-fromY+(toX-fromX)>1){
//只能走一步并且是直线
returnfal;//返回fal
}
break;
象、相:只可以在己方阵营走动,且仅限于7个点,即己方“田”字格上的7
个点,走的是斜线,走动时,起始点与目标点构成一条斜线,若该斜线的中点位置
存在其他棋子,则被绊住无法走动。
基于Android技术的中国象棋人机对弈游戏的设计与实现
19
图4.5象的走法
黑象规则走法的介绍
if(toY>4){//不能过河
returnfal;//返回fal
}
if((fromX-toX)!=2||(fromY-toY)!=2){
//象走“田”字
returnfal;//返回fal
}
if(qizi[(fromY+toY)/2][(fromX+toX)/2]!=0){//象眼处有棋子
returnfal;//返回fal
}
break;
///////////////////////////////////////////////////////
红相规则走法的介绍
if(toY<5){//不能过河
returnfal;//返回fal
}
if((fromX-toX)!=2||(fromY-toY)!=2){
//象走“田”字
returnfal;//返回fal
}
if(qizi[(fromY+toY)/2][(fromX+toX)/2]!=0){//象眼处有棋子
returnfal;//返回fal
基于Android技术的中国象棋人机对弈游戏的设计与实现
20
}
break;
士、仕:只可以在己方阵营走动,且仅限于5个点,即己方棋盘上所绘的两条
斜线的四个顶点和交叉点。一步只可以走动一个方格的斜线距离。可进可退。
图4.6士的走法
黑士规则走法的介绍:
if(toY>2||toX<3||toX>5){//出了九宫格
returnfal;//返回fal
}
if((fromY-toY)!=1||(toX-fromX)!=1){//走斜线
returnfal;//返回fal
}
break;
/////////////////////////////////////////////////////////////////////
红仕规则走法的介绍:
if(toY<7||toX<3||toX>5){//出了九宫格
returnfal;//返回fal
}
if((fromY-toY)!=1||(toX-fromX)!=1){//走斜线
returnfal;//返回fal
}
break;
基于Android技术的中国象棋人机对弈游戏的设计与实现
21
将、帅:只可以在己方阵营走动,且仅限于9个点,即己方底三行中三列形成
的9个交叉点,也就是俗称的“九宫”,一步只可以走动一个方格的直线距离作为
本方的主将,镇守大本营,双方的主将是不能够处于同一条直线而主将之间不存在
其他的棋子进行隔挡。
图4.7将帅的走法
黑帅规则走法的介绍:
if(toY>2||toX<3||toX>5){//出了九宫格
returnfal;//返回fal
}
if(((fromY-toY)+(toX-from))>1){
//只能走一步
returnfal;//返回fal
}
break;
/////////////////////////////////////////////////////////////////////////////////
红将规则走法的介绍:
if(toY<7||toX<3||toX>5){//出了九宫格
returnfal;//返回fal
}
if(((fromY-toY)+(toX-from))>1){
//只能走一步
returnfal;//返回fal
}
break;
基于Android技术的中国象棋人机对弈游戏的设计与实现
22
4.2.2棋盘的表示
针对棋盘的设计,每一种棋子对应一个固定的值用以识别该棋子的类型,那么
设计就根据红黑双方的棋子以及每个类型的棋子,设计规则类(GuiZe类,调用其
中的canMove方法用以判断某一步走棋的是否可行。规则类的设计则采用了常规的
办法,因为棋子的种类只有7种,且红黑双方处于棋盘的两端,某些棋子走动时的
方向不一样,设计时就要进行分类讨论设计,供存在14中不同的判别方法来对所
以的棋子走法进行判别是否可行,每一个判别方法都对应于其独有的判断算法。
棋盘上各种棋子以及棋盘的初始布局的设计采用10*9的数组来进行标识,如
下图4.8所示:
图4.8棋盘初始布局
各个数字的对应关系如下:
0-无棋子;1-黑方的帅;2-黑方的车;3-黑方的马;4-黑方的炮;5-黑方的士;
6-黑方的象;7-黑方的卒;8-红方的将;9-红方的车;10-红方的马;11-红方的炮;
12-红方的士;13-红方的相;14-红方的兵。
坐标(0,0)到坐标(8,4)之间的坐标代表楚河汉界的一方,坐标(0,5)到坐标
(8,9)之间的坐标代表楚河汉界的另一方,即红黑双方各自的领土。
电脑走棋时通过构造一个走法类ChessMove,创建一个对象调用
NegamaxEngine类中的Search()函数根据当前局势查询一个最好的走法记录棋子
的原有位置坐标、目标位置坐标、棋子类型并对该对象进行初始化。然后根据该对
象记录的原有位置坐标和目标位置坐标进行数据改变达到行棋目的。
基于Android技术的中国象棋人机对弈游戏的设计与实现
23
玩家走棋是通过对屏幕进行监听,从而记录棋子类型,原有位置坐标和目标位
置坐标,通过调用规则类GuiZe中的CanMove判断该棋子走法是否可行符合棋子走
棋规则,可行就改变原有位置和目标位置数据,达到行棋的目的
轮到走棋的一方,游戏界面当前位置显示走棋一方的“黑帅”或者“红将”,
将某个棋子从一个交叉点走到另一个交叉点,或者吃掉对方的棋子而占领其交叉
点,这样一方走棋结束当前位置显示改变轮到另一方走棋。
任何棋子走动,如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘,
即在10*9数组中相应位置的数字变为自己棋子所对应的数字,自己棋子原来所在
的位置对应数组的数字变为0,刷帧线程不断的刷新界面改变屏幕显示,这样对方
的棋子就被吃掉,在屏幕上消失在对应显示自己的棋子;如果目标位置上没有对方
棋子,10*9数组对应目标位置数字改变,原有位置数字变为0,刷帧线程更新界面
改变显示。
4.3游戏人机会话的实现
4.3.1着法的生成
在着法生成器中,采用的基本思想就是遍历整个棋盘(一个接一个地查看棋盘上
的每个位置点),当发现有当前下棋方的棋子时先判断它是何种类型的棋子,然后根
据其棋子类型而相应地找出其所有合法着法并存入着法队列。这里的合法着法是通过
象棋的行棋规则来确定;
产生了着法后要将其存入着法队列以供搜索之用,由于搜索会搜索多层(即考虑
双方你来我往好几步,这样才有利于对局面进行评估以尽可能避免“目光短浅”),
所以在把着法存入着法队列的时候还要同时存储该着法所属的搜索层数。因此可以将
着法队列定义为二维数组MoveList[10][100],其中第一个数组下标为层数,第二个
数组下标为每一层的全部着法数。
关于搜索层数,设定为4,实际使用的是1到3(在界面中将其限定为1—3)。
搜索层数的增加会显著提高电脑的下棋水平(当然计算机的棋力在很大程度上也依赖
于局面评估)。在配置为1.5G,512M内存的计算机上最多只能搜索3层,再多将导
致搜索时间达到令人无法容忍的地步(这里还需要特别说明的是,搜索的速度也和着
法生成的效率以及局面评估的复杂度有关,因为每分析一个结点都要执行这两种操
基于Android技术的中国象棋人机对弈游戏的设计与实现
24
作)。
对于每一层的着法数,也就是当前下棋方针对当前局面的所有可选的合法着法,
据有关数据统计在象棋实战中一般最多情况下也就五六十种。定义电脑横屏壁纸 第二个数组下标为
100,应当可以保证十分的安全。
4.3.2搜索算法
中国象棋博弈为二人零和,全信息,非偶然博弈,他的特征如下:
(1)对弈的MAX、MIN双方轮流采取思考走棋,对弈的结果有三种情况:和局;
MAX方胜,MIN方败;MIN方胜,MAX方败。
(2)在对弈过程中,任何一方都了解当前的格局和过去的行棋历史。
(3)任何一方在采取行动前都要根据当前的实际情况,进行得失分析,选取对自
已为最有利而对对方最为不利的走法,不存在掷骰子之类的"碰运气"因素。即双方都
是很理智地决定自己的行动。最终也就组成了一颗博弈树(如图4.9)所示。
图4.9博弈树示意图
在这棵博弈树中,根节点是初始局面,一个节点下的每个分支代表一个着法,
分支相连的子节点是走了这个着法后会出现的局面。由于双方交替出着在博弈过程
中,任何一方都希望自己取得胜利。因此,当某一方当前有多个行动方案可供选择时,
他总是挑选对自己最为有利而对对方最为不利的那个行动方案,使自己利益最大化。
让始终从红方的角度来考虑。轮到红方走棋时,红方总是选择对自己最有利的着法,
从而在生成的一系列子节点中寻找分值最高的局面(即MAX层),据此返回最佳着法;
然后轮到黑方走棋,黑方也选对自己最有利的着法,但在红方看来,这个着法对自己
基于Android技术的中国象棋人机对弈游戏的设计与实现
25
最不利,所以从红方的角度来看,黑方就选择了分值最低的局面(即MIN层),从而
返回黑方的最佳着法。可以用一个简化的博弈树模型来表示(如图4.10)所示:
在这棵树中,矩形代表红方,圆代表黑方,分别取子节点的极大/极小值。根
据上面的描述,我们选择了第二个着法。而加粗的这条路径就是极大极小算法思考的
过程。
图4.10博弈树搜索过程示意
下图4.11为负极大值的伪代码的实现
基于Android技术的中国象棋人机对弈游戏的设计与实现
26
图4.11负极大值算法
4.3.3局面评估
局面评估是一个通过既有的棋类知识来评估一个局面的优劣的过程。这一过程对
具体的棋类知识的依赖程度很深,但是仍有一般性的规律可循。
(1)棋子的价值评估,简单的说就是评估双方都有哪些棋子在棋盘上。根据我
们的经验,可以让一个车的价值为500,一个马的价值为300,一个兵的价值为100等
等。将的价值为无限大。一方的棋子总值就是棋盘上存活的该方棋子乘以棋子的价值
的和。用一个式子表示:
chessValue=sum(Number*baValude)
其中Number是某种棋子的数量,baValue是该中棋子的价值,sum是对各种棋子的
总价值求和。
基于Android技术的中国象棋人机对弈游戏的设计与实现
27
如果红色棋子的价值总和大于黑色的棋子价值总和,通常意味着红方的局势优于
黑方。而红黑双方的chessValue之差越大,红方的优势就越大。
(2)棋子的灵活性与棋盘控制
棋子的灵活性是指棋子的活动范围,通常越大越好。一匹不能动的马很难在棋局
中发挥重要的作用;同样,一个蹲在角落里的车也是价值不高。评估棋子的灵活性较
为简单,将一个棋子的所有合法的走法罗列出来,称上该种棋子每一可移动的价值就
行了。可用下面的公式:
mobility=sum(moveNumber*flexValue)
其中,moveNumber是某种棋子的合法走法数量,flexValue是该种棋子每一走法的价
值,sum是对所有棋子灵活性价值求和。mobility就是所有棋子的灵活性分数。
与灵活性评估类似,还可以评估博弈双方对棋盘上位置的控制能力。在象棋中,
如果一位置落在某方棋子的合法走不上,就可以认为被该方控制。如果某一位置同时
落在双方的合法的步上,我们可以根据双方控制该位置的棋子数量及棋子价值来决定
孰优孰劣。能控制更多位置的一方应该在这项得分上更多。
(3)棋子之间的关系
棋子之间的关系也是估值重要的内容之一,我们可以将某个棋子被对方棋子威胁
看成是一个步利因素。类如红车的位置在黑马的合法走法当中,此时我们可以把红车
的价值减去一个值如200来刻画这种情形。而如果红马在黑车的合法走步之中,而红
马同时也在红卒的合法走步之中,我们可以认为红马置于红卒的保护之下,没有受到
威胁,价值不变。棋子关系的评估应考虑到该谁走棋的问题。如果某个红马落在黑
炮的合法走步之内,但此时轮到红方走棋,应该认为红马受到的威胁较轻。而如果此
时轮到黑方走棋,就应该认为受到的危险很大,应减去一个相对较大的值了。如果将
被威胁,且轮到对方走棋,那么无论有何种可以走到将位都没有意义,将等于失去了。
此时应该结束估值返回失败的估值。棋子间关系的评估可以在很大程度上提高估值的
精度,通常是博弈估值的必备内容。
基于Android技术的中国象棋人机对弈游戏的设计与实现
28
5游戏系统模块的设计实现
5.1欢迎界面
运行该游戏,首先进入的将是欢迎界面,效果如图5.1所示。
图5.1游戏欢迎界面
5.2菜单界面
(1)进入欢迎界面后,然后点击屏幕将进入菜单界面如图5.2所示。
基于Android技术的中国象棋人机对弈游戏的设计与实现
29
图5.2菜单界面
(2)点击“关闭声音”按钮来关闭声音,显示如图5.3所示。原来的“关闭声音”
按钮变成“打开声音”按钮。
图5.3关闭声音
基于Android技术的中国象棋人机对弈游戏的设计与实现
30
5.3帮助界面
点击菜单界面中的“帮助”按钮,界面切换至帮助界面如图5.4所示。
图5.4帮助界面
点击帮助界面中的“返回”按钮,界面返回至菜单界面。
5.4游戏界面
(1)点击“开始游戏”按钮,界面切换至游戏界面如(图5)所示。当前由“红
将”即红棋先走,声音状态为关闭状态。
基于Android技术的中国象棋人机对弈游戏的设计与实现
31
图5.5游戏界面
(2)玩家先走棋,玩家走一步棋;当前位置显示为黑帅,轮到电脑走棋如图
5.6所示:
图5.6轮到电脑走棋
基于Android技术的中国象棋人机对弈游戏的设计与实现
32
(3)电脑走完棋后当前位置显示红将,轮到玩家走棋;如图5.7所示:
图5.7电脑走完棋转换玩家
(4)对局结束红方将输了(电脑赢了)如图5.8所示:
图5.8红方玩家输了(电脑胜利)
基于Android技术的中国象棋人机对弈游戏的设计与实现
33
(5)对局结束红方将赢了(电脑输了)如图5.9所示:
图5.9红方玩家赢了(电脑输了)
(5)点击“您输了”小框体或者点击“退出”按钮退出游戏界面切换到菜单
界面,如图5.9所示:
图5.9从游戏界面返回菜单界面
基于Android技术的中国象棋人机对弈游戏的设计与实现
34
6运行测试
系统测试是软件开发投入使用之前必不可少的一个步骤,同时也必须严格要求
进行测试,对程序的功能,性能、可用性、客户端兼容性和美观等测试。测试完成后
要上交测试报告,我们可以根据测试报告及时发现问题并提出解决方案,便于系统的
维护与升级。
经过最初的测试,系统能正常运行,能够很好地实现模块界面间的切换,音乐
声音的开关,象棋能够按照规则来行走等功能都能正常运行;同时电脑也可以进行走
棋,实现人和电脑下棋。不足是在游戏过程中,人和电脑对弈电脑着法比较粗糙,只
是初步的实现人工智能。
通过对大量资料的了解学习,最终初步设计实现了负极大值搜索引擎的搜索和
局面的评估代码。对于负极大值搜索,由于对于每层每个节点都要扫描评估,如果层
次增加,那样的数据量也就相当的大,以至于搜索的效率也会变差。造成象棋对弈过
程中电脑走棋思索时间太长,将使得玩家受不了。对于搜索算法和局面评估还有待于
继续实现和完善。
基于Android技术的中国象棋人机对弈游戏的设计与实现
35
7结束语
本论文详细论述了基于Android技术中国象棋人机对弈的设计与实现,采用了
JDK,EclipforIDE,AndroidSDK,ADT等工具。使得应用程序基本实现了系统功
能需求分析中的基本功能。对Android手机的兼容,欢迎界面、菜单界面、帮助界面、
游戏界面之间的切换,背景音乐的开与关,安全的退出游戏,棋子按规则行走等基本
功能都得到实现;而且粗略的完成了象棋的人机对弈。进入游戏界面便可以开始和电
脑对弈。
由于技术和时间的问题,本系统对弈时电脑走棋相对比较粗糙,系统中还存在着
许多不足的地方需要改正和完善,如人机对战时电脑走棋人工智能还欠缺。由于对博
弈树的算法没能够完全掌握,只是初步设计实现了负极大值搜索引擎。对于人机博弈
搜索算法只是用了负极大值搜索,负极大值搜索由于搜索太多效率较差由此设想可以
通过对几种不同的算法如历史表法、迭代加深、极小窗口、渴望搜索、alpha-beta等
的同时实现然后选择有效的搜索,来提高电脑人工智能的效率。对于这些算法在后面
工作中有待于实现。
基于Android技术的中国象棋人机对弈游戏的设计与实现
36
致谢
经过这段时间的忙碌和工作,本次毕业设计已经接近尾声,作为一个本科生的毕
业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,
以及一起工作的同学们的支持,想要完成这个设计是难以想象的。
在此更要感谢我的导师林椹尠老师和专业老师,是你们的细心指导和关怀,使我
能够顺利的完成毕业论文。我的设计较为复杂烦琐,而且涉及到的一些技术算法很是
生僻,但是林老师仍然细心地纠正我程序设计中的错误,并且为我提供阅读资料和开
发文档供我参考。在我的学业和论文的研究工作中无不倾注着老师们辛勤的汗水和心
血。老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。从尊敬的导
师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我
的导师致以最衷心的感谢和深深的敬意。
然后还要感谢大学四年来所有的老师,为我们打下一定的技术知识的基础;同时
还要感谢所有的同学们,正是因为有了你们的支持和鼓励。此次毕业设计才会顺利完
成。
最后感谢西安邮电大学和理学院这四年来对我的教导,使我能够成长为现在这样
一个拥有技术,即将踏入社会的学子。
基于Android技术的中国象棋人机对弈游戏的设计与实现
37
参考文献
[1]徐心和,王骄.中国象棋计算机博弈关键技术分析.小型微型计算机系统,
2006,27(6):961–965。
[2]黄晨等.象棋百科全书.。十百千打一成语
[3]马占欣,李亚,陆玉昌.用遗传算法解决博弈问题.河南科学,2007,25(2):
273-277。
[4]王骄,王涛,罗艳红,等.中国象棋计算机博弈系统评估函数的自适应遗传算法
实现.东北大学学报,2005,126(10):949-952.。
[5]付强,陈焕文.中国象棋人机对弈的自学习方法研究.计算机技术与发展,
2007,17(12):76-79。
[6]王赠凯,吕维先.机器博弈搜索技术分析.软件导刊,2007,2:26-27。
[7]张从明、马京成.网络教学设计.第四军医大学出版社,2004。
[8]周玮,王水涛,孙旸.中国象棋计算机博弈中的一种数据结构方法.计算机工
程与应用,2006.35:219。
基于Android技术的中国象棋人机对弈游戏的设计与实现
38
附录:
ame;
ty;//引入相关的包
layer;
;
r;
e;
;
Manager;
publicclassChessActivityextendsActivity{
booleanisSound=true;//是否播放声音
MediaPlayerstartSound;//开始和菜单时的音乐
MediaPlayergamemusic;//游戏声音
HandlermyHandler=newHandler(){//用来更新UI线程中的控件
publicvoidhandleMessage(Messagemsg){
if(==1){//WelcomeView或HelpView或GameView传来的消息,
切换到MenuView
initMenuView();//初始化并切换到菜单界面
}
elif(==2){//MenuView传来的消息,切换到GameView
initGameView();//初始化并切换到游戏界面
}
elif(==3){//MenuView传来的消息,切换到HelpView
initHelpView();//初始化并切换到帮助界面
}
}
};
publicvoidonCreate(BundlesavedInstanceState){//重写的onCreate
te(savedInstanceState);
基于Android技术的中国象棋人机对弈游戏的设计与实现
39
//全屏
requestWindowFeature(E_NO_TITLE);
getWindow().tFlags(_FULLSCREEN,
_FULLSCREEN);
startSound=(this,ound);//加载欢迎声音
ping(true);//设置游戏声音循环播放
gamemusic=(this,sic);//游戏过程的背景
声音
ping(true);//设置游戏声音循环播放
lcomeView();//初始化欢迎界面
}
publicvoidinitWelcomeView(){//初始化欢迎界面
tentView(newWelcomeView(this,thi法国旅行 s));//切换到欢迎界面
if(isSound){//需要播放声音时
();//播放声音
}
}
publicvoidinitGameView(){//初始化游戏界面
tentView(newGameView(this,this));//切换到游戏界面
}
publicvoidinitMenuView(){//初始化菜单界面
if(startSound!=null){//停止
();//停止播放声音
startSound=null;
}
if(d){//是否播放声音
();//播放声音
}
tentView(newMenuView(this,this));//切换View
}
publicvoidinitHelpView(){//初始化帮助界面
tentView(newHelpView(this,this));//切换到帮助界面
基于Android技术的中国象棋人机对弈游戏的设计与实现
40
}
}
ame;
/**
*该类为棋子的一个走法
*包含是什么棋子
*起始点的位置
*目标点的位置
*以及估值时所用到的score
*/
publicclassChessMove{
intChessID;//表明是什么棋子
intfromX;//起始的坐标
intfromY;
inttoX;//目的地的坐标
inttoY;
intscore;//值,估值时会用到
publicChessMove(intChessID,intfromX,intfromY,inttoX,inttoY,intscore){//构
造器
D=ChessID;//棋子的类型
=fromX;//棋子的起始坐标
=fromY;
=toX;//棋子的目标点x坐标
=toY;//棋子的目标点y坐标
=score;
}
}
基于Android技术的中国象棋人机对弈游戏的设计与实现
41
ame;酒糟可以喂猪吗
publicclassSearchEngine{
//表示棋盘棋的分布
publicstaticintm_curPosition[][]=newint[10][9];
//记录最佳走棋
publicstaticChessMovebestMove=newChessMove();
//走法产生七器
publicstaticGuiZemoveGen=newGuiZe();
//估值产生器
publicstaticEveluationm_eve=newEveluation();
//搜索深度
publicstaticintm_archDepth;
//当前搜索深度
publicstaticintm_maxDepth;
//移动棋子
publicstaticvoidarchAgoodMove(intposition[][]){}
publicstaticintmakeMove(ChessMovedata)
{
intchessID;
chessID=m_curPosition[][];
m_curPosition[][]=m_curPosition[][];
m_curPosition[][]=S;
returnchessID;
}
//判断游戏时候结束
publicstaticintisGameOver(intposition[][],intdepth)
{
inti,j;
booleanredLive=fal,blackLive=fal;
for(i=0;i<3;++i)
for(j=3;j<6;++j)
{
if(position[i][j]==1)
blackLive=true;
}
for(i=7;i<10;++i)
for(j=3;j<6;++j)
{
if(position[i][j]==8)
redLive=true;
基于Android技术的中国象棋人机对弈游戏的设计与实现
42
}
i=(m_maxDepth-depth+1)%2;//取当前奇偶标志
if(!redLive)//红将不在了
{
if(i!=0)
return19990+depth;
el
return-19990-depth;
}
if(!blackLive)
if(0!=i)
return-19990-depth;
el
return19990+depth;
return0;//两将都在,返回0
}
//取消移动
publicstaticvoidunMakeMove(ChessMovemove,intchessID)
{
m_curPosition[][]=
m_curPosition[][];
m_curPosition[][]=chessID;
}
}
ame;
publicclassNegamaxEngineextendsSearchEngine{
publicNegamaxEngine(){
}
publicstaticChessMoveSearch(int[][]position){
archAgoodMove(position);
returnbestMove;
}
publicstaticvoidarchAgoodMove(int[][]position)
基于Android技术的中国象棋人机对弈游戏的设计与实现
43
{
m_maxDepth=m_archDepth;
inti,j;
for(i=0;i<10;++i)
for(j=0;j<9;++j)
m_curPosition[i][j]=position[i][j];
negaMax(m_maxDepth);//调用负极大值搜索引擎
try{
(4000);
}catch(InterruptedExceptione){
//TODOAuto-generatedcatchblock
tackTrace();
}
makeMove(bestMove);
}
//负极大值搜索引擎
publicstaticintnegaMax(intdepth)
{
intcurrent=-20000;
intscore=0;
intcount=0,i;
inttype;
i=isGameOver(m_curPosition,depth);
if(i!=0)//不等于0表示某方的王不存在了,直接返回
{
returni;
}
booleanside;
if((m_maxDepth-depth)%2==1)side=true;
基于Android技术的中国象棋人机对弈游戏的设计与实现
44
elside=fal;
if(depth<=0){//搜索到叶子节点,返回估值信息
returnm_tion(m_curPosition,side);
}
//生产所有可能的走法,
count=sibleMoves(m_curPosition,depth,side);
for(i=0;i
{//尝试每种走法
type=makeMove(st[depth][i]);
//返回此种走法的估值分数
score=-negaMax(depth-1);
//取消上次走法
unMakeMove(st[depth][i],type);
//若当前走法更优,则记录下来
if(score>current)
{
current=score;
//如果到了根节点S
if(depth==m_maxDepth)
{//记录最优的走棋,把它保存到m_bestMove中
bestMove=st[depth][i];
}
}
}
returncurrent;
}
}
基于Android技术的中国象棋人机对弈游戏的设计与实现
45
ame;
publicclassConstData{
publicfinalstaticintNOCHESS=0;//无子
//黑方
publicfinalstaticintB_KING=1;//黑帅
publicfinalstaticintB_CAR=2;//黑车
publicfinalstaticintB_HORSE=3;//黑马
publicfinalstaticintB_CANON=4;//黑炮
publicfinalstaticintB_BISHOP=5;//黑士
publicfinalstaticintB_ELEPHANT=6;//黑象
publicfinalstaticintB_PAWN=7;//黑兵
publicfinalstaticintB_BEGIN=1;
publicfinalstaticintB_END=7;
//红方
publicfinalstaticintR_KING=8;//红将
publicfinalstaticintR_CAR=9;//红车
publicfinalstaticintR_HORSE=10;//红马
publicfinalstaticintR_CANON=11;//红炮
publicfinalstaticintR_BISHOP=12;//红仕
publicfinalstaticintR_ELEPHANT=13;//红相
publicfinalstaticintR_PAWN=14;//红卒
publicfinalstaticintR_BEGIN=8;
publicfinalstaticintR_END=14;
//定义每种棋的价值
//兵100,士250,象250,马350,炮350车500
publicfinalstaticintBASEVALUE_PAWN=100;
publicfinalstaticintBASEVALUE_BISHOP=250;
基于Android技术的中国象棋人机对弈游戏的设计与实现
46
publicfinalstaticintBASEVALUE_ELEPHANT=250;
publicfinalstaticintBASEVALUE_HORSE=350;
publicfinalstaticintBASEVALUE_CANON=350;
publicfinalstaticintBASEVALUE_CAR=500;
publicfinalstaticintBASEVALUE_KING=10000;
//定义各种棋子的灵活性
//也就是每多一个可走位置应加上的值
//兵15,士1,象1,车6,马12,炮6,王0
publicfinalstaticintFLEXIBLE_PAWN=15;
publicfinalstaticintFLEXIBLE_BISHOP=1;
publicfinalstaticintFLEXIBLE_ELEPHANT=1;
publicfinalstaticintFLEXIBLE_HORSE=12;
publicfinalstaticintFLEXIBLE_CANON=6;
publicfinalstaticintFLEXIBLE_CAR=6;
publicfinalstaticintFLEXIBLE_KING=0;
//初始棋盘
publicfinalstaticintINITCHESSBOARD[][]=
{
{2,3,6,5,1,5,6,3,2},
{0,0,0,0,0,0,0,0,0},
{0,4,0,0,0,0,0,4,0},
{7,0,7,0,7,0,7,0,7},
{0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0},
{14,0,14,0,14,0,14,0,14},
{0,11,0,0,0,0,0,11,0},
{0,0,0,0,0,0,0,0,0},
{9,10,13,12,8,12,13,10,9}
};
//判断chessID是否是黑棋
基于Android技术的中国象棋人机对弈游戏的设计与实现
47
publicstaticbooleanisBlack(intchessID)
{
return(chessID>=B_BEGIN&&chessID<=B_END);
}
//判断chessID是否是红棋
publicstaticbooleanisRed(intchessID)
{
return(chessID>=R_BEGIN&&chessID<=R_END);
}
//判断chessID1和chessID2是否是同色
publicstaticbooleanisSameSide(intchessID1,intchessID2)
{
return((isBlack(chessID1)&&isBlack(chessID2))||(isRed(chessID1)&&
isRed(chessID2)));
}
}
基于Android技术的中国象棋人机对弈游戏的设计与实现
48
译文
原文:
RearchonDevelopmentofAndroidApplications
Abstract—IntroducedtheAndroidplatformandthefeaturesofAndroidapplications,gave
adetaileddescriptionofAndroidapplicationframeworkfromtheprospectiveof
emusicplayerisprovidedasinstancetoillu工作个人鉴定 stratethebasicworking
percouldprovideguidanceto
understandingtheoperationmechanismofAndroidapplicationsandtodeveloping
applicationsonAndroidplatform.
Keywords-Linuxkernel;Androidsystem;Applicationframework;Dalvikvirtualmachine;
UCTION
Applicationframeworkdefinedthecommonstructureofprogramsinthespecific
ially,aframeworkisacomponentthatcanbereud,ittthearchitecture
ofapplicationsandincorporatedasatofabstractclassandthecooperationoftheir
disanopensourceoperatingsystembadonLinuxkernelandlaunched
PCoperatingsystem,mobilephoneoperatingsystemsareconstrained
bytheirhardware,storagespace,ed
withthedevelopmentofapplicationsonPC,therearesomedifferentfeaturesof
perintroducedthebasic
architectureandapplicationframeworkofAndroidoperatingsystem,givesadetailed
descriptionofmainstructureofAndroidapplicationsandthemethodsofdeveloping
applicationsbadonAndroidapplicationframework.
UCTIONOFANDROIDOPERATINGSYSTEM
AndroidisacomprehensiveoperatingenvironmentthatbadonLinuxV2.6
kernel,itisalsoalayeredsystem,thearchitectureofAndroidsystemhaveshowaspicture
2-1[1].
基于Android技术的中国象棋人机对弈游戏的设计与实现
49
ApplicationslayeristhesiteofallAndroidapplicationsincludinganemailclient,SMS
program,maps,browr,contacts,licationsarewrittenusingtheJava
programminglanguage.
roidapplication
frameworkincluding:
•ArichandextensibletofViewsthatcanbeudtobuildanapplicationwith
beautifulurinterface,includinglists,grids,textboxes,buttons,andevenanembeddable
webbrowr.
•AtofContentProvidersthatenableapplicationstoaccessdatafromother
applications(suchasContacts),ortosharetheirowndata.
•AResourceManagerthatprovidesaccesstonon-coderesourcessuchaslocalized
strings,graphics,andlayoutfiles.
•ANotificationManagerthatenablesallapplicationstodisplaycustomalertsinthe
statusbar.
•AnActivityManagerthatmanagesthelifecycleofapplicationsandprovidesacommon
navigationbackstack.[1]
LibrarieslayerincludesatofC/C++librariesudbyvariouscomponentsofthe
Androidsystemandprovidessupporttotheapplicationframework.
AndroidRuntimeincludesatofcorelibrariesandaJavavirtualmachine(Dalvik
virtualmachine)thathavebeenredesignedandoptimizedbyGoogletobesuitablefor
Androidplatform.
LinuxkernelislocatedatbottomlayerofAndroidsystemandactsasanabstraction
idescoresystem
基于Android技术的中国象棋人机对弈游戏的设计与实现
50
rvicessuchascurity,memorymanagement,processmanagement,networkstack,and
tion,somebottomfunctionssuchasmanagementofthreadsofDalvik
virtualmachinealsorelyontheLinuxkernel.
VIRTUALMACHINE
Aspreviouslymentioned,AndroidisrunningontheLinuxkernelandits
applicationsarewrittenbyJavaprogramminglanguage,soAndroidapplicationsare
virtualmachine
hasbeenredesignedandoptimizedbyGoogleforthehardwarefeaturesofmobiledevices.
InAndroidsystem,thereisatoolnameddx,includedintheAndroidSDK,transformsthe
JavaClassfiles(whichcompiledbyaregularJavacompiler)
formatfilesintegrateallJavaclassfilesanddeleteredundantinformationineveryJava
reveralfeaturesofDalvikvirtualmachine:
•Dalvikvirtualmachinecouldhavemultipleinstancesononedeviceandeveryinstance
runsinaparateLinuxprocess,anAndroidapplicationrunsinaninstanceofaDalvik
virtualmachine.
•Dalvikvirtualmachinereliesontheunderlyingoperatingsystem(Linuxkernel)for
processisolation,memorymanagementandthreadingsupport.
•lowfigure(figure3-1)showsthepositionof
DalvikvirtualmachineinAndroidsystem.
DAPPLICATIONCOMPONENT
AcorefeatureofAndroidisthatoneapplicationcoulducomponentelementthat
belongtoanotherapplication(ifthecomponentispermittedusing).Inordertoachieve
suchfunctions,Androidsystemmustlaunchtheapplicationwhileanypartofthe
mostoperating
system,thereisnosinglepointthatthesystemcanenterinanAndroidapplication(for
example,therenomain()functioninanAndroidapplication).Instead,eachcomponentis
adifferentpointthroughwhichthesystemcanenteranapplicationand
instantiatecomponentobjectindependently.
pervesadistinct
purpoandhasadistinctlifecyclethatdefineshowthecomponentiscreatedand
destroyed.
Activity
ivitiesinan
基于Android技术的中国象棋人机对弈游戏的设计与实现
51
applicationworktogethertoformacohesiveurexperience,buteachoneisindependent
,
ticularformthatanactivityshow
ursandtheamountofactivitiesinanapplicationdependonhowthedeveloperdesign
tipleactivitiesapplication,typically,oneactivityisspecifiedasthe
"main"activity,whichisprentedtotheurwhenlaunchingtheapplicationforthefirst
tivitycanthenstartanotheractivityinordertoperformdifferentactions.
Eachtimeanewactivitystarts,thepreviousactivityisstopped,butthesystemprerves
theactivityinastack(the"backstack").Thefigure4-1showsthelifecycleofan
activity.[1]
Service
ArviceisanAndroidcomponentthatrunsinthebackgroundtoperform
long-runningoperationsortoperformworkforremoteprocessanddoesnotprovidea
vitycanconnectorbindarvicethatisrunning.(iftherviceis
notrunning,launchit).Whenconnectedtoarvice,theactivitycancommunicatewith
herapplication
components,rvicecomponentsalwaysrunninginthemainthreadofanapplicationby
heintensiveorblockingoperatingarviceperforms(mayslowdown
基于Android技术的中国象棋人机对弈游戏的设计与实现
52
activityperformance),itisusuallystartanewthreadinsidethervice.
ContentProviders
athat
besharedcouldinthefilesystem,aSQLitedataba,oranyotherpersistentstorage
ntproviderisimplementedasasubclassof
Contentprovider,itdefinesthedataformatitsupportedandprovidesatofmethodto
pplicationdoesnotcallthe
methodsimmediately,instead,itcallthemethodsbyanobjectnamedContentResolver.
tResolver
cooperatedwithContentProvidertomangerIPC(interprocesscommunication)while
sharingdata.
BroadcastReceivers
BroadcastReceiversisinchargeofthereceptionofsystemwidebroadcastandtake
oadcastsoriginate
fromthesystem—forexample,abroadcastannouncingthatthescreenhasturnedoff,the
ouldbeanynumberof
BroadcastReceiversinanapplicationandeachBroadcastReceiverimplementedasasub
ghbroadcastreceiversdon'tdisplayaurinterface,
theymaycreateastatusbarnotificationtoalerttheurwhenabroadcasteventoccurs.
Morecommonly,though,abroadcastreceiverisjusta"gateway"toothercomponentsand
isintendedtodoaveryminimalamountofwork.[1]
Threeofthefourcomponenttypes—activities,rvices,andbroadcast
receivers—sbindindividual
componentstoeachotheratruntimenomatterthecomponentbelongstothesame
ntcancreatewithanIntentobject,whichdefinesthemessagesby
whi
activitiesandrvices,anintentdefinestheactiontoperformandmayspecifytheURIof
adcastreceivers,theintentsimplydefinestheannouncement
ercomponenttype,contentprovider,isnotactivatedbyintents.
Rather,itisactivatedwhentargetedbyarequestfromaContentResolver.[1]
TURESOFANDROIDAPPLICATIONS
Asayoungoperatingsystem,ononehand,Androidcouldbenefitfrommature
therhand,Androidcouldalsoimprovethe
eloper’sprospective,Android
posssfollowingnewfeatures:
oid
applications,allcomponentsthatcouldbeindependentlylaunchedbysystemneedtobe
roidManifestdoesanumberof
thingsinadditiontodeclaringtheapplication’scomponents,including:
•Identifyanyurpermissionstheapplicationrequires,suchasInternetaccess.
Onlyidentifythepermissionsthatanapplicationrequires,theapplicationhavepermissions
toperformoperations.
•DeclaretheminimumAPIlevelrequiredbytheapplication.
•Declarehardwareandsoftwarefeaturesudorrequiredbytheapplication.
基于Android技术的中国象棋人机对弈游戏的设计与实现
53
•DeclareAPIlibrariestheapplicationneedstobelinkedagainst.
oid,allnoncoderesourcesare
ryresourcethatincludedinanAndroidproject,theSDK
buildtoolsdefineauniqueintegerID,whichcanbeudtoreferencetheresourcefrom
ingresources
paratefromsourcecodemakesiteasytoupdatevariouscharacteristicsofanapplication
withoutmodifyingcodeandbyprovidingtsofalternativeresourcenablesdevelopers
tooptimizetheapplicationforavarietyofdeviceconfigurations,suchasdifferent
languagesandscreensizes.
CPLAYER
Hereisasimplemusicplayer,thefourcomponentsofAndroidhavebeendefined
ainActivityisanobjectofActivityty田代皖一郎 pe,itprovidesinterfaceto
ursandcommunicateswithaServiceudtoplaymusicinbackgroundbya
layerServiceisanobjectofextensionalrvicetype,itmainly
udtoplaymusicinbackgroundandreturnplaystatuestoMnsicMainActivityby
nfoManagerisacustomclass,itpacksaContentProvidersprovidedby
bovecomponentscooperatewith
lowfigure
(figure6-1)showtheinteractivemodeamongtheabovecomponents.
Asisshowedinthefigureabove,theMusicPlayerServiceruninbackgroundreturnsall
基于Android技术的中国象棋人机对弈游戏的设计与实现
54
playstatustotheMusicMainActivityruninforegroundbybroadcast(uintentascarrier).
ABroadcastReceiverhasregisteredinMuxicMainActivitytoreceiveallbroadcastfrom
eivedbroadcastwillberesolvedbyMusicMainActivity.
Accordingtothebroadcastcontent,theMusicMainActivitywilldosomeactions(show
urstheplaystatus).Afterthemusicplayerlaunched,theMusicMainActivitywillnd
messagestoMusicInfoManagerfortheinformationofmusicfilesandthe
MusicInfoManagerwillactivateaContentProviderthatprovidedbysystem,thengetthe
musicfileslistandreturnittotheMusicMainActivity.
CONCLUSION
Androidasafull,openandfreemobiledeviceplatform,withitspowerfulfunction
andgoodurexperiencerapidlydevelopedintothemostpopularmobileoperatingsystem.
ThisarticlegivesadetailedintroductionofAndroidapplicationframeworkandthe
y,amusicplayerontheandroid
platformwasputforwardasanexampletoillustratethismechanism.
REFERENCES
[1]AndroidDevelopers,AndroidDevelopGuide,
/guide/topics/
[2]engYang,AndroidApplicationDevelopmentRevelation,ChinaMachine
Press,2010,1
[3]uoHu,JianWu,ZhenggongDeng,ProgrammingMethodology,National
DefenceIndustryPress,2008,6
[4]Ye,SoftwareEngineering,TsinghuaUniversityPress,2006,6
[5]uGeng,YueSuo,YuChen,JunWen,YongqingLu,RemoteAccessand
ControlSystemBadonAndroidMobilPhonelofComputerApplications,
2011,pp.560-562
[6],ChangweiZou,RearchonCloudComputingBadonAndroidPlatform,
reGuide,2010,pp.137-139
基于Android技术的中国象棋人机对弈游戏的设计与实现
55
翻译:
基于Android应用程序开发的研究
摘要---介绍了Android平台和Android应用程序的特征,从开发商的角度对Android
应用框架作了详细的说明。用一个简单的音乐播放器作为实例来说明Android应用程
序组件的基本工作流程。可以通过本文作为向导来了解Android应用程序的运作机制
和在Android平台上开发应用程序。
关键词:Linux内核;Android系统;应用程序框架;Dalvik虚拟机;
简介
应用框架定义了程序在特定领域里的基本结构。实质上,框架是一个可重复使用的组
件,它设置了应用程序的体系结构,并成为一组抽象类和它们实例的合作。Android
是谷歌推出的一个基于Linux内核的开源操作系统。不同于个人电脑的操作系统,手
机操作系统受硬件,存储空间,功耗和移动性等条件的约束。基于手机系统应用的开
发和PC端应用程序的开发之间还是存在一些不同的特征的。本文介绍了Android操
作系统的基本结构和应用框架,详细的描述了Android应用程序的主体结构和基于
Android应用程序框架开发的方法。
Android操作系统简介
Android是一个基于LinuxV2.6内核的交互性操作环境,同时它也是一个分
层系统,Android系统架构显示如下(图2-1)
(图2-1)
应用层由所有的Android应用程序组成。其中包括电子邮件客户端,SMS程序,
基于Android技术的中国象棋人机对弈游戏的设计与实现
56
地图,浏览器,联系人及其他。所有的应用程序都是用Java编程语言编写的。
应用框架层定义了Android应用程序框架。所有的Android应用程序都是基于
应用框架的。Android应用框架包括:
丰富及可扩展性的视图,可以用来建立一个美观的用户界面,包括列表,网格,文本
框,按钮,甚至是嵌入到Web浏览器的应用程序。
一组内容提供商,使应用程序能够访问其他应用程序的数据(如电话簿),或共享自
己的数据。
资源管理器提供了访问的非编码资源的途径,如本地化的字符串,图形,布局文件。
通知管理器允许所有应用程序显示定制的提示或通知在状态栏里。
活动管理器可以管理应用程序的生命周期,并提供一个通用的后台堆栈导航。
库层包括了一套被各类Android系统组件使用的C/C++库并对应用程序框架
提供支持。
Android的运行环境包括一套核心库和Java虚拟机(Dalvik虚拟机),已经由谷歌重
新设计和优化来适合Android平台。
Linux内核位于Android系统的底层并作为硬件和软件之间的一个抽象层。它提供了
核心系统服务,如安全,内存管理,进程管理,网络协议栈和驱动模型。此外,一些
底层功能如Dalvik虚拟机线程管理也依赖于Linux内核。
Dalvik虚拟机
如前面提到的,Android是在Linux内核上运行的,其应用程序是用Java编程语
言编写的,所以Android应用程序在名为Dalvik虚拟机的Java虚拟机上运行。谷歌
为移动设备的硬件功能进行了重新设计并优化了Dalvik虚拟机。在Android系统中,
有一个工具叫DX,是包含在AndroidSDK中的工具,能够将的Java类文件转换成
dex格式(通过一个普通的Java编译器)。dex格式文件整合了所有的Java类文件并
在每一个Java类文件中删除冗余信息。Dalvik虚拟机有几个特点:
Dalvik虚拟机可以在一个设备上有多个实例。并且每个实例运行在一个独立的
Linux进程下。
Dalvik虚拟机依赖于底层的操作系统(Linux内核)进行进程隔离,内存管理和线
程支持。
Dalvik虚拟机是基于寄存器。
下图(图3-1)显示的Dalvik虚拟机在Android系统中的位置。
(图3-1)
基于Android技术的中国象棋人机对弈游戏的设计与实现
57
Android应用程序组件
Android的一个核心功能是应用人类起源学说 程序可以使用组件元素,并且该组件可以是属于
另一个应用程序的(如果组件被允许使用)。为了实现这样的功能,当应用程序的任
何部分被请求或实例化Java对象也被请求,Android系统则必须启动应用程序。不同
于大多数的操作系统,Android操作系统没有单独的点使系统可以进入一个Android
应用程序(例如,没有main()函数在Android应用程序中)。相反,每个组件是一
个不同的点,这样,系统可以进入一个应用程序并且可以独立的初始化组件。
有四种不同类型的应用程序组件。根据每种类型服务于不同的目的并拥有不同的
生命周期来定义组件如何创建和销毁。
活动
一个活动呈现一个单一屏幕上的用户界面。一个应用程序中的活动相互协作来
形成一个整体的用户体验活动,但每一个活动相对于彼此又都是独立的。因此,不同
的应用程序可以从这些活动中的任何一个开始。一个活动是被实现为子类的活动。具
体活动显示用户的数量和大量的应用程序活动量取决开发设计中的应用形式。通常情
况下,在多个活动中的应用,一个活动被指定为“主要”活动,这是在第一次启动应
用程序时呈现给用户的一个活动。每个活动都可以启动另一个活动以执行不同的动
作。每一次开始一个新的活动,以前的活动便停止,但系统在堆栈中保留着这些停止
的活动(“后台堆栈”)。图4-1显示一个活动的生命周期。
基于Android技术的中国象棋人机对弈游戏的设计与实现
58
Activity
开始
OnCreate()
Onstart()
onResume()
Activity
运行中
另外一个
Activity启
动之前
这个activity不
在处于显示状态
OnPau()
OnStop()
OnDestroy()
Activity
终止
用户操作返回
到操作状态
进程被结束
另一个Activity
需要使用内存
OnRestart()
这个Activity
再次回到前台
这个Activity
再次回到前台
(图4-1)
服务
基于Android技术的中国象棋人机对弈游戏的设计与实现
59
服务是运行在后台执行长时间操作或执行远程操作并且不提供用户界面的
android组件。一个活动可以连接或绑定运行的服务。(如果服务没有运行,启动它)。
连接到服务的活动,可以通过外露的服务进行通信。像其他应用程序组件一样,服务
组件始终默认运行在应用程序的主线程中。因此对于密集或阻塞的操作服务执行(可
以减慢活动的性能),它通常是启动服务里的新线程。
内容提供商
内容提供商提供应用程序之间的数据共享机制。这种被共享的数据可以在文件系
统中一个SQLLite数据库中或者是可以访问其他任何持久性存储位置的应用程序。
内容提供商作为内容提供商的一个子类来实现,它定义了它的支持,提供了一套方法
使其他应用程序查询或修改数据的数据格式。但是应用程序不立即调用这些方法;相
反,它调用这些方法的对象命名内容解析。内容解析器可以在每个内容提供商之间交
流。在数据共享时内容解析器与内容提供商管理IPC(进程间的通信)。
广播接收机
广播接收机负责系统范围的广播接收和响应针对广播传送的信息。许多广播起
源于系统-----例如,广播宣布屏幕已关闭,电池电量低。应用程序也可以启动广播。
可能有许多广播接收机在一个应用程序中并且每个广播接收机的实现作为广播接收
机的子类。虽然广播接收机不显示用户界面,他们可以创建状态栏通知,提醒用户当
广播事件发生。更常见地是相对于其他组件,广播接收机只是是一个“网关”并被用
于做非常少量的工作。
四分之三的组件类型,即活动,服务,和广播接收机被命名为意图并被异步消
息激活。意图在运行时彼此结合单个组件无论组件是否属于相同的应用。意图可以用
一个Intent对象创建,它定义的消息可以激活一个特定的组件或一种特定类型的组件。
对于活动和服务,意图定义要执行的操作和行动数据可能会指定的URI。对于广播接
收机,意图是只定义消息被广播。其他类型的组件,内容提供商,没有被激活的意图。
相反,它被激活时,有针对性的从内容解析请求对象。
Android应用的新特点
作为一个新的操作系统,一方面,Android可以受益于其他的成熟的操作系统的
技术。另一方面,Android也会改善出现在其他操作系统上的缺陷。对于开发商的前
瞻性,Android系统具有以下新的特点:
允许一个应用程序被明确的定义。Android应用程序中,所有的组件可以通过系
统独立启动,不过需要在一个XML文件名为AndroidManifest的文件中被声明。
AndroidManifest做许多另外声明应用的组件的东西,包括:
定义一些应用所需要的用户权限,如互联网接入。仅定义应用程序需要的权限和应用
程序必须执行的操作权限。
声明应用程序所需的最低API级别。
定义硬件和软件的使用或应用程序所需的功能。
声明API函数库的应用需要被对应的链接。
资源和代码是分开的。在Android中,所有的非代码资源是在XML文件中定义。对
基于Android技术的中国象棋人机对弈游戏的设计与实现
60
于每一个包括在Android项目中的资源,SDK构建工具定义一个唯一的整数ID,它
可以用来参考从应用程序代码的资源或从XML文件中定义其他资源。提供单独的资
源可以从源代码中很容易地更新应用程序的不同特性,从而无需修改代码。同时通过
提供一套替代资源集,使开发人员能够针对各种设备配置优化中的应用,如不同的语
言和屏幕尺寸。
一个音乐播放器
这里是一个简单的音乐播放器,Android的四个组成部分已被定义在这个例子。
MusicMainActivity是一个活动类型的对象,它提供用户接口,用于通过广播接收机
在后台播放音乐服务通信。MusicMainActivity是伸展的服务类型的对象,它主要用
来通过后台播放音乐和回放。MusicInfoManager是一个自定义的类,它配备了一个内
容提供商,获得音乐信息系统提供的闪存卡。通过上述部件相互配合,可以实现在
Android平台上播放音乐的功能。下图(图6-1)显示上述组件之间的交互模式。
(图6-1)
如上图中显示,在后台运行MusicPlayerService返回所有播放状态通过广播的前
景MusicMainActivity运行(使用意图为载体)。广播接收机已注册的
MuxicMainActivity收到MusicPlayerService所有广播。接收到的广播将通过
MuxicMainActivity被解决。根据广播内容,该MuxicMainActivity会做一些动作(用
户显示播放状态)。音乐播放器推出后,该MuxicMainActivity将消息发送到
MusicInfoManage音乐文件并且MusicInfoManage将激活由系统提供ContentProvider,
然后得到音乐文件列表并返回到MuxicMainActivity。
基于Android技术的中国象棋人机对弈游戏的设计与实现
61
结论
Android作为一个完整的,开放的和自由的移动设备平台,凭借其强大的功能和
良好的用户体验迅速发展成为最流行的移动操作系统。本文给出了关于Android应用
框架和Android应用程序的主要工作的详细介绍。最后,推出了android平台上的音
乐播放器作为一个例子来说明了这个机制。
参考
[1]谷歌Android开发者,Android的编程指南,
/guide/topics/
[2]冯胜阳,Android应用开发的启示,中国机械工业出版社,2010,1
[3]吴健,胡振国,邓郑工,编程方法论,国防工业出版社,2008,6
[4]叶军民,软件工程,清华大学出版社,2006,6
[5]耿东氿,索阅,陈瑜,文军,陆永清,基于在Android手机远程访问和控制系
统第二版。计算机应用杂志,2011,第560-562页
[6]林莉,周常伟,基于Android平台的有关云计算研究,第11卷。软件指南,2010,
pp.137-139
本文发布于:2023-03-23 06:10:07,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679523009352450.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:中国象棋对弈.doc
本文 PDF 下载地址:中国象棋对弈.pdf
留言与评论(共有 0 条评论) |