国际象棋人工智能软件chessdb
国际象棋人工智能软件chessdb
第1章 软件概述
国际象棋人工智能软件(以下简称chessdb),是用VB.NET语言开发的一款Windows桌面应用程序。基本功能包括:
l 编辑棋局
l 保存棋谱
l 打开棋谱
l 人工智能分析局面
其他选项有:
l 旋转棋盘
l 翻转棋子
l 设置格子颜色
该软件的特点是兼容性好,无需安装,双击文件即可打开。而且,棋力水平高,适合各个水平的棋手作为辅助工具使用。
1.1 开发背景
国际象棋(Chess)是欧美国家比较流行的一种智力游戏,近年来在国内也已经非常普及,而且经常举办各种规模的赛事。越来越多的家长愿意让自己的孩子学习国际象棋,提高智力水平。
但是,适合国人推演棋局的人工智能软件却不多,本软件的设计是为了让更多人了解国际象棋,借助本软件的分析功能进一步提高棋手的竞技水平。
1.2 设计思路
棋类游戏的软件开发,首选窗体应用程序,利用图像控件呈现棋子效果。因此,本软件的实现必须考虑如下多个方面:
l 国际象棋棋盘的正常显示
l 棋子的正常显示
l 棋子按照行棋规则正常移动
l 行棋过程中记录前后移动的坐标
l 棋谱的保存
l 棋谱的打开
l 在任意一个局面下分析局面
除了实现以上基本功能外,还需要从方便用户使用的角度,设计如下选项:
l 设置深格、浅格颜色
l 棋盘旋转
l 棋子翻转
这些设置应该保存于注册表,下次启动软件时直接使用上次的设置。
棋盘的实现,采用了64个PictureBox控件,每个控件具有BackColor属性和Image属性,其中BackColor通常为纯色,用于显示格子颜色。而Image属性是一个图像,在行棋的过程中利用不断修改Image属性实现走棋的效果。也就是说,行棋过程中,所有的控件位于原地不动,只是更改了相应控件的图像。
在手动走棋过程中,还需要对行棋行为按照国际象棋行棋规则进行约束,否则,拿起任何一个棋子都可以移动或吃掉另一个棋子。具体的行棋规则请参考其他资料。但是国际象棋有以下4个特殊的走棋方式,需要个别处理。
1.2.1 王车易位
当一方的王和车从未走动,而且王车之间没有任何棋子,此时王可以向车的方向一次移动两格,车越过王靠在王的另一侧。这个动作算一步棋。
王向a列的车易位,称为“长易位”,把王走到c1,并且把左侧的车走到d1。
王向h列的车易位,称为“短易位”,把王走到g1,并且把右侧的车走到f1。
需要另外注意的是:易位时必须考虑王经过的每个格子是否被对方将军,如果某个格子处于将军,则不具有易位条件。假设计划长易位,必须提前看一下e1、d1、c1这三个格子,是否被对方棋子将军。
长易位的结果:
短易位的结果:
1.2.2 兵走两格
在初始局面,白黑双方各有8个兵,分别位于2线和7线。
在没有被对方将军的前提下,原位的兵可以直接向前移动两格,如果不是原位的兵,一次只能前进一格。
兵走两格的条件是,兵前面的两个格子都没有任何棋子。
上图的行棋结果是:
再看下图,白方e2兵前面有象,黑方a7兵前面有马,这两个兵都不具有走两格的条件。
1.2.3 吃过路兵
吃过路兵的走法必须基于对方兵走两格。
假设白方e线的兵已经走到5线(对方境内),那么相邻的d线和f线,对方的原位兵如果走两格,白方就可以吃掉黑方的兵。
假设黑方走d7d5,那么白方可以认为黑方的兵在d6,直接走e5d6,并且把d5的兵从棋盘拿掉。
行棋的结果:
反之,当黑方的兵已经走到4线(白方境内),白方相邻线的原位兵前进两格,也有被吃过路兵的可能。
上图,当白方走b2b4,黑方可以走a4b3吃掉白兵。
此外,需要注意的是吃过路兵不是必须的,主吃方根据棋局形势可以选择吃,也可以任之不管。如果选择吃,必须立即吃掉,如果双方各走了其他的棋子,则吃过路兵的条件已丧失。
1.2.4 底兵升变
当一方的兵走到了对方棋盘的底线,这个兵必须变更为己方的后、车、马、象之一。
白方的兵走到了8线,或者黑方的兵走到了1线,都必须升变。
上图,如果轮白方走,b7兵既可以吃掉黑方马并且升变,也可以直接走到b8升变。
如果轮黑方走,c2兵走到c1升变。
假设白兵吃掉了黑马,软件弹出一个升变对话框,白方必须从中选择一个,通常选择后。
升变后的结果:
1.3 软件的基本信息
软件名称:chessdb
文件类型:exe可执行程序
其他辅助文件:无
运行平台:Windows系统均可正常运行
第2章 软件下载
联网用户可以访问:https://share.weiyun.com/R3QI4yfl
进入“工具大全”文件夹,下载chessdb.zip
也可以直接从如下链接下载:
https://files.cnblogs.com/files/ryueifu-VBA/chessdb.zip
下载后解压缩到任意路径,主文件是chessdb.exe,另一个a.txt是一个示例棋谱文件。
第3章 功能说明
3.1 软件概览
本软件的功能分布在窗体区域和主菜单中。
窗体区域包括:
l 棋盘和棋子
l FEN文本框
l 棋谱列表
l 招法列表
菜单包括:
l 文件:棋谱的保存和打开
l 选项:棋盘和棋子的外观设定
l 人工智能:设置是否显示招法
l 帮助
3.2 编辑棋局
刚打开软件时,默认显示的是国际象棋初始局面。
由白方先行,用户使用鼠标点击白方的棋子,按照国际象棋行棋规则走棋即可。
如果不启用人工智能,白方、黑方均由软件的用户使用鼠标走棋。
棋谱可以保存为TXT文件,以后通过“文件”、“打开”再次查看棋谱
3.3 查看棋谱
一个棋谱由初始局面和棋招列表构成,棋招列表位于棋盘右侧,用户使用鼠标点击列表中的某项,或者按键盘的上下箭头,可以快速跳转到该局面。
同时,棋盘底部有一个FEN文本框,里面实时显示当前局面信息。
3.4 编辑残局
本软件未提供直接从棋盘编辑残局的方法。
用户可以直接修改FEN文本框的内容,按下回车键完成残局编辑。如果想编辑残局,用户需要事先了解FEN字符串的构成和含义。
FEN字符串把某个局面的棋子,使用字母代替,最后连成一个长的字符串,方便在不同的软件之间传递局面信息。
例如初始局面如下:
白方棋子对应的字母为:
车(R)、马(N)、象(B)、后(Q)、王(K)、兵(P)
黑方棋子是上述各个字母对应的小写。
如果把初始局面用字母代替,则结果为:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
其中/用于分行,数字表示连续的空白格子数。
编辑残局举例如下:
假设FEN文本框中的内容为:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
用鼠标选中前面的rnbq,这4个字母,删掉,改写为数字4,表示4个空白格子。然后再把第二行的前面3个p,删掉,换成数字3。最后按下回车。
FEN文本框内容被修改为:
4kbnr/3ppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
棋盘局面为:
如果要设置残局该黑方行棋,将后面的w改为b即可。
3.5 更改格子颜色
用户根据自己的爱好,可以修改深格和浅格的颜色。
点击菜单“选项”、“深格颜色”,弹出一个颜色选取对话框。
点击“确定”后,棋盘颜色发生了变化
3.6 旋转棋盘
如果用户需要查看黑方,把白方当作对方,可以通过旋转棋盘来切换视图。
3.7 翻转棋子
国际象棋平面棋子,一般默认是白黑双方的棋子都是正向的,沿着屏幕方向朝上。
有时候需要把对方的棋子方向调转,更好地分辨走棋方向。
3.8 人工智能
软件默认是关闭人工智能功能的。如果要为白方支招,选择菜单“人工智能”、“显示白方招法”,使其处于勾选状态(也可按下快捷键Ctrl+W)。
这样,每当黑方走完一步棋,软件最右侧就自动显示白方的各种招法,用户一般选择最上面的招法即可。
例如使用鼠标点击右侧列表中的e2e4,软件会自动为白方走棋,结果为:
如果出现卡顿,耐心等待即可。