毕业答辩-基于JAVA的中国象棋系统设计.ppt

毕业答辩-基于JAVA的中国象棋系统设计.ppt

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 基于JAVA中国的象棋 题 目:基于JAVA的中国象棋 指导老师: 制 作 人: 学 院: 软件工程 专业班级: 软件1024班 完成时间: * * 关于中国象棋 中国象棋是由两人下的。 一方称为红方(或白方), 一方称为黑方。对局时由 红方先走,黑方后走,一 次一着,双方轮流走棋, 直到对局结束为止。 * * 开发中国象棋对弈软件的必要性 象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的 范例,一个是象棋棋谱编辑和对弈程序的公共平台——WinBoard平台,另 一个是商业的国际象棋数据库和对弈软件——ChessBase,他们为国际象 棋爱好者和研究者提供了极大的便利。国际象棋软件有着成功的商业运作 ,已发展成一种产业。然而,电脑在中国象棋上的运用还刚刚起步,尽管 国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的 基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。 在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验 和优秀的思想。例如B. Moreland,微软(Microsoft)的程序设计师,业余从 事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非 常值得其他棋类程序设计人员借鉴。然而,中国象棋与国际象棋存在着很 大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需 要对其加以改进和创新。 本文针对中国象棋程序设计的一系列问题,总结出一些搜索引擎的设计 方法,并给出java语言的实现。 * * 概述 1 棋盘的标记 象棋的着法表示,简而言之就是某个棋子从什么位走 到什么位置。通常,表示方法可以分为“纵线方式”和 “坐标方式”两种,现在作简要说明: 1)纵线方式 这是中国象棋常用的表示方法,即棋子从棋盘的哪 条线走到哪条线。中国象棋规定,对于红方来说的纵线 从右到左依次用“一”到“九”表示,黑方则是“1”到 “9”(如图1所示),这种表示方式体现了古代中国象棋 研究者的智慧。 * * 概述 2)坐标方式 这是套用国际象棋中的表示方法,即把每个格子按 坐标编号(如图2所示),只要知道起始格子和到达格子, 就确定了着法,这种表示方式更方便也更合理,而且还 可以移植到其他棋类游戏中。采用这种方法来表示,棋 盘的纵线从左到右(红方)依次为a b c d e f g h i,横线从 下到上(红方)依次为0 1 2 3 4 5 6 7 8 9(如图2所示)。 概述 * * 概述 * * 2 棋子的名称 为方便表示,中国象棋的棋子名称除了用汉字以外, 还可以用字母,字母可从国际象棋中稍加改动得到,而 数字是为了方便着法的输入(以便用在数字小键盘上)(见 表1): 基本数据结构 * * 1 位棋盘 对于位棋盘,在这里我只简单介绍一下。 在中国象棋中,棋盘有90个交叉点。位棋盘其实就是一个长度为90位的变量,每个位对应一个交叉点,用来记录棋盘上的某些布尔值。在Java中,用3 个int类型数据(每个32位,共96位多余的6位不用)表示一个位棋盘。 基本数据结构 * * 2 Zobrist键值 1)Zobrist键值概述 用Zobrist技术产生的键值,表面上跟局面没什么关系。如果一个棋子动过了,就会得到完全不同的键值,所以这两个键值不会挤在一块儿或者冲突。当把它们用作散列表键值的时候会非常有效。 另一个优点在于,键值的产生是可以逐步进行的。例如,红马在e5格,那么键值里一定异或过一个“zobrist [KNIGHT][RED][E5]”。如果再次异或这个值,那么根据异或的工作原理,这个马就从键值里删除了。 基本数据结构 * * 这就是说,如果有当前局面的键值,并且需要把红马从e5移到f7,你只要异或一个“红马在e5”的键值,把马从e5格移走,并且异或一个“红马在f7”的键值,把红马放在f7上。比起从头开始一个个棋子去异或,这样做可以得到同样的键值。 如果要改变着子的一方,只要异或一个“改变着子方”的键值就可以了。用这种方法,可以在搜索根结点的时候构造一个Zobrist键值,在搜索时通过走子函数“MakeMove()”来更新键值,一直让它保持和当前局面同步。 基本数据结构 * * 2) Zobrist键值的用途 Zobrist键值通常用在散列键值当中,而散列键值在象棋程序里有以下几个作

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档