我如何正确检查国际象棋AI中的castling?

我有一个国际象棋AI,并不总是知道它是否可以成为城堡。 当移动计数器的值等于零时,车和国王有移动柜台,只允许他们参与城堡。 当移动计数器为零且没有任何物件阻挡城堡时会出现问题,但敌方的物件有能力远离城堡。

例如,假设你是白色的,你想制作一个女王城堡。 移动计数器为零,所以你的棋子已经移动了零点,你的白色骑士,主教和皇后都不在了。 你认为你可以城堡。 但实际上你不能城堡,因为有一个敌人的车,有一条清晰的攻击线,一直延伸到你有白车和白王的第一排。 如果你摔了一跤,国王就不得不越过黑方的攻击路线。 你是AI,这种情况让你感到困惑。

现在你(人类)可能会知道一种方法来让你(AI)更加聪明。 作为一名程序员,你会如何解决这个问题,使人工智能不再犯这个错误?

这里有一些更多的信息.​​.....我的棋盘表现形式是int board [8] [8]。 我有一个包含所有可能的白色碎片[最多2个皇后,总共17个碎片],int whitePieces [17]和保存所有可能的黑色碎片的数组,int blackPieces [17]。 另外,为了跟踪移动,还有一个moveTo []数组和一个moveFrom []数组,其中包含每个层的移动块移动之后和移动之前的副本。 整数部分的最右边的位是y值,从那里开始的4位十六进制值是x值。 整数片还包含表示片类型,片颜色,whitePieces阵列或blackPieces阵列中棋子位置的字节数据,以及跟踪移动次数的移动计数器,用于确定国王或白嘴鸦已经移动,因此不能城堡。


你的人工智能应该有某种类型的0级“威胁网格”,它显示了每个敌人的下一回合可以移动的位置。 使用此信息查看国王与白嘴鸦之间的方格是否已被占用或受到威胁。


很久以前也有同样的问题(1978年 - 在fortran)。

除了你准备提到的所有测试(有选择的车移动,有国王移动,在它们之间排空),你需要保证:

国王目前没有受到检查。

通过确定国王是否被检查的代码,可以使用相同的代码来查看国王是否将检查2个方格。 所以“假装”移动国王,一个空间在左边(或右边)2个空格处运行测试。

另外两个迂腐的想法:
当车被“移动”时,设置的标志也是需要设置的。 测试看看是否有车在角落是不够的,因为它可能是另一个车。

一个棋子晋升到一个白嘴鸦然后不移动不能用于castling。 在一个文件上投掷


笔记:
可以考虑16岁(而不是17个)。(你可以有0-9个皇后,0-10个白嘴鸦,0-10个主教,0-8个典当,1公斤等等)

另一方面可能会威胁到白嘴鸦正在或经过的空间。

链接地址: http://www.djcxy.com/p/84661.html

上一篇: How do I correctly check for castling in chess AI?

下一篇: d chess board recognition