1、 1 目目 录录 摘要 1 关键字 1 正文 2 1、程序设计说明. 2 1.1 程序的设计及实现 2 1.1.1搜索引擎的实现(engine包) . 2 1.1.2信息传输机制(message包) 3 1.1.3棋子(pieces包) . 3 1.2 主控模块(main包) 3 2、运行结果. 5 3、设计体会. 6 附件 7 程序代码 7 参 考 文 献 资 料 41 中国象棋对弈系统 2 JavaJava 语言程序设计实验报告语言程序设计实验报告 实验项目名称:实验项目名称:中国象棋对弈系统 作者姓名与单位:作者姓名与单位:李非 计算机 101 摘要:摘要: 本文主要是运用 java 实
2、现具有一定功能的中国象棋对弈系统软件,主要功 能如下: a、 象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获胜。 b、新游戏:任何时候可以重新开始一盘新的对弈。 c、 悔棋:当走错棋的时候可以悔棋。 d、信息提示:提示当前信息状态。 e、 简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明 关键词:关键词:java、中国象棋对弈系统 3 正文:正文: 一 程序设计说明 1.1 程序的设计及实现 本系统主要有以下 4 个模块,每个模块对应一个程序包: 1、engine:搜索引擎包,系统的核心部分。 2、message:网络对战过程中各种消息及其传递机制的类实现包。 3、main:主界
3、面实现包。 4、pieces:棋子及其相关类实现包。 现就各个包中的要点给与说明。 1.1.1 搜索引擎的实现(engine 包) (1) BitBoard.java:位棋盘的实现,见 2.4 节。 (2) CCEvalue.java:评价函数知识类。 本程序使用开源软件“梦入神蛋”的快速评价函数。该函数包含子力价 值和棋子所在位置的奖励值。子力价值分别是:帅-0, 仕- 40, 象-40, 马-88, 车-200, 炮-96, 兵-9。帅是无价的,用 0 表示。以马为例,位置的奖励值如 下: 0, -3, 5, 4, 2, 2, 5, 4, 2, 2, -3, 2, 4, 6,10,12,2
4、0,10, 8, 2, 2, 4, 6,10,13,11,12,11,15, 2, 0, 5, 7, 7,14,15,19,15, 9, 8, 2,-10, 4,10,15,16,12,11, 6, 2, 0, 5, 7, 7,14,15,19,15, 9, 8, 2, 4, 6,10,13,11,12,11,15, 2, -3, 2, 4, 6,10,12,20,10, 8, 2, 0, -3, 5, 4, 2, 2, 5, 4, 2, 2 上面的每行代表棋盘的一条纵线。其中,-10 所在的位置是“窝心马”,所 以要罚 10 分。 (3) ChessPosition.java:动态局面类 包
5、含对局过程中的动态信息, 主要实现的是 2.4 节的各类位棋盘和移子函数。 (4) MoveStruct.java:着法表示类。 (5) PreMove.java:伪合法着法生成模块,见 4.1。 中国象棋对弈系统 4 (6) MoveSortStruct.java:合法着法的生成及其排序算法,见 4.2。 (7) SearchMove.java:搜索算法,实现如下功能: 1)主置换表及开局库 2)Alpha-Beta 搜索算法 3)针对吃子着法的静态搜索算法 4)适应性空着裁剪算法:见 5.5.2,根据不同情况来调整 R 值的做法,称 为 “适应性空着裁剪” (Adaptive Null-M
6、ove Pruning), 它首先由 Ernst Heinz 发表在 1999 年的 ICCA 杂志上。其内容可以概括为: a. 深度小于或等于 6 时,用 R = 2 的空着裁剪进行搜索 b. 深度大于 8 时,用 R = 3; c. 深度是6或7时, 如果每方棋子都大于或等于3个,则用 R = 3, 否则用 R = 2。 5)带时间控制的迭代加深搜索算法:每次加深搜索都判断时间是否够用。 6)“将军”扩展(加深)搜索算法:当搜索到己方被“将”时,增加搜 索的深度。 7)主要变例搜索算法 1.1.2 信息传输机制(message 包) 在对弈过程中(主要是网络对弈)需要在对弈双方之间传输各类信息,抽象 为各类消息。如时间规则的协定、各方的走子信息等。每方都有消息接收、消息 处理和消息发送程序 (OuterMsgReceiver、 LocalMsgReceiver, QzMessageHandler, MessageSender)。己方的 MessageSender 与对方