中国象棋软件-引擎实现(一)概述

程序的基本框架:
从程序的结构上讲,大体上可以将本程序划分为四大部分:
棋局表示、 着法生成、 搜索算法、 局面评估

程序的大概的思想是:
首先使用一个数据结构来描述棋局信息,对某一特定的棋局信息由着法生成器生成当前下棋方所有合法的着法并依次存入着法队列。然后通过搜索算法来逐一读取着法并调用局面评估函数对该着法所产生的后继局面进行评估打分,从中选出一个最有可能导致走棋方取胜的着法。在搜索的过程中还可以采用一些辅助手段来提高搜索的效率。其过程如下图所示:

在搜索算法上我采用了Alpha-Beta搜索。此外,为了提高搜索的效率,我还加进了历史启发以及归并排序等以辅助搜索。这些用的都是前人的东西。本程序最具创造性的地方在于局面评估部分(请允许我用“创造性”这个词,尽管我设计的算法可能很幼稚——从目前电脑的下棋水平来看我不得不这么说,但毕竟耗费了我好多脑细胞啊)。搜索算法和局面评估是整个程序的核心。其中局面评估对计算机的下棋水平起着至关重要的影响。也是今后我的程序想要提高机器“智能”所要着重改进的地方。呵呵,既然如此重要这个就放在最后再讲了。

程序项目的构成:
我为程序建了一个win32控制台项目,这意味着我的程序用了一个DOS的界面(在界面开发出来之前,我通过在DOS窗口中输入坐标、电脑反馈坐标的方式来和电脑下棋,以此测试我的引擎)。
我将各个模块分别写成头文件,最后再包进一个主的cpp文件。我知道这样似乎有点外行,但对像我一样的初学者来说这种方法简单易懂:)

整个项目包含如下文件:
scCChess.cpp
——程序主文件。负责游戏的开始。
scCChess.h
——主头文件。定义了初始化游戏、开始游戏等基本函数。
CChessDef.h
——象棋相关定义。包括棋子棋盘的表示,行棋的基本结构类型等定义。
CChessEvaluate.h
——局面评估。为某一特定局面进行评分。
CChessMove.h
——着法生成器。就当前局面生成某一方所有合法着法。
CChessSearch.h
——搜索部分。对着法队列进行搜索,求出最佳着法。
HistoryHeuristic.h
——历史启发。Alpha-Beta搜索之补充,以提高搜索效率。
SortMove.h
——着法排序。对着法按其历史得分进行降序排序,以提高搜索效率。

参考资料:
在写本程序时我参考学习了以下资料:
*《PC 游戏编程(人机博弈)》 作者:王小春 重庆大学出版社
* 象棋百科全书 ElephantBoard的主页 http://www.elephantbase.net/ 站长邮箱: webmaster@elephantbase.net
*《Visual C++.NET 小游戏开发时尚编程百例》 作者:网冠科技 机械工业出版社
* 以及众多其它无名作者的源程序
它们对我最终能够顺利完成程序起了巨大的帮助作用。在此,谨向以上所列表示感谢!
此外,我还要感谢我们的指导老师——蒋德茂老师和陈宇老师,他们给了我们科技小组很大的支持和帮助。在此,也向两位老师表示感谢!

下面将陆续介绍程序各部分的实现……

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值