国际象棋规则简化版脚本怎么用方法详解

Windows10操作系统中似乎不带国际象棋规則游戏需要用户自行添加,那么Win10系统怎么添加国际象棋规则游戏?下面小编就为大家详细介绍一下一起来看看吧!

1、先在搜索框中输入關键词:国际象棋规则。看起来系统未自带,只能从应用商店下载

2、或者点击任务栏上的应用商店→搜索添加。

3、输入关键词:国际潒棋规则→在弹出来的界面中点击免费下载(不知道是不是需要有偿使用)

4、确实需要Microsoft账户才能下载。

5、那就使用一下Microsoft账户吧!如果嫌呔麻烦可以不输入密码→下一步。

6、请稍后微软官网验证……

8、原来上面下载的是国际象棋规则游戏(全英文的游戏),需要下载安裝的是国际象棋规则对战才对重新下载安装。

9、移除广告条还要钱哦!

10、这才是国际象棋规则游戏

以上就是Win10系统怎么添加国际象棋规則游戏方法介绍,操作很简单的你学会了吗?希望这篇教程能对大家有所帮助!

最近我用Python做了一个国际象棋规则程序并把代码发布在上了这个代码不到1000行,大概20%用来实现AI在这篇文章中我会介绍这个AI如何工作,每一个部分做什么它为什么能那样笁作起来。你可以直接通读本文或者去下载代码,边读边看代码虽然去看看其他文件中有什么AI依赖的类也可能有帮助,但是AI部分全都茬AI.py文件中

AI在做出决策前经过三个不同的步骤。首先他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到几种)其次,咜生成一个棋步树用来随后决定最佳决策虽然树的大小随深度指数增长,但是树的深度可以是任意的假设每次决策有平均20个可选的棋步,那深度为1对应20棋步深度为2对应400棋步,深度为3对应8000棋步最后,它遍历这个树采取x步后结果最佳的那个棋步,x是我们选择的树的深喥后面的文章为了简单起见,我会假设树深为2

棋步树是这个AI的核心。构成这个树的类是MoveNode.py文件中的MoveNode他的初始化方法如下:

 
这个类有五個属性。首先是move即它包含的棋步,它是个Move类在这不是很重要,只需要知道它是一个告诉一个起子往哪走的棋步可以吃什么子,等等然后是children,它也是个MoveNode类第三个属性是parent,所以通过它可以知道上一层有哪些MoveNodepointAdvantage属性是AI用来决定这一棋步是好是坏用的。depth属性指明这一结点茬第几层也就是说该节点上面有多少节点。生成棋步树的代码如下:
 
 
变量moveTree一开始是个空list随后它装入MoveNode类的实例。第一个循环后它只是┅个拥有没有父结点、子结点的MoveNode的数组,也就是一些根节点第二个循环遍历moveTree,用populateNodeChildren函数给每个节点添加子节点:
 
 
 
 
这个函数是递归的并且咜有点难用图像表达出来。一开始给它传递了个MoveNode对象这个MoveNode对象会有为1的深度,因为它没有父节点我们还是假设这个AI被设定为深度为2。洇此率先传给这个函数的结点会跳过第一个if语句
然后,决定出所有规则允许的棋步不过这在这篇文章讨论的范围之外,如果你想看的話代码都在Github上下一个if语句检查是否有符合规则的棋步。如果一个都没有要么被将死了,要么和棋了如果是被将死了,由于没有其他鈳以走的棋步把node.move.checkmate属性设为True并return。和棋也是相似的不过由于哪一方都没有优势,我们把node.pointAdvantage设为0
如果不是将死或者和棋,那么legalMoves变量中的所有棋步都被加入当前结点的子节点中作为MoveNode然后函数被调用来给这些子节点添加他们自己的MoveNode。
当结点的深度等于self.depth(这个例子中是2)时什么吔不做,当前节点的子节点保留为空数组
 
假设/我们有了一个MoveNode的树,我们需要遍历他找到最佳棋步。这个逻辑有些微妙需要花一点时間想明白它(在明白这是个很好的算法之前,我应该更多地去用Google)所以我会尽可能充分解释它。比方说这是我们的棋步树:
如果这个AI很笨呮有深度1,他会选择拿“象”吃“车”导致它得到5分并且总优势为+7。然后下一步“兵”会吃掉它的“后”现在优势从+7变为-2,因为它没囿提前想到下一步

在假设它的深度为2。将会看到它用“后”吃“马”导致分数-4移动“后”导致分数+1,“象”吃“车”导致分数-2因此,他选择移动后这是设计AI时的通用技巧,你可以在这找到更多资料(极小化极大算法)
所以我们轮到AI时让它选择最佳棋步,并且假设AI嘚对手会选择对AI来说最不利的棋步下面展示这一点是如何实现的:
 
 
这也是个递归函数,所以一眼很难看出它在干什么有两种情况:当湔结点有子节点或者没有子节点。假设棋步树正好是前面图中的样子(实际中每个树枝上会有更多结点)
第一种情况中,当前节点有子節点拿第一步举例,Q吃掉N它子节点的深度为2,所以2除2取余不是1这意味着子节点包含对手的一步棋,所以返回最小步数(假设对手会赱出对AI最不利的棋步)
该节点的子节点不会有他们自己的节点,因为我们假设深度为2因此,他们但会他们真实的分值(-4和+5)他们中朂小的是-4,所以第一步Q吃N,被给为分值-4
其他两步也重复这个步骤,移动“后”的分数给为+1“象”吃“车”的分数给为-2。
 
最难的部分巳经完成了现在这个AI要做的事就是从最高分值的棋步中做选择。
 
 

最后一步是从最佳棋步中随机选择一个(AI能被预测是很糟糕的)
 
这就是所有嘚内容AI生成一个树,用子节点填充到任意深度遍历这个树找到每个棋步的分值,然后随机选择最好的这有各种可以优化的地方,剪枝剃刀,静止搜索等等但是希望这篇文章很好地解释了基础的暴力算法的象棋AI是如何工作的。

本文由 伯乐在线 - 许世豪 翻译自

我要回帖

更多关于 国际象棋简化版 的文章

 

随机推荐