象棋函数库hessunctions功能与用法ryueifu

ChessFunctions是我用VB6开发的动态链接库,目的在于为象棋软件开发者提供便利,降低开发难度。

首先讲述一下象棋编程的基础知识。

一个象棋软件,应该具备如下基本功能:

从设计的角度,象棋软件向用户提供界面,用户可以在棋盘上点击和移动棋子。程序的后台代码,需要相应的记录用户的操作,同步更新数据。

一盘棋,是由初始局面和后续招法形成的。局面(board)和招法(movelist)这两个术语构成了象棋软件的核心内容。只有处理好这两项内容,才能做出合格的软件。

局面是指棋盘上有哪些棋子,这些棋子在什么位置。描述局面主要有如下三种方式:

FEN字符串采用字母与数字结合的方法,把棋盘上10×9=90个交叉点的棋子进行描述,具体方法是用字母rnbakcp分别代表黑方的车马象士将炮卒,用RNBAKCP分别代表红方的车马相仕帅炮兵。从棋盘左上角从左到右、自上而下,遇到连续的空格,用空格数量代替。换行的时候用斜杠分开,例如:

r2akabr1/9/1cn1b2cn/p3p1p1p/2p6/6P2/P1P1P3P/1CN1C1N2/9/R1BAKABR1 w

上述FEN用来描述下面这个局面,r2akabr1表示 黑车 两个空格 士 将 士 象 黑车 1个空格。以此类推

需要注意,FEN字符串后面有一个字母w或者b,用于描述当前局面该哪一方走棋,如果红方走棋,结尾是w。否则是b

FEN字符串至关重要,采用一行字符串就描述整个棋盘。在各个象棋软件之间复制粘贴局面非常方便,而且,云库以及引擎也只认识FEN字符串。

所谓加空的,是指把FEN字符串中的数字,用连续的空格换掉。我习惯用小写字母o表示空格。例如上述FEN字符串加空以后:

rooakabro/ooooooooo/ocnoboocn/pooopopop/oopoooooo/ooooooPoo/PoPoPoooP/oCNoCoNoo/ooooooooo/RoBAKABRo

加空的目的在于,把FEN字符串的长度凑够99个(90个交叉点+9个斜杠),这样方便利用循环转换为数组。

象棋软件的程序后台采用二维数组作为局面的数据结构,非常合适,因为二维数组在形式上最接近真实的棋盘。

一维表示10行,二维表示9列。上述FEN字符串对应的二维数组是:

如果在VBA的本地窗口查看二维数组:

招法,指的是红方或黑方走了一步棋,一个招法必然对二维数组的元素进行修改。

如左图所示,假设红方车二进七吃黑炮,形成右图:

这样就产生了一个招法,这个招法需要对二维数组Matrix进行如下元素修改:

Matrix(x2,y2) = Matrix(x1,y1)

Matrix(x1,y1) = "o"

其中,x2,y2是棋子行走终点的横纵坐标,x1,y1是起点的横纵坐标。

以上两行,是著名的“象棋公式”,任何一招棋,都这样的。

*需要注意,对于一盘棋,局面数总比招法数多1,因为初始局面没有招法。

中文棋谱,采用4个字描述一个招法,这种做法指出了发生行走的棋子的名称,但是缺点是起点、终点的坐标不明确,程序设计的时候很不方便。必须转换为具体的行列数才能处理。

东萍象棋是目前最强大的网络象棋数据库,采用binit描述初始局面,采用movelist描述招法列表。

movelist用4个数字表示招法,具体是x1y1x2y2这种格式。把棋盘左上角的位置定为(0,0)。

例如从全局开始,红方黑方先后走了:

炮二平五 象7进5 马二进三 士4进5

形成如下局面:

东萍象棋的movelist则记为:7747604279673041

云库是一个能够计算招法的网站,用户只需要把FEN字符串传递给网站,云库就能返回当前局面最佳招法是什么。对于开局阶段,云库还可以返回多个可选招法。

云库或者引擎,把棋盘的左下角定为(a,  0),采用一个字母一个数字的方式描述棋子的位置。 给出的招法是两个字母两个数字,例如上述局面,b0c2表示马八进七,

i0h0表示车一平二。下面是一些可选招法。

引擎,是位于磁盘上的一个可以计算招法的可执行文件,与云库类似,用户把FEN字符串传递进来,就可以给出最佳招法。

综上所述,movelist和moves都是坐标表示法,可以相互转换,写代码的时候非常容易。

我相信,很多象棋爱好者或者编程爱好者都曾尝试过编写象棋软件。但是绝大多数人半途而废,完整地开发一个象棋软件的人寥寥无几。究其原因,是因为存在如下三大难题难以解决。

象棋软件,提供给用户的是一个棋盘,以及用控件制作的一些棋子。用户点击棋子的时候,能够移动到哪儿,不能移动到哪儿,必须加以限制。否则导致马走田字、车炮可以斜着走等情况。

也就是说,在用户试图走一步棋的时候,软件应该判断一下是否为合理招法。

局面计算属于人工智能,自己编写算法难度很大。目前最方便的方式就是调用云库,或者调用引擎。

象棋软件的另一个重要功能就是能够保存、打开棋谱。然而,象棋棋谱文件格式非常多,主流的有pgn、东萍棋谱等。程序开发的时候必然需要解释每个棋谱的初始局面是什么,招法列表是什么。中文棋谱、movelist、moves三者之间的转换是必要的。

象棋函数库(ChessFunctions)解决了如上3个难题。开发人员只需要在工程中添加该引用,就可以在代码中调用相应的函数,来轻松开发。

ChessFunctions包含如下5个类:

ChessFunctions支持32位的Office VBA,以及目标平台是x86的C#程序等。下面演示VBA中使用ChessFunctions的方法。

管理员身份启动cmd命令提示符窗口,输入:

按下回车进行注册。xxx是具体路径

上述代码调用了Clschessdb这个类中的bestmove函数,也就是让云库计算最佳招法。最后,m的打印结果是 a6e6(炮九平五)。

继续修改代码:

打印结果是:

根据score可以看出,红方只有走a6e6(炮九平五)或者走a6a9(炮九进三)才能赢,其余走法都是和棋。

其余类库的调用示例,请参考“VBA用户窗体中国象棋.xlsm”文件Test模块里面的代码。

THE END
0.国际象棋棋谱(柳二狗)小说全文最新在线阅读国际象棋棋谱最新章节由网友提供,《国际象棋棋谱》情节跌宕起伏、扣人心弦,是一本情节与文笔俱佳的,言情中文网免费提供国际象棋棋谱最新清爽干净的文字章节在线阅读。jvzquC41pu~t77sgv1?`;?6;1
1.国际象棋开局棋谱Word模板下载编号qdjgmzod本模板为国际象棋开局棋谱,格式为word,其他风格,可用于校园教育演讲展示,文字图片可以直接替换,使用简单方便。jvzquC41yy}/v~pwrrz/exr1owhbp8vflis{qm3jvor
2.《大师三人行:少儿国际象棋初级篇(上下册)国际象棋入门进阶提高大师三人行:少儿国际象棋初级篇(上下册)国际象棋入门进阶提高书籍棋谱教材 青岛出版社正版 扫描封面如有疑问,您可在购买前联系客服咨询。 异常问题:如您发现活动商品销售价或促销信息有异常,请立即联系jvzq<84rtqjve}3fcpmecwl0eqs03?<534;64:3jvor
3.棋牌竞技风暴新浪棋牌频道,全方位报道国际国内围棋、国际象棋、象棋及其他棋牌类赛事,向爱好者提供海量热门新闻、图片及棋谱,聂卫平、柯洁、常昊等名家微博常驻,jvzq<84ygkwj0|npc0ipo7hp1
4.东萍象棋网象棋棋谱仓库 - 东萍象棋网 - 象棋谱大全,象棋资讯,比赛规程,参赛名单,轮次对阵,即时排行,比赛棋谱,开局,中局,残局,排局,古谱,大师对局,弈天顶尖对局jvzq<84yyy4erv0eqs0
5.国际象棋教学软件下载最新版本国际象棋教学软件这是一款非常棒的国际象棋教学软件,可根据自身水平设置机器难度级别,从容易到很难循序渐进进行对弈练习。可随时中断保存对弈棋谱,下次打开继续对弈。可选择执白棋还是黑棋。可编辑棋盘,录入自己的棋谱,用户还可以在这里找到更多志同道合的人一起学习国际象棋 软件说明: 国际象棋教学app可根据自身水平设置jvzquC41yy}/jwhl0eun1|otl1;:3>70jvsm
6.居文君国象天地中自得其乐(中国新棋谱)体育居文君 国象天地中自得其乐(中国新棋谱) 2016年12月27日,居文君在快棋和超快棋世界锦标赛比赛中。 新华社发(资料图片) 端坐在棋盘前,裹着一条素色头巾,巧笑倩兮,美目盼兮。2017年国际象棋女子世锦赛官网上的一幅照片,定格下居文君最美的一面。 从谢军到侯逸凡,中国国象向来以“棋后”为代言人。在她们的光环jvzq<84urqxuu7ugqrrf0lto0et0p:4423=02;6:1e75:;5/4;6:2::70jznn
7.国际象棋战术组合教材课本棋谱大全书》摘要书评试读国际象棋校本课程4 郭宇 小学生国际象棋教程书籍 儿童初学者国际象棋一步杀入门书 国际象棋战术组合教材课本 棋谱大全书 收藏 ¥ 累计评价 0 降价通知 - + 加入购物车 jvzquC41kvkn0si0eqs0395799:1;<69264ivvq
8.老马识谱国际象棋下载老马识谱appv1.0.0最新版老马识谱下载app,国际象棋棋谱查询软件,支持棋谱编辑、下载、分析等功能,海量棋谱尽在其中,快速识别棋谱,轻松练习,满足用户棋谱需求。 老马识谱app介绍 “老马识谱”是一款国际象棋比赛棋谱查询、棋谱识别及题库训练应用,可实时更新当前最新国际象棋比赛的棋谱,可识别手写记录本,印刷体棋谱及通过语音识别棋谱,可进行定制jvzquC41yy}/szyp0eun1juqhz0;9<24:4ivvq
9.可以自己摆残局的象棋软件APP推荐可以自己摆残局的象棋软件下载可编辑棋盘,录入自己的棋谱。 4、残局棋谱练习 收集5000多个残局棋谱,包含马头书和波加尔(一步杀、两步杀、三步杀)等多种残局。 5、开局棋谱 收集A00-E99共500个开局棋谱,可根据编号(如A00)、中文名称、英文名称进行查询,然后打开进入对弈。 6、大师棋谱 收集全世界20000名顶级国际象棋大师的400多万个棋谱。可jvzquC41yy}/yjsfqwpjc7hqo1hbppicp1>289=91
10.《国际象棋入门》作者:徐家亮.pdf《国际象棋入门》 作者:徐家亮.pdf,内容提要 本 书介 绍和 阐述 国际象棋 的基础 知识 ,全书共分十一章,内容包括行棋 知识、基本杀法 、基本战术、开局原理、 中局基础 、残局基础 、常用开局、局面 的判断与估计 、计划与构思等 ,书末有 棋题测验 ,可供 自测棋力 ,并jvzquC41oc~/dxtm33>/exr1jvsm1;5331674;4542=867xjvo
11.单机象棋(单机版)无需网络(中国象棋)下载v1.82最新版象棋名手软件支持任意象棋局面的摆设,可以轻松实现特定局面人机对弈、机机对弈、软件分析等功能。 4、网络对战 象棋名手软件内置界面连线器,可以帮助用户自动连接到各个对弈网站进行自动对弈。 【中国象棋历史和起源】 中国象棋起源于中国。英国著名学者李约瑟博士在其所著《中国科学文化史》中明确提出,国际象棋也是中国人jvzq<84o0;<30wjv1{56;=:87
12.小巧便捷的国际象棋棋谱软件winboard【使用说明】 解压后运行winboard,然后设置对局模式。 在模式菜单可以编辑棋局。 winboard可自定义国际象棋引擎,用记事本打开POLYGLOT.INI文件,在EngineCommand中后面填写引擎名,需跟winboard在同一个目录下。jvzquC41yy}/jnqnqenfu|3ep17:5>80jvsm
13.国际象棋分析平台包含资源 提供资源,用户可管理上下文数据 服务详情 评论 带有Playwright MCP的Liches回放分析器 基于AI的分析平台,集成Lichess官方API和Playwright Model Context Protocol(MCP),自动分析国际象棋棋谱并可视化报告每个棋谱的评估。 功能 Lichess API集成 收集游戏数据(PGN、开场、玩家信息) 通过Cloud Eval获取每个评估数据 jvzquC41yy}/oluyqtre0lto1|n0fnyckn577:gh6c;83?5cfe=b5lgggf884?::;d;
14.国际象棋游戏下载大全国际象棋手机版国际象棋电脑版国际象棋游戏是在全球范围内都非常受欢迎的一种棋类游戏,也是一项智力竞技运动,国际象棋不仅有着非常悠久的历史,游戏还能带给玩家丰富的游戏乐趣,锻炼玩家的思维,丰富用户的业余生活。it猫扑为大家带来了一些非常好玩的国际象棋游戏,包括有:国际象棋单机版,国际象棋大师,国际象棋中文版等 jvzquC41yy}/k}rqr0ipo8pg{1mvqsnzkcthsr4