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

mane 2021-10-27 原文

2005年6月我系第二批科技小组的项目正式确定为实现一款中国象棋对弈软件。基本功能包括人机对战、网络对战。我负责开发人机对战的引擎部分,也就是让计算机下棋。经过了暑假整整两个月的学习与实践,我终于初步完成了程序,虽然电脑的下棋水平实在不敢恭维,但好歹也是我心血所成,所以就苟且将其命名为scCChess1.0版本,整理一下发到blog上来。(本程序在8月底就完工了,之所以现在才贴上来是因为我本想在这个学期对它进行改善,力求让电脑的下棋水平再上一个层次之后再贴出来,免得众老鸟笑话。结果这个学期实在是比较忙,而且现在又找不到人做界面,我不得不转去给我的引擎做界面。唉,说来惭愧啊,小生对做界面至今仍未入门,当你看这篇blog时,说不定我正在痛苦的学着MFC……再加上其他一些乱七八糟的事恐怕年前是不会有空修改引擎了。所以干脆先贴了,以后若有大改再贴新的。如果有哪位朋友耐住性子、牺牲了宝贵时间看了小生的东西,还望多提宝贵意见。谢谢、谢谢……

好了,说了这么多废话现在转入正题。

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

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

chess_liuchen.gif

在搜索算法上我采用了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 小游戏开发时尚编程百例》 作者:网冠科技 机械工业出版社
* 以及众多其它无名作者的源程序
它们对我最终能够顺利完成程序起了巨大的帮助作用。在此,谨向以上所列表示感谢!
此外,我还要感谢我们的指导老师——蒋德茂老师和陈宇老师,他们给了我们科技小组很大的支持和帮助。在此,也向两位老师表示感谢!

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

版权声明:本文为mane原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mane/p/6257877.html

[转载] 中国象棋软件-引擎实现(一)概述的更多相关文章

  1. 开发和常用工具推荐清单 转载

    常说”工欲善其事必先利其器”, 下面的一些工具软件,必能提高你的工作效率。 开发相关 Resharper(收费 […]...

  2. C#开发微信公众平台-就这么简单(附Demo)转载

    写在前面   阅读目录: 服务号和订阅号 URL配置 创建菜单 查询、删除菜单 接受消息 发送消息(图文、菜单 […]...

  3. 将你的iOS设备备份到外置磁盘|一日一技·Mac — 转载

         前不久我更换了一次手机,并通过 iTunes 将旧设备的备份恢复到了新设备中。恢复完成后,我惊讶地发 […]...

  4. 转载(一根网线惹的祸)

    刚上大学没多久,就遇到件头疼事。 富二代们刚来就带着笔记本电脑,这让咱们只能玩手机的屌丝辈们羡慕嫉妒恨。要命的 […]...

  5. 转载 – 浅析我曾遇到的几个便宜VPS服务器 – freeyouyou

    转载 – 浅析我曾遇到的几个便宜VPS服务器 本文来自:http://www.jianshu.co […]...

  6. 转载 美国SAP高手跳槽记-转自George

    跳槽(1) 跳槽的典故,据我上周得到的教育,是来自三言二拍,形容当时的富家公子又喜欢上了新来的妓女而抛弃了旧的 […]...

  7. DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)—-转载

      DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例) 转自:http:/ […]...

  8. 树莓派 — 输入设备驱动 (key) 续2: 转载 Setting up a GPIO-Button “keyboard” on a Raspberry Pi

    使用device-tree (DT) overlay应该是更方便的方法: http://blog.gegg.u […]...

随机推荐

  1. 关于系统优化的思考,与网站优化实战

    我到新公司,完整熟悉了系统以后,发现问题颇多,于是在wiki上写了下面这篇文章。   我们的系统是一个软件产品 […]...

  2. Apache的安装和部署

    Apache在Windows下的下载、安装、部署及代理Tomcat Apache简介 Apache(音译为阿帕 […]...

  3. mp4格式(转帖加修改) 转载 – 民浩

    mp4格式(转帖加修改) 转载 下面的软件下载地址:http://download.csdn.net/sour […]...

  4. Vue.js+vue-element搭建属于自己的后台管理模板:什么是Vue.js?(一) Vue.js+vue-element搭建属于自己的后台管理模板:Vue.js是什么?(一)

    前言 本教程主要讲解关于前端Vue.js框架相关技术知识,通过学习一步一步学会搭建属于自己的后台管理模板,并且 […]...

  5. 冒泡排序和选择排序-java

    冒泡排序 假设有一数组int [] arr  = {9,5,4,10,2};原理是第一个元素和第二个比较,如果 […]...

  6. 关系运算符号

    #include<stdio.h>void main(){ int a=7,b=8,c=9,m; […]...

  7. AT168 自宅からの脱出

    看到其它题解都是数组模拟BFS,没人用STL的 那我就来写一写STL吧 题目传送门 sol 题目意思都很清晰吧 […]...

  8. 硬货 | 利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序

    本文首发于我的公众号 CloudDeveloper(ID: cloud_dev),专注于干货分享,号内有大量书 […]...

展开目录

目录导航