粉丝96获赞416

在鲨鱼界面中,单击引擎,引擎设置加号,然后添加刚才的引擎, 这里其最强的是 v n n i 五幺二,其次是 a v x 五幺二,但这两个一般电脑都是不支持的,正常电脑选择 b m i 就行了, 而 b m i 起立就是大于 a b x 二,大于 modern, 大于无后缀的就是这些引擎,就是优先选 vni 五幺二,然后看能不能加载,如果不能加载就换成 avx 五幺二,如果 avx 五幺二还是不能加载,那就换成 bmi 二,正常电脑一般都是只支持 bmi 二的, 然后点击加载,然后这里就选择加载成功了,然后加载成功之后怎么怎么打开,怎么让这个引擎开始计算呢?然后我们点击这个 peacock fish bmir, 听到听到鲨鱼这个清脆的这个声音,就可以表明他已经启动成功了。然后右边这是线程数,然后我们打开自己的人物管理器,看一下自己的电脑最多是支持多少线程,这里 这里显得这里我的电脑是八和十六线程,所以最多是可以开到十六线程的,就是线程数同一引擎线程数越高,他的体力是越强的,要根据自己的电脑来选择尽可能高的线程数。比如我的电脑是十六线程的,但是如果我实在想 下棋的时候,我一般是不能开到十六县城的,因为开到十六县城会导致他 cpu 满载,然后导致下棋下棋的时候他容易跳水, 就温度过高的话, cpu 容易跳水。所以一般十六线程的话,开成十四或者十五是较好的。如果你的电脑是四和八线程,那开成七设置成七是最好的,如果是二和四线程设置成三是最好的,同理就是减一减一或者减二,这样防止他跳水 比我这里就设置成十四,其实是最好的。然后右边这个是哈西表,哈西表的话正常一般设置成一零二四就行, 下快棋的话可以设置成五幺二,如果是超级慢的棋,可以设置成二零二零四八,一般来说设置成一零二四就行, 然后设置好之后,然后就可以分析这个局面了,就比如开局点这个放大镜这个图标,然后他就可以分析这个局面,然后引擎可以给这个局面打分, 是不同深度,他可以给给这个局面进行评估。比如目前是二十五层,这个局面分数是三十八, 就可以给这个局面打分。然后如果我想让软件算一个残局,应该怎么算呢?我们右击鼠标, 然后点编辑局面,然后点清空棋盘,然后这里就是这个右边的棋子看不到了怎么办?我们就把这个往右拖一下,就能看到棋子了。同时同时这些棋子大小也可以调的,可以调制成小,可以调制成大,可以调制成中, 一般的话都用自动就行,然后可以摆齐了,比如随便摆一个局面,然后让电脑算一下这个局面的分数, 算出来是 mate mat, 意思是这个局面是绝杀的分数, 这样的话就可以实现,就通过自己摆齐,然后让电脑去分析这个局面,然后怎么让电脑和自己对应呢?或者说电脑和别人对应呢? 如果你是红旗,然后不是,如果你是黑旗,然后电脑直红旗,你就点这个红色的,让引擎直红,然后电脑他就会自动走红旗了。而为什么你点了之后他会自动走呢?然后他右边不显示分析呢? 是因为他有开局库,开局库的话是开局形成的一种固定的招法,是人为研究的一种棋谱,这样就可以省训引擎思考,然后同时丰富开局的多样性。 然后如果引擎怎么控制引擎的思考时间呢?然后点在这里,点这个引擎设置,然后有思考设置,可以选择每部固定时间,还有每部固定深度,一般的话就是 因为这是免费版嘛,他只能固定时间给我设置成十秒,这样的话他每步棋就固定左十秒。 哎,这里是有开局库,我把开局库去掉,那你进来走这边,然后他就可以算十秒,然后 算完十秒之后,然后自动走起。如果引擎算到一半,就是他算的时间太长了,我想让他停止思考,就点这个立即出招,让他结束计算,然后立即走出当前计算深度下最佳招法。 如果引擎走的招法就是你觉得不太好,或者说想让他变个招怎么办?点这个 b 可以强行变招,再点一下他还还,他也还可以再变招,然后点立即出招,就可以自动走。 大致就这些东西吧,就是说引擎它的线程数越高, 体力就越强,同一个引擎的话,就思考时间越长,体力也是越,体力也是越强的。


各位棋友大家好,现在来到讲解的这个鲨鱼界面的一个隐形加载跟开机库加载怎么样?加载, 首先我们做一下这个隐形怎么加载,然后点到这个隐形,然后点隐形设置 隐形管理,点开这栏,然后这里有一个加号,我们点这个加号进去,然后就进入我的电脑, 比方说你的引擎是放在桌面,那我们就选择桌面找到啊这个旋风,比方说我要夹夹这个旋风引擎,那就找到这个旋风引擎,双击打开文件, 然后就双击这个引擎啊,就加假的,或者选中,然后点这个打开就行,我们一般就是选择双击它,然后就加上去了,就这么一个下家。 加载完以后呢?呃,因为原来这里已经加载过了,所以说我清掉一个, 加载完以后就点确定啊,他就加进去了,然后,呃,再来到这个地方,刚才加载这个摄像风引擎就在这里了,我们会选择这个引擎就行了。 呃,我们就进入这个引擎,设置引擎管理这里,比方说这里引 已经太多了,我不需要这么多,我要删掉,我只留下我想要的啊,我,我就想留下笑风,我不要其他,那我就选择这个隐形,点这个加加删除掉他啊,选择把这删除掉,他就不见了, 现在就要留下一个摄像风就行了,然后点确定他就保存了以后,来到我这里转角这个摄像头像里面就没有其他隐形了,只有摄像风隐形啊,只有摄像风了。 然后这个开启库怎么加载呢?我们点这个开启库,然后开启库设置进入人里面,呃,进入里面的话,我们本来有一个库会把这删掉 啊,现在是教大家怎么加加角这个开水库,然后删掉原来的啊, 点这个加号啊,比方说我的开车库放,放在桌面,那我就找到桌面的文件啊,这里有个读者库,我就双击他加载,他就加载进来了, 然后加载完以后就点这个确定他就加上了。如果说没有加上的话,这里是没有库的,这个地方是没有库的, 比方说我要删除这个库,那我就选中他跟那个隐形一样,点这个加加码头删除,选中一个库,然后点删除。就啊,我不加载库的话,这里就不会显示这个库加回来,然后我们就把这个库加回去,点这个开这个设置 啊,点这个加号,找到开启库,双击它以后确定就加回去了, 下面就会显示这个开启库,圈口就会显示开启库。比方说我的我的开启库是在别的地方,我不在桌面,那你就找到其他地方吧,比方说我放在底盘,那我就找到我的电脑 d 盘,对不对?找到一个软件里面啊,其他地方也是能加载上去的啊,也是能加载的, 方法是一样的,只要你找到呃,你放这个文件的地方就能加载上它 啊。这个隐形跟 catigo 也是一样,可以加载很多个,都可以同时加载很多个。这个下面这个 catigo 怎么样 设置呢?这个也是很重要的,我们默认的话这分数最高这个岛上,然后这里分数这边的话,设置条件的话可以默认不用改。哎,这个设置条件的话,可以说默认不用改动, 这边选择方式的话就是分数最高,底下这个红方黑方的意思就是说我,我红方多少就要多酷,就是说我走多少步的开启酷,这个黑方走多少步的开启酷。 我们这个开始过最强的交速就是四百嘛,他最强的话就是四百嘛,但是的话,这里说设置零跟四百是一样的, 零跟四百是一样的,所以说调零就行了,调零的话就是他把你的开机会完完全全走完。如果说我不想走那么长,我想短一 早点出库,跟人家呃用这个引擎去下棋,比方说我红方九十六步的棋,我这个黑方走个六十步,那你就这么调就行了,调完就按确定啊,他就固定了啊。 如果说我要完完整整的走完就开始哭,那我就调个零就行了,他就全程走,开始哭,走完为止,然后走完开始哭,就轮到这个引擎去走, 是这样的意思,然后这这里也还有个云库,云库怎么设置呢?比方说我我我要用云库,那我就把它点赞了,获取交法了,然后自动求不了 啊,我要用云的残疾库的话,那我就把云的残疾库挑战了。一般的话我们就用这个 呃 d d m 的这个,呃这个格式的讲解构啊,这里的话就是最优省钱方式要点最优。 然后这个本地库邮箱的话不用改啊,这里是本地库邮箱呃,强烈执行语音库找法 啊,这个要点赞啊。如果说你要走云强集库,你要用强集库的话,你就按照这个方法就设置。如果说我不用强集库,我只用云库的开局库,那我就, 呃不用想上这个讲解库,把讲解库这些栏把它取消。如果说我要用讲解库,我只用讲解库,那我就把这个点赞啊,我用这个卢建库配合这个云库的讲解库玩啊,那我就 要把这个强力固定蓝点上就 ok 了。这个自动学习的话不要打上你,你打上没用的,打上的话只会把你的电脑的网络出卡, 因为你下的每一步棋他都会上传到云库上面啊,所以说这个自动学习的话是不需要打开的, 哪怕他默认是打仗了你,你也要把他取消掉,他没对自己没有什么好处,所以说这个这个是不能打开的, 我们调好之后把把它切换回本地库这边,然后按确定保存他设置,你再打开这里面他就已经默认了。刚才你点的,呃,设的这些全部他都帮你保存好了,我们全部全部调完这个软件以后都设置好以后 把这个软件关闭一次,他就把你保全了啊,你重新再打开就行了,这样就把你保全好了。 嗯,然后我们重新打开这个软件,刚才加起来的隐形跟开机构都在上面,还有这个设置的一些功能都会把你全部都保存好的, 哎,关闭一次他就把你保存好了啊,这些都是东西,就在都在这里了,开启库该设的都在上面,哎,这样就保存好了, 然后这里都呃,你要调的话就都帮你调好了, 这里的话就讲解的是一个隐形跟开机库的加载的方法。嗯,接下来的话看下一个视频的讲解啊,就是学习。



大家好,下面给大家讲一下使用 vba 窗体界面和皮卡与引擎结合,实现中国象棋人机对立的过程。在前段时间,我开发过四个不同 界面的象棋软件,就是 excel 版, powerpoint 版以及 auto cad 块参照版,还有这个 v b v b 版,那么 v b 版呢,我做过两三个, 那么前面四个啊,这个界面实现起来呢,也还行,但是他们前四个的特点呢,就是象棋水平,他是由这个呃,象棋云库的 提供的招法,它是一个联网的,如果没有互联网的话呢,就没有奇力了。然后今天呢,我尝试用这个 vba 窗体 来调用皮卡与引擎,那么很成功,所以呢,我用这个视频给大家讲解一下过程。好, 首先打开 excel, 然后打开那个工作部,这个文件一打开啊,就有一个功能区, vba 中国象棋,然后有三个空键,电脑红方旋转棋盘,对局,开始 这个就是界面,然后呢,呃,这个 炮二平五,红方走棋,那么黑方呢,就调用了匹马八进七,那么就会走这个黑方的招法,反过来,如果我点电脑红方旋转棋盘的话呢,就反过来了,那么这个引擎会走红方 先呢,暂时把它关了,然后给大家看一下界面怎么做做出来的。打开这个 v b a 编程画面, 这个工程结构呢?呃,为什么叫 v b a 窗体版呢?虽然说它是 excel 做的,但是这个象棋啊,它和 excel 一点关系都没有,也没有用到单元格里面的数据,整个是个空白表,它只不过用了 v b a 环境里边的一个窗, 还建了一个窗体。那么这个主要代码呢?在窗体还有模块,还有类模块里面,首先打开窗体,这个窗体呢是预先放进去的,这个棋盘怎么做出来的呢 啊?也是非常的简单,他这个空间呢,一共三十三个,有三十二个棋子儿,再加后面一个背景图啊,三十三个, 那么把这个界面啊,把窗口拉大,看这个棋盘可以随便拖动啊,这个棋子呢也是放上去的啊,那么这个当然这些棋啊,他都是图片 啊,这个图片当然你要预先准备一个来源啊,这个有大量的素材,大家既可以从互联网下也可以呢,就是找我要这里面我做了大量的这个棋子啊什么的,各种图都有啊, 所以说你要做界面的话啊,你就得有这些棋子,而且呢你还要有要有这个啊,棋盘像我刚刚给大家看的呢,就是调用呃,使用这个蓝线啊,就这个棋盘, 哎这个棋盘,所以说这个棋盘的布局也是非常的简单,那这里边 简单的给大家就是从空白做一个啊,就是这样插入一个用户窗体,然后把它适当的拉大,然后第一步首先从这里面找到图像空间啊,空间工具箱有一个图像空间,然后哎拉个方框, 然后接下来呢在这个属性窗口里面点一下 picture 哎图片,然后呢你去浏览一副棋盘图,比如说他,哎这个棋盘进来了,对不对? 然后接下来再放三十二个棋子,这个棋子怎么放呢?也是一样的,放一个这个,放一个这个空间,然后选择 picture, 然后呢再去随便找一个棋子啊, 放上这个,是啊,然后接下来呢去设置他的若干属性啊,比较重要的属性, 那么第一个就是他的有一个 outsides, outsides 呢,就是说他的尺寸是自适应的,就是根据起籽大小能够自动适应,所以点处, 这样的话,你看它的大小特别合适啊。第二个,把边框线隐藏了,所以选择 border style, 然后选择这个,哎,选择不要边框线啊, border style number, 这样他就没有变光线了。然后第三一个,呃,还要把它这个 back color 啊,他有一个背景色啊, back color 要选择调色板系统,我记得是不是有个透明 yeah, 有点忘记了啊。呃,可能是 backstyle 啊,背景样式要选择 backstyle transparent, 就是说,哎,透明背景这样的话呢,你把它放上去啊,就刚好合适啊,看不到后面的格子线, 然后同样道理,这个棋盘也是一样的呀,你要选择 out of size 为处,让它自动调整大小,然后显示整个棋盘,看特别漂亮啊,然后把它放到合适的位置。 当然你下完一盘棋,如果我要新建一局的话呢,你要把每一个棋子按照行列数整齐的对齐到这上 就可以了,特别简单。然后接下来跟大家说一下,为什么点了这个棋子挪到另一个地方,能吃对方的棋子呢?怎么把它吃掉的呢?这个地方给大家看一下代码,这地方啊,通通过一个类模块啊,实现的, 这个类模块呢,因为棋子特别多,三十二个棋子,你要说给每个棋子都设置事件的话,那么过程也会很多,需要三十二个 这个 v b a, 过程那特别繁琐。那这里面呢,我们用一个这个类模块啊,用 residents 来声明一个这个 v b a 的一个 emit 空间,这样的话呢,他就支持这个 mouse down, 就是 按下鼠标这个事件,那从这个事件里面呢,就可以判断出我点的是哪一个。这个图片啊, i m g 这个变量呢,就 就是被你点的那个棋子啊,当然可以预先设一些他的太个属性是什么的啊, 然后这样的话呢,就可以识别他是你要移动起子呢,还是你要吃子呢?这个地方有详细的代码,这个 啊去解释,那么最后如果吃子的话呢,要调用这个 go 方法哎, call go r e c r r c r, 意思就是说从从第几行第几列移动到第几行第几列,哎,做这个操作啊,就可以了。 好,那么这个是他的制作过程,也就是他的最难的地方呢,就是这个类模块啊,这个类模块,哎,通过这一个类模块,我管理三十三个空间的这个事件。 当鼠标点到棋子上做什么?当鼠标点到这个棋盘上又要做什么?那么当点到棋盘上呢, 要注意了,因为象棋棋盘啊,它是一个网格,那么鼠标有时候会点到网格的交叉点上,有时候会偏一点,那么怎么容叉呢?就是怎么容错呢?那这个地方,大家看这个代码哈,就是说 x 和 y 这个地方啊, mouse down 返回两个参数 x 和 y, 那么你要减去四点五,这个四点五呢,是棋盘的左边的那个空隙 啊,空隙的宽度减去他再减去半个棋子的宽度,棋子的宽度是四十二啊,要减去半个棋子,然后再除以那个 格子的宽度啊,因为象棋横看是八个格子,立起来垂直方向是九个格子,那么你用 x 减去它,再减去半个棋子,再除以格子数,那就是它的列数,同样道理,二二零就得到它的行数, 这样的话,你才能知道当我把一个题材走到空白的地方,他去了哪了。哎,所以啊, c 零和二二零就是一个计算过程。 好,那接下来我们看一下这个引擎的部分啊,引擎呢? 啊,其实有很多,但是目前来看啊,这个 pickaface, 它是全世界最强的象棋引擎。那么这里面哎,大家可以在互联网下载到七八个,但是 和自己的机器适应的呢,一般选择皮咖啡是 modern 点 exe 啊,选择这个引擎,那么我们在程序中调动它就可以了。好,下面呢,我把这个工作部呢,先不保存关闭一次啊,然后再次打开。 好,呃,首先呢,走一盘这个,我是红方的棋啊,这个在掉入引擎的时候啊,这个引擎这个黑窗啊,我不会隐藏,所以说呢,哎,走的时候他一闪一闪的,这个套二就解决了, 那么他会记上三个。马八进七,然后就出招,马二进三,车九平八,车一平二, 促七进一,车二进六,马二进三,兵七进一,炮八平九,车二平三, 炮九退一,马八进七,车一进一, 狙一进一,炮八,瓶酒,马三退五,哎呦,要打死狙,泡酒瓶气打我死狙。看一下啊, 这个地方如果上马是不行的啊,马骑进六的话,一打狙狙躲不开啊,炮五进四,打过去僵一下, 将一下,他把我踩了,这地方有点不会啊,要不我来个一换二吧,居九平八,他如果打我,我就把他马砍了,然后再把炮吃了。车九平八,炮九平七,炮五进四可能不太好啊。打完足 他如果走,马五进三怎么办?我打足他,马五进三弹出来了,我把他炮吃了,他打了我句我再吃个马,他再飞个象。 呃,现在如果砍马,他弹出来也是车三进一。不,车三进一了,马五进七,他有个车进一对车,车八进七,这地方有车进一,对 车一进一。哎。对对对,对了啊,其实他也可以飞象啊,飞象更加简单。我觉得他对狙,当然我不能跟他对狙,对完狙没法下了,没有狙了,那只能狗狙吧退二了,或者狙吧进而吃象吃象,他飞了退二呢?他也是飞象, 或者他会走狙八进五,狙八进五,我兵五进一,车八退二,车八进六,进六进六的话进六啊他。他这个这招切的特别准啊。 这地方不好下了,我不行,还得走炮五脱一呢,然后炮五平三打他。现在马七进六,上去的话,他会毫不犹豫砍兵的。我踏足 有点不敢呀。 马七进六,车八停七。嗯,这样的话,你车压住马,两个炮不敢动,动一个他就卡马了。呃,如果灯阻,他直接踩了我,我车八平,我吃回来 坏了,这棋要输啊,要不就蔡祖采菊。 炮五平七,炮五平七,车一平四,马六进七, 向七进五,这得补一补向了。向三进五,对方 居四进四,香三进五,车七平六, 炮七进一打狙,对方进狙切不行,炮九进四打足也是个选择,对方足七进一,要拱拱马,所以要四四进五,这样将来呢,可以回马。车六退二 对狙不行啊,我兵器进一,他砍,我进狙吃炮,他只是打我,所以狙退一,车八退一, 促七进一。哎,果然推过来了,这个毒如果飞了,他炮砸过来了,那我亏个象不行啊, 炮就进四打过去,或者是进马采狙。进马采狙,他怎么下来踩不住?兵器进一,他足迹进一拱,我 敢不敢飞?不敢飞啊, 刚才车多退一步好了,退到这里,然后走兵五进一好了。这个车退的随意了, 靠近四 促七进一,我如果马三退四,对方炮九平,炮七平八,我马三进二也还行。马三退四 加五进一。嗯,上降,这个是软件走的招吗?上降怎么回事? 上将,我来个采狙,然后再炮九将打他怎么办?马七进八,车四平一 局四平一局四平一。我来一个 coach 瓶酒, 炮七瓶酒。 将五退一。马八退六,兵九进一,炮九平一,前炮平一, 车一进四,砍过来了,推地包僵一下。哎,这个地方回马能僵一下啊。马八退六, 将五进一,炮一平三,他敢打我吗?他如果打了我,我狙八进四,将,死他啊。炮一平三, 炮七平六,炮七平六,这个棋还有有所转机。这个棋哈,兵器进一,对方退居卓玛。 兵七进一,车移退四,退居卓玛呀,我来个居八平六啊。 车八平六, 象五进三,毫不犹豫,我,我还不敢蹬他蹬的话,平局杀了他毫不犹豫啊。炮九平起打象,他把象落回去。那我把他炮踩了。算了,下个河棋吧。马六进四, 将五平六平六了,杀个四还行。车六进五,向三退五退去,将一下,他起四啦, 然后看怎么能捉他这个马呢。车六退五,车六平七,平局将一下子回去了,这炮的跑啊, 好,三平二,将六平五。 老江回去了, 这个前面的炮没有用,先平局防止他上马,但他上外马,上外马防不住呀,来个炮二进一,不让他跳马, 那么他居四进四,吃我中兵,要不就走一个居六平一,准备底线打,将车六平一,车七平八,再把马扣住。靠二平三, 车八平七,常说啊,好,三平二, 车七平八,这个地方啊,靠二处理,这个黑方常着我呢。车八平七,好,那么这一盘呢,就下到这里啊,他他常着我,这个地方我需要处理一下 他,根据这个当前局面,他觉得就是吃炮是最好的招法。当然我也可以选择变招啊,比如说走个炮九进四啊,单子炮,但是那样的话, 他一拱足吃我俩炮,那我不行。好在这个改变一下选项啊,让这个软件走红方。马二进三,促七进一, 兵七进一,马八进七,马八进七,向三进五,车一进一,炮二进四,车一平四, 马二进三,马七进八,炮二平七, 镶三进一,炮八,瓶酒。车四进二, 捉死炮了。马七进八,车九进一,他下一步居九平四,双居,吃我点四,所以我四四进五是四进五,车九平二, 这个感觉不大对劲啊。狙一平四,想开出来。车一平四,马八进七,吃了我个足, 马八进七,接下来他进去切我象腰,然后吃我中象, 所以呢,我走炮九进四,打他的狙 泡,究竟是打狙? 他如果前往下腰,我进去吃马,他兵器进一啊,是这么个变化,靠九进四, 车四进一,没有吃,没有去威胁我的中下,那他没有威胁,那我就抛弃平衣了啊。 炮七平一,担子炮多好。炮七平一,车四平二出马。 哎,这个地方有没有泡酒瓶八打他车子骑呢?没有用,马八退七, 后车停吧。哟,这个车来回闪什么意思? 要下底啊,要下底,我平抛,打一下狙, 要不就打一下马,打一下马,他反而跳边马了,然后我走马三进二, 哎,这个炮一平三感觉不错哎。哎,打马,那他上去怎么办?哎,退回去,退回去。 想一下啊,我感觉应该走炮九平七。炮九平七呢,一方面把他这个三路马压的死死的,另一方面是给我自己的马生根。炮九平七相当好啊。兵七进一。兵七进一 不能飞吗?飞了怎么了?我把它飞了,他没啥棋啊。项目进三,车八平七,车八平七,我炮一平三到达。你的马 有倒打马敢吗?这个有一定的风险呀。倒打马他他万一弃马呢? 比如说他走过兵五进一,我把他马打了,他把我象吃了之后还吃我七路走,我丢了太多。如果,呃,走这个车四进四呢,也不安全。 狙四进四,对方炮八进三打狙,我落相,他踩我中相吃个马。但是总体来看呢, 平炮可能会好一点啊,炮一平三可能会好一点。车二平七。哇,这么严厉,俩狙都过来了,那这象不能给 象直接往回退,他踩我中象,我飞了,他狙杀下来。 呃,如果我先抬车,他必然走,炮八进三,车四进四,兵五进一。 漏算了漏算了,这时候他再走兵五进一可麻烦了。车四进二,他跑, 炮二进一,打火狙啊。前车进一,炮三退三,前车进一,防不住了,这个棋回马,他进炮抽我。 厉害厉害。 马三退二呢,他进去僵一下把五马还是白吃了,你退去手呢?他进炮打你。 车四退四,这个炮二进五进五都有了,前车进一。哦哦,对,车四平三,这是霸王局啊。车七进六,车九平八, 车七进二是五退四。车七退八啊,准备进炮枪呀,是四进五, 靠二退一啊,厉害,生根之后再抽我啊。那我能让你下来吗?靠,七平二,那你还能下来吗?靠二平五, 这我不就车八进六了?丁五进一,哎,不能拱,这棋下的好,拱的话进去底线绝杀。你不拱他拱我呢,所以要占位啊。车八平四,赶紧出将 兵五进一,将五平四,炮五平六, 车四平七,不行,得先打一枪炮把平六重破,绝杀。将四进七,重破了重破了,坏了坏了。炮八平六,好七好七,厉害 好。那么这个啊,皮卡鱼象棋呢,就给大家讲到这里,至于说这个引擎的详细呢啊,以后我有时间再给大家讲好。

大家好,本节我们学习集成象棋软件加加象棋, 我们这节使用的代码是这个 chess 十一,在这个目录下面就是 chess 十一,这里面包含了加加象棋。呃,集成的代码 集成的思路就是,就是说当相机用户 就是调用相机用户的时候,他没有给我们返回一个有效的招法时,这个时候我们调用相机软件,我们将我们的这个局面还有指令传递给相机软件,等待他计算出,我们计算出就是这样一个最佳招法, 然后我们解析其软返回给我们的数据。呃,这个时候就涉及到了我们的这个 node g s 跟相机软件之间的这种交互。 呃,这个交互的难点是什么?就是说网上它没有一个现成的例子。哈,就是如果你找的话,其实你找不着一个例子,因为可能就是很多人没有做这样一个工作,所以说很多人就是没有一个这样一个例子。 我以前做过那个 pap 跟那个进程之间的这种交互, 但这个交互的话一般使用这个 e f e 这个函数,然后执行命令,然后等待它返回,因为 p p 都是串行的,所以用起来也嗯,比较简单。 我们要跟奇软嗯进行交互,首先需要知道这样一个就是跟它交互需要。呃,需要,需要,需要的这种一个协议 就是中国象棋通用引擎协议或者国际象棋的。呃,这个 uci 是 国际象棋,这个 uci 是 中国象棋, 象棋百科全书里面有有关于这个通嗯,通用协议的。呃,具体的这种介绍,它是象棋界面和象棋引擎之间的基于文本的通信协议, 等一下我打开给大家看一下, 就是这是象棋百科里面就是他关于这个,关于这个,呃通用的这个引擎协议,然后就是定义了,就是主要是,呃这种指令,主要是这种指令和反馈, 就是这里面就是他给他,他给出的这些指令的这种中文的这种含义。 呃这个 u c c i 的 话,如果你的引擎是支持 u c i 的, 使用 u c i 就 可以,如果是中文的就使用 u c i, 然后这个是它的这个协议,就是大家呃要即如果你要集中呃起软的时候,你需要读一下呃这篇文章,还有这篇文章, 这边是国际象棋的国际象棋通用引擎谐音,然后这象棋百科人,呃呃象棋百科,他他们已经翻译好了,就是这里面的这种,他基本上是一样的,基本上这些指令是一样的, 至少我们用到的基本上是一样的,我们用到的这些,呃这些指令基本上是一样的, 这是这是这个 u c c i 的 这个指令,呃和反馈,哦,这是他给出来的, 给出来,呃他给出来的这些指令和反馈,这边红色的是指令,这边是反馈,这边是反馈,反馈他,他有这种嗯,呃最佳招法,它里面的这种含义, 有时候对于,对于我们去解析这些数啊,解析这些,呃呃,他返回的信息来,就是我们对他进进行解析的时候会非常有用。 我们用到的指令是这个 position 分, 还有这个 go dumps, 就是 就是让他思考这个勾 depth depth, 我 们可以理解是呃深度是十六层,然后目太姆是那个,呃一千毫秒,就是一秒钟十六层,然后它大概就是一秒钟十六层, 呃,计算机一般情况下一秒钟它是可以搜索到十六层的,就相当于就是人类的。就是那个 八步棋嘛,就是你走八步,他走八步,加一起就是十六步,就是他一下子可以看八步棋啊,基本上基基本上就是他一秒钟,就是呃,像这种一个常规的棋软,他一秒钟,嗯,就是可以看看那么多,呃多种变化。 呃,一般的人是除非你专业的像王天一那样,否则的话对于这样一般的棋软,一般人是干不过他的。 呃,这个棋软,哦,我们就是在这个七 s 十一里面有这个七 s 按键,然后加加象棋,然后呃这是它的这个,呃,这是它的这个象棋软件的一个,就是我们从网上下载下载一个版本, 然后呃我我们这里面呃看一下,就是跟它的这种交互,首先我们导航到,就是我们导航到这样一个加加象棋的这个引擎的工作目录, 然后呢我们我们跟它进行交互,首先是调用这个程序 e s e, 我 们看到它使用的是 u c i, ok, 它使用的 u c i 也附呃以一体的,它使用 u c i 还是 u c c i, 它这个,呃它下面的命令对我们来说都是一样的。 然后我们设置局面,就是说 position, 然后传递一个局面,就是让让引擎触视换,就说我们要设置这样一个局面,然后 enter, 然后接接下来的话就是我们让它思考 go ponder depth, go ponder 是 让它在后台思考 go ponder, 你看他,他在后台进行思考,呃,这边的这个音符 dips, 还有 excel dips 一 啊, multi play score, 还有这个 nose, 还有这样啊,还有这个时间 啊,你看这个 dips 一 就是深度为一,然后这个 score 就是 一个它计算出来的分数,然后 node 是 表示他搜索了多少个局面,好像是,呃,这边是是这个 时间,呃花了啊,啊,搜索了啊,这边是速度啊,每秒搜,呃,每秒搜索了,噢,这应该是局面吧?这啊,这边是呃节点,这边是局面具,具体的含义大家可以看这个 呃 inf 的 思考,这个花费的时间以搜索的节点数,当前搜索深度分数主要便利 啊,还有这种提示信息等等等等。就是就是说如果你看不懂这呃看不懂这呃这一行代码的话,你可以参考这边的就是这个 infor 这个地方,它会帮助你理解这里面每一个字母的含义, 然后我们看一下,就是这是设置,然后思考,思考完了就是我们,我们让它 stop 一下,然后这个时候我们输入这个 stop, 然后按 enter, 然后这时候呃它向我们返回了一个 best move, 还有这个 panda, 嗯,就是后台思考这一个,呃, best move 就是 说它推荐的一个招法,当然这呃这个是后台它它会继续思思考的一个招法, 然后这个时候就可以使用这个退出, 退出,然后就可以从这里面退出来了,然后我们再进来,进来以后就是我们重新设置这个局面, 重新设置这个局面,呃,设置好这个局面的时候,我们使用这呃这呃这个命令 go def, 你看它,呃 go depth 的 话,它是直接,就是,呃,呃,直接就是执行,呃就是直接返回了它在最后一行,最后一行直接将这个结果返回给,呃,返回给了我们,就是它计算出了这个 best 目,然后然后返回给了我们, 然后我,我们,我们就是嗯,通过呃这样一个,就是跟他,呃,跟他交互的话,我们熟悉怎么就是熟悉这个奇软他返回的中文信息 啊?呃,这是我们首先就是跟他进行集成,首先需要,呃必须要掌握的就是我们知道他返回了什么数据,有知道了返回数据以后我们要对他进行解析, 我们的集成其实相对来说也,嗯,这个集成过程其实,嗯花花了我不少的时间啊。然后然后我们用到的这个技术主要是使用了这个壳的 process, 就是 no g s 里面提供了一个壳的 process, 这一个呃起用紫禁城的这样一个就是呃相对于 api 嘛。然后我们可以呃看一下它的这个 api, 这边是中文的啊,这边是一个有人创建了一个中文的这个文档,大家可以参考中文的,如果你英文不是很好的话 哦。嗯,但,但是我建议大家有空也看一下这个英文的文档。就是我们用到的这个 char 的 process, 这样一个 char process, 它这里面 char process, 它创建紫金城的话有这个 e f e e f e file, 还有 fork 和 spawn, 然后呃,当然它还有这种 think, 就是 同步的方式,上面是异步的方式,下面是同步的,就是同步的这种方式。 我们是怎么呃怎么用的?我,我们这里面就是说我们这里面是这样用的,就是说窍 process 是 用 spawn, 然后调用了这样一个,就是调用了这样一个程序,就是为这个牛加加点 e f c, 创建 e f c 进程。当然这个时候我们需要将这个引擎的这个引擎的这个路径传递过来, c w d, 然后传递,呃,这个参数里面后面跟上它的这个路径,然后这样这样话这个敲 process 会根据这个路径,然后找到这个路径下面的这个可执行文件,然后给我们创建一个紫禁,呃,创建一个紫禁城, 呃,创,呃,我们创建好了紫禁城,我们需要在我们的这个标准的呃输出里面就是去监听这个数据,就是监听就是这样一个进程, 呃,他会向这个标准的输出里面,呃会返回哪些数据啊?这个监听的过程就是就是这样,我们嗯,看看一下这个数据,有数据的话我们就对这个数据进行解析。 我,我,嗯,因为他的这个最佳招招法的话,就是就是我们通过刚才的这个地方看到他也 它返回一条数据的话,它是一条数据,一条数据返回的,当它这个数据里面包含这个 best move 的 时候,你看我们这个逻辑,它它这个字幕串里面包含了这个啊 best move 的 时候, 然后我们对它进行截取,然后我们截取到这样一个啊,截取到这样一个招法,如果这个,呃,如果这个招法不为空的话,我们返回这个招法, 呃,这今天数据就是说它一条一条返回这个数据的时候,如果这里面是返回的是这一条数据的话,我们发现这里面包含了最佳招法,然后我们就把它解析出来,然后返回 错误和进程关闭,呃,这里面用用到的就是如果它出错的话,我们这边就返回,返回一个就是未知错误,然后它结束的话 close。 我看我们这个时候也返回一个,我这边随便写了一个,其实这个时候,嗯,呃,这个时候如果他结束还没返回,呃,返回的话,就是这个积分啊,突然间结束了,我也返回了一个错误,呃, 然后我们需要向,向这个紫禁城传递指令 啊,需要向它传递指定,我们怎么可以把?就是我们刚才用到的这个,呃,指定传递给它,这个时候是使用的,呃。这个引擎后面,嗯,点 stand in 就是 标准的输入,然后这里面调用了它的这个 write, write 这样一个函数,然后将我们的这个命令在标准输入里面写入进去,然后加上一个换行符,然后然后这,呃第一条命令就是我们知道,就是我们可以看到就是设置这个局面的,只不过是这个局面,这边是,呃,这边这个局面是做一个参数传递过来的, 然后输入了,设置好这个局面以后,然后再输入一条命令,叫做这,呃,这个 go apps, 然后 move, 就是 我们刚才看到这个指定,然后输入,然后等待它返回,当它返回了的时候,然后我们就会去调用前面的这个代码对它的数据进行解析。 是不是特简单集成这个象,呃,象棋软件也,呃,也用不到什么,其实,其实如果你有一个例子的话,就是我给出来这个例子,你集成,你可能十分钟就搞定了, 然后,然后你很快就明白怎么回事了,但,呃,嗯,如果你没有例子的话,就是我刚开始的时候我找不到一个例子的话,就是我刚开始的时候我使用的这个 e s e think 这种方式, 我发现这种方式的话是那个,嗯嗯,佳佳象棋不能工作,嗯,但是象棋旋风就是象棋旋风有一个免费的版本,但是它不是开源的。呃呃,它可以给我们工作,我还测试了一下, 我们在这个注视里面就是这个安静 controller 在 这里面。呃 呃,这上面是那个集成相机云库的,相机云库啊,相机云库的,如果他这个时候没有返回这个招法的话,这个时候他会调用我们刚开始的追踪代码,就是追踪代码,就是就是我刚才已经讲过了,就是 起来的一个引擎的这个紫禁城,然后然后对他输入指令,等待他的数据 啊。但是你看在这个注石里面啊,这些注石里面,你看我,我曾经使用过这个去解,呃,去尝试使用这个,呃,象棋旋风,象棋旋风 旋风的这种执行,我然后这个时候我使用的是,呃,因,因为我比较喜欢是同步的这种执行方式,你执行完了之后然后就返回,我当时发现了一个问题,就是那个,呃相机旋风这种方式可以工作,相机旋风这种方式可以工作,那个叫什么了 啊?我这里面就是专门写了一个文档,我专门写了一个文档,就是这个家家象棋集团,就是我集团的时候专门记录了这个过程啊,记记录了这个过程跟他的这种交互,就是文档到时候也也也考回给大家, 然后他思考还要这个停止思考啊,这样,然后我开始的时候就就用这种方式集成了。哎,我,我集成,集成过后以后,我走棋的时候,我发现这个引擎他啪打了我一个马,呃,这一招他他是 就是我,我中炮打他中兵了,他打了我一个马,然然后我发现他他他总是呃特特别的奇怪,就是那个加加象棋,然后 我发现集成不行,就是呃换换了一个呃引擎,哎呦,我发现这种方式不行,那我换换一个引擎吧,我换换成象棋,呃,换成了那个 象棋巫师,呃,他也不行,是象棋巫师吧?呃,这一面,呃。后来换成了旋风,哎,发现这种模式可以,他在,嗯,他在判断模式下面可以 啊,啊,旋风的免费版,然后可以,然后换成了他免费版。这个是这边是我是红棋,然后这边是个黑棋,你看我被他压制着,就是基本上下,不过他就是下到这个局面的时候,我感觉就是整个棋面你看已经很被动了, 然后然后后面走着走着就输给他了,就是说我,我这下播象棋,呃旋风的这个免费版的,就是在在这里面就是说我们给这一种方式,他这个象棋旋风的话,如果你要集成象棋旋风的话,但我这个版本就是他,他是可以这样工作的 啊,因为这个象棋旋风它是一个商业软件,这个佳佳象棋是一个免费的,我可以,我可以,我,我可以包包含着它,所以说我们的这个例子里面我们就就给出来了这个佳佳象棋的这个例子 啊。呃,奇,还还有一件奇怪的事,就是奇怪的事是这样的, 就是说我们换了这种方式,我们换了这种新的这种方式以后,我们换了这种新的这种方式以后,换了这种呃,使用它的这个 spa 创建一个紫禁城这种异步的这种方式以后,那个,嗯,佳佳相机可以了,相机旋风又不可以了, 相机旋风也不可以了。所以说也因为这种相机软件他不是特别标准的,所以说我们集成的时候要多试一下他,大概的就是你需要多测试一下,就是他他测测的测试就是反复测试,也是很很费时间的。 我我我这里面为了方便测试这个引擎的话,我专门写了一个,就是这样一个回呃回调,为了方便的测试这个引擎,你看我在这个呃 引擎的这个路由里面我添加了一个,就是太呃一个路径,专门用来测试引擎,这样的话就不用走齐了。我我我专门的去看一下,就是我给出来一个这个局面,然后还有这个指令,然后让他去执行,让他去执行 啊,让让他去执行这样一个指令。后来,后来你看你看就是后后,后来我找到了这这样一种方法,找到这种方法他可以,他可以工作,他可以工作,开始的时候是是使用的这种方式,使用的这种方式啊特别奇怪。 然后然后我们可以看一下,就是呃在这个地方,在这个地方你看你看这个地方, 当他访问这个路径的时候,他会返回我们一个接收的这一个光,你看在这个哦,因为我们在代码里面加上了一个控控制台的这种输入输出, 我们可以看一下。呃,这个控制台,你看他 stand 站着,当他有 data 的 时候,你看他,他都把这些数据给输出出来了, 就是在控制台里面,在控制台里面你看它 send out, 它把这个 info 文件都输出来了,所以说我们前面,我们前面看那个,看这个还是有用的,看这个我们至少知道这个思考信息里面,然后我们如何去解析它, 然后然后这边这,呃这种引擎的信息也都可以输出出来,就是说我,我访问这个路径直接就调用了这个引擎,它是否它是否是正常的,然后我就可以初步的做一下判断。 有时候我写代码就是专门写一个函数,是专门用来测试的,然后测试好了之后,然后他工作基本上正常了,然后再放在真正去调用它的这个位置, 然后整个的这个集成,呃,集成过程就是,呃,呃,就基本上是这样,然后就 就说就说,呃,这个时候就是加加象棋可以了啊,加加象棋可以了以后就说我,我对他进行测试,发现加加象棋的水平还可以,哈哈,也是我吓不过他, 也是我下,哎,下不过他,就是你看这个时候这佳佳向你走的,哦,我是红凡,我下到最后也是输给他了啊,就是就是我,我输给他的以后我就发现,哦,原来原来那个就是是下棋软件,还是很厉害的, 然后这个,这个就是整个的这这样一个集成的过程。然后,呃,这个佳佳象棋我们用到的是它的传统引擎,然后它的开源地址是在这个地方 jaguar, 呃,这个地方它是用传统, 呃,犯法的中国相机引擎,呃,不过在十年前,差不多十年前已经停止开发了,原代码已经开源。我看过他的原代码啊,嗯,跟那个啊,嗯,那个叫 stillfish, 就是 啊比昂那一次应该从上面改,呃,修改的,不过啊那个李国来他作者是李国来,李国来老师应该做到大量的修改。 然后这边这边是这个佳佳象棋,啊啊,他还支持这个,有,呃,有本土,你优肆下面你,你也可以对他进行翻译。 然后这边是这个佳佳象棋,他有最新的这种版本,是那个就是基于这种引擎的,基于这种,呃,基于这种就是那种 啊,比较现代的就是深度学习的就是这种,呃,这样,这样神经网络的这样一个相机引擎,呃,这 他这面测试的是已经他的这种,呃其力已经超过了这样一个我们用到的这样一个相机软件,然而我觉得他就是传统的这样一个相机软件,一般的强大师都下,不过就是传统的这种相机引擎, 我们本节课就介绍到这里,谢谢大家。