本文针对中国象棋程序设计的一系列问题,总结出一些搜索引擎的设计方法,并给出 java
语言的实现
本系统主要有以下 4 个模块,每个模块对应一个程序包:
1、engine:搜索引擎包,系统的核心部分。
2、message:网络对战过程中各种消息及其传递机制的类实现包。
3、main:主界面实现包。
4、pieces:棋子及其相关类实现包。
现就各个包中的要点给与说明。
2.2.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。