java 象棋论文

上传人:第*** 文档编号:61592157 上传时间:2018-12-05 格式:PDF 页数:33 大小:381.10KB
返回 下载 相关 举报
java 象棋论文_第1页
第1页 / 共33页
java 象棋论文_第2页
第2页 / 共33页
java 象棋论文_第3页
第3页 / 共33页
java 象棋论文_第4页
第4页 / 共33页
java 象棋论文_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《java 象棋论文》由会员分享,可在线阅读,更多相关《java 象棋论文(33页珍藏版)》请在金锄头文库上搜索。

1、河南机电高等专科学校毕业论文 1 1 1 绪论绪论 中国象棋(通称“象棋“)是人们国家喻户晓的棋类运动项目。 “象棋”一词,早 在春 秋战国时代的中就已出现。现在使用的棋盘、棋子,业型于九百年 前的北宋末年。 中国象棋运动可谓源远流长。它同围棋和国际象棋一样,对提高智 慧,陶冶性格,调剂身心,交流文化艺术都起着积极作用;在人们国是一项有着广 泛群众基础的比智慧、比技巧、比体力的体育项目。 象棋集智谋与娱乐为一体,对弈双方宛如统率千军的将领,执红黑双方,厮杀 于棋盘之上,虽不见刀光剑影,激烈程度并不输于两国交兵。象棋集中了几千年中 华文化的精髓, “红先黑后” ,说的是礼让; “观棋不语真君子,

2、举棋无悔大丈夫” , 说的是为人处世; “胜败乃兵家常事” ,讲的是心态;而“当局者迷,旁观者清” ,则 适用于世间一切事物,有启迪与警示的作用。象棋棋子不多,各自走法也不相同, 不管是车马炮兵,还是相士帅,虽然力量有大小,但可以相互捉杀,可见创造象棋 的人不但追求博弈的公平,更表达了人格平等的理念。小小棋盘,在娱乐之余,还 可以对人的一生起到借鉴与总结。 象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一 个是象棋棋谱编辑和对弈程序的公共平台WinBoard 平台, 另一个是商业的国际 象棋数据库和对弈软件ChessBase, 人们们为国际象棋爱好者和研究者提供了极 大的便

3、利。国际象棋软件有着成功的商业运作,已发展成一种产业。然而,电脑在 中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业 软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体 现出来。 在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀 的思想。例如 B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎 Ferret 的开发,人们的一系列关于国际象棋程序设计的文章非常值得其人们棋类程 序设计人员借鉴。然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的 某些成熟技术,无法直接应用于中国象棋,需要对其加

4、以改进和创新。 本文针对中国象棋程序设计的一系列问题,总结出一些搜索引擎的设计方法, 并给出 java 语言的实现。 河南机电高等专科学校毕业论文 2 2 2 概述概述 中国象棋是由两人下的。一方称为红方(或白方) ,一方称为黑方。对局时由 红方先走,黑方后走,一次一着,双方轮流走棋,直到对局结束为止。棋子的走法 及详细规则见 中国象棋竞赛规则 , 本章只描述计算机实现象棋对弈程序时所涉及 的一些概念及相关的表示方法。 2.12.1棋子的名称棋子的名称 为方便表示,中国象棋的棋子名称除了用汉字以外,还可以用字母,字母可从 国际象棋中稍加改动得到,而数字是为了方便着法的输入(以便用在数字小键盘上

5、) 见表 2-1 所示: 表 2-1 棋子的名称及表达方式 红方黑方字母英文单词数字 帅将KKing1 仕士AAdvisor2 相象BBishop3 马马NKnight4 车车RRook5 炮炮CCannon6 兵卒PPawn7 2.22.2棋谱的记录方法棋谱的记录方法 现以如下一般的开局为例说明各种记谱方法,如图 2-1 所示的局面,记法如下: (1)炮二平五炮平 (2)炮五进四士进 (3)马二进三马进 (4)炮八平五马进 (5)前炮退二车平 河南机电高等专科学校毕业论文 3 图图 2-12-1 一般开局的走法一般开局的走法 2.2.12.2.1 中文纵线记法中文纵线记法 这种格式是中国象棋

6、棋谱的常规记法,在各类出版物中最为普遍。但是这里还 是要说明两个重要的细节。 (1)仕(士)和相(象)如果在同一纵线上,不用“前”和“后”区别,因为能退 的一定在前,能进的一定在后。 (2)兵要按情况讨论: 三个兵在一条纵线上:用“前” 、 “中”和“后”来区别; 河南机电高等专科学校毕业论文 4 三个以上兵在一条纵线上: 最前面的兵用 “一” 代替 “前” , 以后依次是 “二” 、 “三” 、 “四”和“五” ; 在有两条纵线,每条纵线上都有一个以上的兵:按照“先从右到左,再从前 到后”(即先看最左边一列,从前到后依次标记为“一”和“二” ,可能还有“三” , 再看右边一列)的顺序,把这些

7、兵的位置标依次标记为“一” 、 “二” 、 “三” 、 “四”和 “五” ,不在这两条纵线上的兵不参与标记。如图 2-2 所示局面,四个兵分别位于四 线和六线,见表 2-2 列举了几种走法的坐标格式和纵线格式。 图图 2-22-2 残局的记法残局的记法 河南机电高等专科学校毕业论文 5 表表 2-22-2 残局的坐标记法残局的坐标记法 另外需要注意的是: (1)如果黑方出现数字,不管数字代表纵线标号还是前进或后退的格数,都 用阿拉伯数字表示, 在计算机中显示全角的数字。 但是代表同一纵线上不同兵的 “一 二三四五”(它们类似于“前中后”的作用)例外,例如例局面红黑互换,那么某步 着法就应该写成

8、“一卒平” 。 (2)在传统的象棋记谱中,如果发生以上这种情况,通常用五个字来表示, 例如“前兵四平五”等,在计算机处理过程中就比较麻烦,因为 4 个汉字(一个汉字 占 16 位)的着法可以储存在一个 64 位的字当中(在 C 语言中数据类型为_int64 或 long long),而增加到 5 个汉字就比较麻烦了。黑方用全角的数字是同一个道理。 2.2.22.2.2 符号纵线记法符号纵线记法 这种格式仅仅是用字母和数字代替汉字,其中“进” 、 “退”和“平”分别用符 号“+” 、 “-”和“.”表示, “前” 、 “中”和“后”也分别用符号“+” 、 “-”和“.” 表示,并且写在棋子的后面

9、(例如“前炮退二”写成“C+-2”而不是“+C-2”),多 个兵位于一条纵线时,代替“前中后”的“一二三四五”分别用“abcde”表示(这 种情况极少发生)。 另外,代表棋子名称的第一个字母,还可以用数字 1 到 7 表示, 这是为了方便数字小键盘的输入,例如“炮二平五”可以记作“62.5“(6 代表炮)选 用符号“+” 、 “-”和“.”也是出于这个考虑。 2.32.3 历史局面的表示及存储历史局面的表示及存储 中国象棋的一个局面可以用一个“FEN 格式串”来表示。FEN 格式串是由 4 段 ASCII 字符串组成的代码(彼此 3 个空格隔开),这 4 段代码的意义依次是: 中文纵线格式符号

10、纵线格式坐标格式 一兵平五Pa.5Pf8-e8 二兵平五Pb.5Pf6-e6 兵五进一P5+1Pe7-e8 三兵平五Pc.5Pd8-e8 四兵平五Pd.5Pd6-e6 河南机电高等专科学校毕业论文 6 (1)棋盘上的棋子,这是 FEN 格式串的主要部分; (2)当前局面轮到哪一方走子; (3)最近一次吃子或者进兵后棋局进行的步数(半回合数),用来判断“50 回合 自然限着”; (4)棋局的回合数。 现以最初局面为例详细说明如下: rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/P1P1P1P1P/1C5C1/9/RNBAKABNR w 0 1 第一部分(w 前面的字符):表示棋

11、盘布局,小写表示黑方棋子,大写表示红方 棋子。例如前九个字母 rnbakabnr 表示棋盘第一行的棋子分别为黑方的“车马象士 将士象马车” , “/”为棋盘行与行之间的分割;数字“9(5,1)”表示该行从该位置起 连续 9(5,1)个位置无棋子。 第二部分(w):表示轮到哪一方走棋,如果是 w 表示轮到红方(白方)走,是 b 表 示轮到黑方走。 第三部分(w 后的数字 0):表示自然限着。 第四部分(w 后的数字 1):表示当前局面的回合数。 2.42.4 棋谱记录文件的格式棋谱记录文件的格式 存放棋谱的文件分为两个部分:标签部分和棋谱部分。标签部分是指在棋谱的 记录中对战双方的比赛名称等双方

12、的英文简称记录方法;棋谱部分是指在对战的双 方所走的每一步文字记录。 2.4.12.4.1 标签部分标签部分 有如下标签: Event:比赛名; Site:比赛地点; Date:比赛日期,格式统一为“yyyy.mm.dd“; Red:红方棋手; Black:黑方棋手; Result:比赛结果,“红先胜”用“1-0”表示,“黑先胜”用“0-1”表示,和棋用 “1/2-1/2” FenStr:起始局面。如果空缺,表示起始局面是最初局面。 河南机电高等专科学校毕业论文 7 2.4.22.4.2 棋谱记录部分棋谱记录部分 棋谱记录部分必须在标签部分的后面,棋谱部分当中不能插入标签; 每一回 合都由“回

13、合数”、“红方着法”和“黑方着法”三部分组成,回合数后面要跟“.”(句点), 三者之间用两个分隔符隔开 (回合数后面的句点也不例外) , 回合之间也用分隔符隔 开。 现举一个例子如下: 例 1: Event “第 19 届五羊杯全国象棋冠军邀请赛“ Date “1998.12.?“ Site “广州“ Red “徐天红“ Black “许银川“ Result “1/2-1/2“ (1) 炮二平五马进(2) 马二进三车平 (3) 车一平二马进(4) 兵七进一卒进 (5) 车二进六炮平(6) 车二平三炮退 (7) 马八进九车进(8) 兵五进一马退 (9) 炮八进四炮平(10) 马九进七炮平 河南机

14、电高等专科学校毕业论文 8 2.4.32.4.3 XMLXML 格式格式 全国象棋冠军邀请赛 广州 1999.12.09 徐天红 许银川 rnbakabnr/9/1c5c1/p1p1p1p1p/9/9/9/1C5C1/9/RN2K2NR r - - 0 1 1-0 炮八平五 炮平 河南机电高等专科学校毕业论文 9 3 3 基本数据结构基本数据结构位棋盘位棋盘 3.13.1 什么是位棋盘什么是位棋盘 在中国象棋中, 棋盘有 90 个交叉点。 位棋盘其实就是一个长度为 90 位的变量, 每个位对应一个交叉点,用来记录棋盘上的某些布尔值。在 Java 中,用 3 个 int 类 型数据(每个 32

15、位,共 96 位多余的 6 位不用)表示一个位棋盘。 3.23.2 JavaJava 中位棋盘的实现中位棋盘的实现 3.2.13.2.1 位棋盘类的实现位棋盘类的实现 Java 中,位棋盘用 3 个 int 型的数据表示,最高六位不用。Java 中“与、或、 非、异或、左位移,右位移(注意,位棋盘的右位移是无符号位移) ”分别是“ Mid = Arg2; Hi = Arg3; public static BitBoard opAnd(BitBoard arg1,BitBoard arg2) /位棋盘的“与”操作,保存结果。 int low=arg1.Low int mid=arg1.Mid i

16、nt hi=arg1.Hi return new BitBoard(low,mid,hi); public static BitBoard opOr(BitBoard arg1,BitBoard arg2) /位棋盘的“或”操作,保存结果。 public static BitBoard opXor(BitBoard arg1,BitBoard arg2) 河南机电高等专科学校毕业论文 10 /位棋盘的“异或”操作,保存结果。 public static int count(BitBoard arg) /计算位棋盘中非零位的个数 public static BitBoard duplicate(int arg) /复制位棋盘 public static boolean equals(BitBoard arg1,BitBoard arg2) /位棋盘是否相等(所有90位对应的位相同即/为相等) public static BitBo

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号