基于Android的中国象棋的设计与实现毕业论文

上传人:仙*** 文档编号:146275204 上传时间:2022-08-30 格式:DOC 页数:38 大小:3.37MB
收藏 版权申诉 举报 下载
基于Android的中国象棋的设计与实现毕业论文_第1页
第1页 / 共38页
基于Android的中国象棋的设计与实现毕业论文_第2页
第2页 / 共38页
基于Android的中国象棋的设计与实现毕业论文_第3页
第3页 / 共38页
资源描述:

《基于Android的中国象棋的设计与实现毕业论文》由会员分享,可在线阅读,更多相关《基于Android的中国象棋的设计与实现毕业论文(38页珍藏版)》请在装配图网上搜索。

1、实 训 报 告实训项目名称基于Android象棋游戏的开发与测试二 级 学 院 信息工程学院 专 业 班 级 11级计科(2)班 姓 名 完圆圆、李城城、孙超、胡迪 学 号 1142151221、14、20、08 日 期 2014-11-19 项目名称基于安卓象棋游戏的开发与测试地点教13 603报 告 内 容在本报告中,首先介绍了安卓的现状以及开发的相关知识,其次是关于开发游戏过程中用到的开发工具和系统的运行环境配置等。通过对Android系统架构和应用开发进行初步研究,设计一款中国象棋游戏。在对系统进行详细需求分析的基础上,确定了系统的功能和性能要求,对游戏的菜单界面、屏幕绘制、时间控制、

2、布局算法和动画等进行了设计,并最终实现了一个界面友好、高效稳定和富有娱乐性的手机益智游戏。最后,实现的是对本次游戏的测试并列举了测试用列以及给出了测试结果。教师评语成绩: 教师签名: 摘 要 中国象棋是一款智力休闲游戏,具有历史悠久而且拥有巨大的游戏爱好者群体,他们以中国象棋陶冶情操、锻炼智力、体验象棋带来的快乐,中国象棋还是一个老少皆宜的娱乐游戏。随着手持设备、智能手机的普及,搭载Android操作系统的智能手机也已经走进了千家万户,当人们闲暇偶尔需要娱乐时,却发现没有实物象棋,该软件不失为一个很好的替代品,供大家进行娱乐享受,尤其是在现在这个快节奏的社会中 ,人们更满足于手机的使用,可以方

3、便地随意移动,不像实物象棋那样静静的坐着。 本论文通过实际应用软件的开发深入分析和研究Android开发技术。实现中国象棋的人机会话。本文实现了中国象棋在计算机中表示问题,基于Android平台应用,人机对战模拟现实中的人人对战;讨论走棋规则和着法的实现等一系列问题,最终电脑能够通过产生着法,搜索,估计来产生一步最优的走棋,实现人机会话的目的。关键字:中国象棋,Android,智能手机,人机对战目录1 绪论11.1 研究背景11.2 本论文研究意义32 游戏系统开发平台及搭建42.1 JDK和 Eclipse:42.2 Android SDK42.3 ADT53 系统分析63.1 可行性研究6

4、3.2 界面的需求分析63.3 游戏走棋需求设计分析64 游戏系统的设计与实现74.1 类框架的设计74.2 共有类ChessActivity的实现84.3 辅助界面相关类的实现84.4 游戏界面相关类的实现94.5 中国象棋的规则及走法的实现104.6 游戏人机对战的实现184.7 系统流程图195 运行测试205.1 测试用例表205.2 测试结果206 小结23参考文献24附录:251 绪论1.1 研究背景(1) 中国象棋背景中国象棋发展至今已有两千三、四百年的历史,早在战国时期就有正式的记载,堪称中国的国粹。中国象棋具有悠久的历史,深的人们的喜爱,象棋的爱好者也更是数不胜数,远在战国中

5、国象棋便在贵族阶层广为流传,早期的象棋是象征着当时战斗场面的游戏,后来这种观念慢慢被改变,经过千年的流传不断的完善和改进,成为人们休闲娱乐、锻炼脑力思维不可获取的好方式。中国象棋体现的是一种策略,方寸之间包含天地玄机,人生哲理,使人越是细玩越觉其味悠然深远。由于简单的行棋规则,趣味性强,便捷的载体,使得象棋成为雅俗共赏的竞技项目。因此,也成为流行极为广泛的棋艺活动。是我国正式开展的78个体育项目之一,为促进该项目在世界范围内的普及和推广,在中国古代,象棋被列为士大夫们的修身之艺,现在则被视为怡神益智的一种有益的活动。有着数以亿计的爱好者。它不仅能丰富文化生活,陶冶情操,在棋战中,人们可以从攻与

6、防、虚与实、整体与局部等复杂关系的变化中悟出某种哲理;更有助于开发智力,启迪思维,锻炼辨证分析能力和培养顽强的意志。(2) Android系统简介Android 系统构架简介:Android是一个基于LinuxV2.6内核的交互性操作环境,同时它也是一个分层系统,Android系统架构显示如下图1.1。图1.1系统架构图 应用层由所有的Android应用程序组成。其中包括电子邮件客户端,SMS程序,地图,浏览器,联系人及其他。所有的应用程序都是用Java编程语言编写的。 应用框架层定义了Android应用程序框架。所有的Android应用程序都是基于应用框架的。Android应用框架包括:l

7、丰富及可扩展性的视图,可以用来建立一个美观的用户界面,包括列表,网格,文本框,按钮,甚至是嵌入到Web浏览器的应用程序。 l 一组内容提供商,使应用程序能够访问其他应用程序的数据(如电话簿),或共享自己的数据。l 资源管理器提供了访问的非编码资源的途径,如本地化的字符串,图形,布局文件。l 通知管理器允许所有应用程序显示定制的提示或通知在状态栏里。l 活动管理器可以管理应用程序的生命周期,并提供一个通用的后台堆栈导航。 库层包括了一套被各类Android 系统组件使用的C / C + +库并对应用程序框架提供支持。 Android 的运行环境包括一套核心库和 Java 虚拟机(Dalvik虚拟

8、机),已经由谷歌重新设计和优化来适合Android平台。 Linux 内核位于 Android 系统的底层并作为硬件和软件之间的一个抽象层。它提供了核心系统服务,如安全,内存管理,进程管理,网络协议栈和驱动模型。此外,一些底层功能如 Dalvik 虚拟机线程管理也依赖于Linux内核。1.2 本论文研究意义 中国象棋是一项智力和策略的游戏,以往都是人和人下棋,现在有了计算机我们可以和计算机竞技,人可以与计算机进行对弈。控制计算机的是人类,而人机会话综合性很强的一门边缘学科,它的中心任务是研究使计算机如何去做那些过去只能靠人的智力才能做的工作。因此,对游戏开发过程中的人工智能技术的研究自然也就成

9、了业界的一个热门研究方向。 本次论文的研究,主要是对中国象棋在Android系统中的兼容行性,对游戏界面可观性,游戏中人机会话的研究。对于游戏中的人机会话的要点:a 某种在及其上表示棋局的方法,让程序知道会话的状态;b 产生合法的走棋法则,使得会话双方公正,并可以判断人类对手是否乱走;c 从所有和法定的走法中选择最佳的走法的技术;d 一种评估局面优化的方法,同上面技术配合做出智能选择;e 一个实现游戏的界面;通过对游戏的设计,来实现游戏中棋牌的表示,着法的生成,对着法的搜索,最后对局面的评估来实现中国象棋的人机会话。2 游戏系统开发平台及搭建2.1 JDK和 Eclipse:JDK是Sun公司

10、针对java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的java SDK。JDK是整个java的核心。包括运行环境Java工具和Java基础类库。JDK是学好Java的第一步。安装Eclipse的开发环境需要JDK的支持,如果没有JDK,则启动Eclipse时会报告错误。在windows上安装JDK非常简单首先在Sun官网上下载,按照默认路径进行安装。安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java version 查看JDK的版本信息。出现类似下面的画面表示安装成功了:图 2.1 JDK测试Eclipse如果你还没有Eclipse的话,从官网上下载E

11、clipse IDE for Java Developers解压之后即可使用。2.2 Android SDKAndroidSDK 提供了在 windows 平台上的开发安卓应用程序的开发组件,也就是说,不论读者使用什么样的平台都可以开发出安卓平台的应用软件,其中包含了安卓平台上开发移动应用的各种工具集。它不仅包括了安卓模拟器和用于Eclipse的安卓开发工具插件(ADT),而且包括了各种用来调试,打包盒在模拟器上安装应用的工具。安卓主要是以 java 语言为基础,用户可以使用 java 语言来开发 安卓平台上的软件应用。通过SDK提供的一些工具将其打包成安卓平台使用的apk文件,然后在使用SD

12、K中的模拟器(Emulator)来模拟和测试软件在安卓平台运行情况和效果。安装安卓的SDK,安装好JDK和Eclipse后,打开Eclipse IDE。依次单击Menu项中的windows-Android SDK Manager项,进入Android SDK Manager界面选择Tool和需要的Android版本项进行更新安装。2.3 ADTAndroid为Eclipse定制了一个插件,及ADT(Android Development Tools),目的是为用户提供一个强大的综合环境用于开发Android应用程序,ADT扩展了Eclipse的功能,可以让用户快速的建立Android项目,创建

13、应用程序界面,在基于Android API的基础上添加组件,以及用SDK工具集调试应用程序,甚至导出签名(或未签名)的APKs以便发行应用程序。安装Android Development Tool plug-in,打开 Eclipse IDE。依次单击Menu项中的Help-Software Update项3 系统分析3.1 可行性研究本次实训的题目是:基于Android象棋游戏的开发与测试;主要是在基于Android平台开发一个手持设备应用游戏,使得游戏具有兼容性和人机对战;并对整个系统分析,设计过程给出一个论证。中国象棋游戏是棋牌类游戏,体现的是一种策略。对于行棋走棋不同的棋子有不同走棋规

14、则,走棋都必须按照走棋规则要求,双方轮换走棋,吃子,将军。本游戏设计无疑是模拟现实人人博弈,虚拟的替换了真实的棋子棋盘,由人来和电脑直接对弈;在一个人闲暇时也可以体验博弈的乐趣。该应用游戏的设计主要从以下几方面做起:系统流程分析、系统的功能设计、系统的数据结构设计。做好这些工作需要对Android开发平台了解,并搭建平台;深入了解数据结构、Android应用程序以及各种组件(API)库函数。3.2 界面的需求分析 通过以往手持设备游戏的体验,和用户对中国象棋游戏需求逻辑,游戏的功能以及操作方法把整个设计划分成单元;先是运行游戏,进入欢迎游戏界面,随后单击欢迎界面的图片进入菜单界面,在菜单中可以

15、点击“打开声音”/“关闭声音”按钮来控制声音开关,单击“帮助”菜单可以进入帮助界面显示游戏操作方法,而在菜单界面单击“开始游戏”菜单将进入游戏主界面开始游戏,在游戏界面玩家可以通过单击自己的棋子按照行棋规则来走棋,同时可以单击声音按钮打开关闭声音,当游戏一方的“将”或者敌方的“帅”被吃掉是,会出现游戏失败或游戏胜利的界面,在游戏过程中玩家可以随时通过单击“退出”按钮返回到游戏主菜单,主菜单中还可以点击“退出游戏”结束关闭游戏。3.3 游戏走棋需求设计分析进入游戏界面,游戏提示当前走棋为“帅”或者“将”,双方各走一着,直至分出胜负或者直接点击退出结束游戏,轮到走棋的一方,将某个棋子从一个交叉点走

16、到另一个交叉点,或者吃掉对方的棋子而占领其交叉点,都算走一着,双方各走一着即一个回合,吃子时,任何棋子走动,如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘,即屏幕上消失在显示自己的棋子。玩家走完棋后电脑相对应搜索出自己相对应的走法。程序需要让计算机在轮到它走子的时候能够执行一步它认为最有利的着法,而不是乱走;那么它就要有在诸多可供选择的着法,提供所有候选着法的列表就是着法生成器所要完成的。之后用搜索函数来搜索列表,并用局面评估函数逐一打分,最后就可以选择出最佳着法并执行。4 游戏系统的设计与实现4.1 类框架的设计通过对中国象棋游戏的了解,对基于Android技术的中国象棋人机对弈游戏

17、的需求分析,游戏实现的理解并结合自己对知识点所掌握的程度;对中国象棋游戏总体设计,主要由三个类组成:共有类,辅助界面相关类,游戏界面相关类。共有类是Activity的实现类ChessActivity,该类是通过扩展基类Activity得到的,是整个游戏的控制器,也是整个游戏程序的入口;辅助界面相关类由WelcomeView欢迎界面类(该类为游戏欢迎界面的实现类,主要负责欢迎界面的绘制工作),HelpView帮助界面类(该类为帮助界面的实现类),MenuView菜单界面类(该类为菜单界面的实现类,负责绘制菜单界面以及对菜单界面的屏幕进行监听)三个类实现;游戏界面相关类由GameView游戏界面类

18、(该类为游戏程序中最主要的类,负责绘制游戏过程中所有的信息,如棋盘、棋子、各个按钮以及胜利或失败菜单等),GuiZe象棋规则类(该类是象棋规则的实现类,其中包含所有棋子的走棋规则以及当前棋牌所有可能走法),ChessMove走法类(该类为棋子的走法的封装类,包括棋子的名称,出发点以及目标点)。之间关系如图4.1所示:图4.1游戏类图4.2 共有类ChessActivity的实现该类的主要作用是通过接受Handler消息变量,根据各个界面发送的Handler消息的类型判断所需要执行的操作。在适当的时间初始化相应的用户界面,各个界面初始化方法被调用时,并根据其他界面的需求直接将用户界面切换到相应的

19、界面4.3 辅助界面相关类的实现该游戏的第一个用户界面即欢迎界面如图4.2所示,通过WelcomeView类来实现该界面加载了一个欢迎中国象棋图片,并通过监听菜单图片,向Activity发送Handler消息通知控制器切换用户界面;然后切换到菜单界面MenuView。图 4.2 游戏欢迎界面 MenuView类中通过监听“开始游戏”切换到游戏界面;通过监听“打开声音”/“关闭声音”进行声音的打开与关闭,与此同时“打开声音”、“关闭声音”按钮进行切换;通过监听“帮助”来切换都帮助界面;通过监听“退出游戏”结束游戏用行退出游戏。帮助界面HelpView,该类中加载图片,图片中显示该游戏“怎么玩”同

20、时监听“返回”按钮,向Activity发送Handler消息通知控制器切换用户界面从而返回到菜单界面,如图4.3所示。图 4.3 菜单界面4.4 游戏界面相关类的实现游戏界面GameView,该类是整个程序中最主要的类,该类首先是绘制屏幕上的内容棋盘和对应的棋子。提示一方先走;当“黑帅”或者“红将”被吃的话,弹出您赢了或者您输了通过监听结束游戏切换到菜单界面。或者点击退出按钮也可结束游戏切换至菜单界面。监听声音按钮来控制声音的开与关并以红色显示声音开,消失即为关,如图4.4所示。图4.4游戏界面4.5 中国象棋的规则及走法的实现(1) 行棋规则中国象棋分为红黑双方,以楚河汉界为分界线,双方各执

21、16字,分别为2车2马2相2仕2炮1将5卒,各自走法不同,具体如下:马:只可以走“日”字方格,因此一匹马的最理想落子点有8个,但存在绊马腿的情况,即从马的位置到要走到的目标位置,顺着此方向,“日”字方格有两个方向,即两格长度和一个长度,马紧挨的两格长度方向的位置不能有子,否则即被绊住,不能走动。若目标位置为空,即可走过,若为对方的棋子,即可吃掉。图4.5马的走法红黑马规则走法的介绍:case 10:/红马 case 3:/黑马if(!(Math.abs(toX-fromX)=1 & Math.abs(toY-fromY)=2)| (Math.abs(toX-fromX)=2 & Math.ab

22、s(toY-fromY)=1)return false;/马走的不是日字时if(toX-fromX=2)/向右走i=fromX+1;/移动j=fromY;else if(fromX-toX=2)/向左走i=fromX-1;/移动j=fromY;else if(toY-fromY=2)/向下走i=fromX;/移动j=fromY+1;else if(fromY-toY=2)/向上走i=fromX;/移动j=fromY-1;if(qiziji != 0)return false;/绊马腿break;炮:只可以走直线,且一步可以走任意距离,其起始点与目标点之间不得存在其他棋子。炮吃子的条件是与目标棋

23、子在一条直线上,且两子之间必须有且只有一个棋子作为“跳板”,让炮进行跳跃式攻击。红黑炮规则走法的介绍:图4.6炮的走法case 11:/红砲case 4:/黑炮if(fromY!=toY & fromX!=toX)/炮走直线return false;/返回falseif(qizitoYtoX = 0)/不吃子时if(fromY = toY)/横线if(fromX toX)/想右走for(i = fromX + 1; i toX; i+)if(qizifromYi != 0)return false;/返回falseelse/向走走for(i = toX + 1; i fromX; i+)if(

24、qizifromYi!=0)return false;/返回falseelse/竖线if(fromY toY)/向下走for(j = fromY + 1; j toY; j+)if(qizijfromX != 0)return false;/返回falseelse/向上走for(j = toY + 1; j fromY; j+)if(qizijfromX != 0)return false;/返回falseelse/吃子时int count=0;if(fromY = toY)/走的是横线if(fromX toX)/向右走for(i=fromX+1;itoX;i+)if(qizifromYi!=

25、0)count+;if(count != 1)return false;/返回falseelse/向左走for(i=toX+1;ifromX;i+)if(qizifromYi != 0)count+;if(count!=1)return false;/返回falseelse/走的是竖线if(fromYtoY)/向下走for(j=fromY+1;jtoY;j+)if(qizijfromX!=0)count+;/返回falseif(count!=1)return false;/返回falseelse/向上走for(j=toY+1;j4)/不能过河return false;if(Math.abs(f

26、romX-toX) != 2 | Math.abs(fromY-toY) != 2)/相走“田”字return false;if(qizi(fromY+toY)/2(fromX+toX)/2 != 0)return false;/相眼处有棋子break;case 13:/红相if(toY2|toX5)/出了九宫格return false;if(Math.abs(fromY-toY)+Math.abs(toX-fromX)1)/只能走一步return false;break;case 8:/红将if(toY5|toX1)/只能走一步return false;break;(2) 棋盘的表示针对棋盘

27、的设计,每一种棋子对应一个固定的值用以识别该棋子的类型,那么设计就根据红黑双方的棋子以及每个类型的棋子,设计规则类(GuiZe类,调用其中的canMove方法用以判断某一步走棋的是否可行。规则类的设计则采用了常规的办法,因为棋子的种类只有7种,且红黑双方处于棋盘的两端,某些棋子走动时的方向不一样,设计时就要进行分类讨论设计,供存在14中不同的判别方法来对所以的棋子走法进行判别是否可行,每一个判别方法都对应于其独有的判断算法。棋盘上各种棋子以及棋盘的初始布局的设计采用10*9的数组来进行标识,如下图4.9所示 : 图 4.9棋盘初始布局各个数字的对应关系如下:0-无棋子;1-黑方的帅;2-黑方的

28、车;3-黑方的马;4-黑方的炮;5-黑方的士;6-黑方的象;7-黑方的卒;8-红方的将;9-红方的车;10-红方的马;11-红方的炮;12-红方的士;13-红方的相;14-红方的兵。坐标(0,0)到坐标(8,4)之间的坐标代表楚河汉界的一方,坐标(0,5)到坐标(8,9)之间的坐标代表楚河汉界的另一方,即红黑双方各自的领土。电脑走棋时通过构造一个走法类ChessMove,创建一个对象调用NegamaxEngine类中的Search()函数根据当前局势查询一个最好的走法记录棋子的原有位置坐标、目标位置坐标、棋子类型并对该对象进行初始化。然后根据该对象记录的原有位置坐标和目标位置坐标进行数据改变达

29、到行棋目的。玩家走棋是通过对屏幕进行监听,从而记录棋子类型,原有位置坐标和目标位置坐标,通过调用规则类GuiZe中的CanMove判断该棋子走法是否可行符合棋子走棋规则,可行就改变原有位置和目标位置数据,达到行棋的目的轮到走棋的一方,游戏界面当前位置显示走棋一方的“黑帅”或者“红将”,将某个棋子从一个交叉点走到另一个交叉点,或者吃掉对方的棋子而占领其交叉点,这样一方走棋结束当前位置显示改变轮到另一方走棋。任何棋子走动,如果目标位置上有对方的棋子,就可以把对方的棋子拿出棋盘,即在10*9数组中相应位置的数字变为自己棋子所对应的数字,自己棋子原来所在的位置对应数组的数字变为0,刷帧线程不断的刷新界

30、面改变屏幕显示,这样对方的棋子就被吃掉,在屏幕上消失在对应显示自己的棋子;如果目标位置上没有对方棋子,10*9数组对应目标位置数字改变,原有位置数字变为0,刷帧线程更新界面改变显示。4.6 游戏人机对战的实现(1) 首先产生所有可能的走法,定义一个ArrayList容器,把可能的走法放入ArrayList容器里面。public List allPossibleMoves(int qizi)/产生所有可能的走法 List ret = new ArrayList();/用来装所有可能的走法 for (int x = 0; x 10; x+) for (int y = 0; y 7)/是红方,即是玩

31、家棋子时跳过 continue; . return ret.isEmpty() ? null : ret;/当ret中没有走法时,返回空,有时返回ret(2) 利用随机数从容器中取出一种走法,完成移动。public ChessMove searchAGoodMove(int qizi)/查询一个好的走法List ret = allPossibleMoves(qizi);/产生所有走法try Thread.sleep(1000);/睡眠四秒钟,以便调试 catch (InterruptedException e) /捕获异常e.printStackTrace();/打印堆栈信息return re

32、t.get(int)(Math.random()*ret.size();4.7 系统流程图游戏流程图如图4.10所示图4.10系统流程图5 运行测试5.1 测试用例表测试编号测试目标期望结果实际结果001测试象棋“马”是否“绊马腿”游戏过程中,“马”在绊马腿情况下不能移动。能实现“绊马腿”002测试一方棋子能否被另一方吃掉,并消失棋子被吃后消失,吃子的棋子能代替被吃棋子的位置一方棋子能被另一方吃掉,并消失003测试对手的象棋“将”能否被将死,能结束游戏对手的象棋“将”被将死,并出现提示“你赢了” ,结束游戏对手的象棋“将”被将死,能结束游戏004测试象棋“炮”是否能隔子吃掉对手的棋子,即“炮打

33、隔子”“炮”隔子吃掉对手棋子“炮”能“炮打隔子”005测试游戏棋子是否能移动棋子从一个到另一个位置游戏棋子能移动006不同分辨率模拟器能否正常运行能够正常运行不能正常运行007能否对将可以对将不能对将5.2 测试结果(1) 测试001“马”是否“绊马腿”测试结果如图5.1所示图5.1测试绊马腿(2) 测试002一方棋子能否被另一方吃掉测试结果如图5.2所示图5.2测试吃子(3) 测试003“将”能否被将死测试结果如图5.3所示图5.3测试能否赢棋(4) 测试003“将”能否被将死测试结果如图5.4所示图5.4测试对将(5) 测试006不同分辨率模拟器能否正常运行如图5.5所示图5.5测试不同分

34、辨率模拟器6 小结三周的Android实训,已接近尾声。在这短暂的三周之内,有成功有失败;有喜悦有心酸。在实训老师的带领下,我学到了很多。我们小组在老师的协助下最终成功的完成实训项目。在这次实训中让我学到了,对于每一个项目开发,都需端正态度,量力而行,发挥自己的长处,这样不仅有利于促进团队项目开发的进度,还有利于把自己代入这个项目中。当自己融于这个项目时,就能多思考。这样是一个自我学习的过程,这里本来不会做,但是经过这个项目或这个模块后,这里也就会了,把不会的变成会的,把别人的知识变成自己的,这才是会学习。通过为期三周的Android实训,这次的实训让我学到了很多知识。在项目中,除了让我明白工

35、作中需要能力,素质,更重要的是学会如何去完成一个任务,懂得了享受工作。当遇到问题时要冷静去想办法一点一点的排除障碍,到最后取得成功,一种自信油然而生,这就是工作的乐趣。有时候也需要虚心请教,从别人身上能够学到自己没有的知识,每一次的挫折只能使我们更接近成功。在这次项目中让我体会到了团队合作的重要性,团队合作注重沟通和信任,不能不屑于做一些小事,永远要保持亲和诚信,把专业理论运用到具体实践中,不仅加深我对理论的掌握和运用,这是实训中最大的收获。刚开始接触Android感觉到他很有意思,在界面开发和web也可以形成想通的架构,更加方便,视觉上也非常的酷,前期我通过大量的Android SDK开发范

36、例和Android提供的API文档中学习,通过这些例子的学习我从中发现了很多和以前Java相同的思想。在这为期三周的实训中让我学到了很多课堂上学不到的知识,让我基本掌握了Android应用程序开发的一般流程。对常用控件基本掌握使用,对其事件的监听也基本掌握。学习Android不仅是对前沿开发技术的了解,也是对编程知识的一次提升。通过学习Android的控件、布局、Activity、Service等一系列基础知识,对整个Android的开发有了大致的了解。通过这次的实训,让我学到了很多,因为我们都是第一次接触Android,所以老师先给我们讲的每一个程序我们都去认真编写,通过这些小程序,让我们知

37、道了如何去创建一个Android项目,了解了Android项目里的每一个文件夹和文件的作用。在这次项目中让我体会到了团队合作的重要性,团队合作注重沟通和信任。同时还让我知道做任何事都需端正态度,量力而行,发挥自己的长处,这样不仅有利于促进团队项目开发的进度,还能让我们知道我们自己的位置。总之在这次的实训中让我学到了知识,同时也让我学到了经验,这让我在以后的工作中有重大帮助。参考文献1 刘敏.移动终端的Android移植与应用程序设计D. 西安电子科技大学 2011 2 王蕾.哈尔滨招行Android手机银行汇率换算模块的设计与实现D. 吉林大学 2011 3 施金兰.基于Android平台的网

38、络共享研究与实现D. 华东师范大学 2011 4 赵建勋.基于Android平台的移动位置服务的开发与实现J. 现代商贸工业. 2010(20) 5 李林涛,朱珊虹.基于Android系统的手机游戏黑白棋的设计与实现J. 新乡学院学报(自然科学版). 2011(03) 6 丛秋波.用于Android手机操作系统的视频引擎J. 电子设计技术. 2010(07) 7 郭国勇.Android启动过程优化研究D. 兰州大学 2012 8 摆云.基于Android开放平台和无线通信网络的实时音视频传输系统设计与实现D. 兰州大学 2012 9 刘牛.基于Android平台的数字电视机顶盒模拟器的研究与开

39、发D. 兰州大学 2012 10 王康.Android RIL研究及其在无线通讯模块上的实现D. 太原科技大学 2012 附录:ChessActivity.javapackage com.example.chessgame;import android.app.Activity;/引入相关的包import android.media.MediaPlayer;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.Window;import android.v

40、iew.WindowManager;public class ChessActivity extends Activity boolean isSound = true;/是否播放声音MediaPlayer startSound;/开始和菜单时的音乐MediaPlayer gamemusic;/游戏声音Handler myHandler = new Handler()/用来更新UI线程中的控件 public void handleMessage(Message msg) if(msg.what = 1)/WelcomeView或HelpView或GameView传来的消息,切换到MenuVie

41、w initMenuView();/初始化并切换到菜单界面 else if(msg.what = 2)/MenuView传来的消息,切换到GameView initGameView();/初始化并切换到游戏界面 else if(msg.what = 3)/MenuView传来的消息,切换到HelpView initHelpView();/初始化并切换到帮助界面 ; public void onCreate(Bundle savedInstanceState) /重写的onCreate super.onCreate(savedInstanceState);/全屏requestWindowFeat

42、ure(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN , WindowManager.LayoutParams.FLAG_FULLSCREEN);startSound = MediaPlayer.create(this, R.raw.startsound);/加载欢迎声音startSound.setLooping(true);/设置游戏声音循环播放 gamemusic = MediaPlayer.create(this, R.raw.gamemusic);/游戏过

43、程的背景声音gamemusic.setLooping(true);/设置游戏声音循环播放 this.initWelcomeView();/初始化欢迎界面 public void initWelcomeView()/初始化欢迎界面 this.setContentView(new WelcomeView(this,this);/切换到欢迎界面 if(isSound)/需要播放声音时 startSound.start();/播放声音 public void initGameView()/初始化游戏界面 this.setContentView(new GameView(this,this); /切换到

44、游戏界面 public void initMenuView()/初始化菜单界面 if(startSound != null)/停止 startSound.stop();/停止播放声音 startSound = null; if(this.isSound)/是否播放声音 gamemusic.start();/播放声音 this.setContentView(new MenuView(this,this);/切换View public void initHelpView()/初始化帮助界面 this.setContentView(new HelpView(this,this);/切换到帮助界面 C

45、hessMove.javapackage com.example.chessgame;/* * 该类为棋子的一个走法 * 包含是什么棋子 * 起始点的位置 * 目标点的位置 * 以及估值时所用到的score */public class ChessMove int ChessID;/表明是什么棋子int fromX;/起始的坐标int fromY;int toX;/目的地的坐标int toY;int score;/值,估值时会用到public ChessMove(int ChessID, int fromX,int fromY,int toX,int toY,int score)/构造器thi

46、s.ChessID = ChessID;/棋子的类型this.fromX = fromX;/棋子的起始坐标this.fromY = fromY;this.toX = toX;/棋子的目标点x坐标this.toY = toY;/棋子的目标点y坐标this.score = score;SearchEngine.javapackage com.example.chessgame;public class SearchEngine /表示棋盘棋的分布 public static int m_curPosition = new int109; /记录最佳走棋 public static ChessMov

47、e bestMove = new ChessMove(); /走法产生七器33 public static GuiZe moveGen = new GuiZe(); /估值产生器 public static Eveluation m_eve = new Eveluation(); /搜索深度 public static int m_searchDepth; /当前搜索深度 public static int m_maxDepth; /移动棋子 public static void searchAgoodMove(int position) public static int makeMove(

48、ChessMove data) int chessID;chessID = m_curPositiondata.toYdata.toX; m_curPositiondata.toYdata.toX = m_curPositiondata.fromYdata.fromX; m_curPositiondata.fromYdata.fromX = ConstData.NOCHESS; return chessID; /判断游戏时候结束 public static int isGameOver(int position, int depth) int i, j; boolean redLive = f

49、alse, blackLive = false; for(i = 0; i 3; +i) for(j = 3; j 6; +j) if(positionij = 1) blackLive = true; for(i = 7; i 10; +i) for(j = 3; j 6; +j) if(positionij = 8) redLive = true; i = (m_maxDepth - depth + 1 )%2;/取当前奇偶标志 if(!redLive)/红将不在了 if(i != 0) return 19990 + depth; else return -19990-depth; if(

50、!blackLive) if(0 != i) return -19990-depth; else return 19990+depth; return 0;/两将都在,返回0 /取消移动 public static void unMakeMove(ChessMove move, int chessID) m_curPositionmove.fromYmove.fromX = m_curPositionmove.toYmove.toX; m_curPositionmove.toYmove.toX = chessID; NegamaxEngine.javapackage com.example.c

51、hessgame;public class NegamaxEngine extends SearchEnginepublic NegamaxEngine()public static ChessMove Search(int position)searchAgoodMove(position);return bestMove;public static void searchAgoodMove(int position) m_maxDepth = m_searchDepth; int i, j; for(i = 0; i 10; +i) for(j = 0; j 9; +j) m_curPositionij = positionij; negaMax(m_maxDepth); /调用负极大值搜索引擎 try Thread.sleep(4000); catch (InterruptedException e) / TODO Auto-generated catch block

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