Java语言程序设计实验报告
实验项目名称:中国象棋对弈系统
作者姓名与单位:李明 数学与应用数学专业 数学081班 摘要:
本文主要是运用java实现具有一定功能的中国象棋对弈系统软件,主要功能如下:
a、
象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获
胜。 b、
新游戏:任何时候可以重新开始一盘新的对弈。
c、 悔棋:当走错棋的时候可以悔棋。 d、
信息提示:提示当前信息状态。
e、 简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明
关键词:java、中国象棋对弈系统
正文:
一 程序设计说明
1.1程序的设计及实现
本系统主要有以下4个模块,每个模块对应一个程序包: 1、engine:搜索引擎包,系统的核心部分。
2、message:网络对战过程中各种消息及其传递机制的类实现包。 3、main:主界面实现包。
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,20,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:动态局面类
包含对局过程中的动态信息,主要实现的是2.4节的各类位棋盘和移子函数。
(4) MoveStruct.java:着法表示类。
(5) PreMove.java:伪合法着法生成模块,见4.1。
(6) MoveSortStruct.java:合法着法的生成及其排序算法,见4.2。 (7) SearchMove.java:搜索算法,实现如下功能:
1)主置换表及开局库 2)Alpha-Beta搜索算法 3)针对吃子着法的静态搜索算法
4)适应性空着裁剪算法:见5.5.2,根据不同情况来调整R值的做法,称为“适应性空着裁剪”(Adaptive Null-Move Pruning),它