我有一个国际象棋人工智能,它并不总是知道它是否可以城堡。当移动计数器的值等于零时,鲁克斯和国王有移动计数器,只允许他们参与城堡。当移动计数器为0且没有阻挡城堡的碎片时,就会出现问题,但是敌人有能力从远处阻挡城堡。
例如,想象一下你是白人,你想建造一座女王式的城堡。移动计数器为零,所以你的棋子没有移动,你的白骑士、主教和王后也不见了。你以为你可以城堡。但你实际上不能城堡,因为有一个明确的攻击线,一直延伸到第一排,你有你的白车和白国王的敌人的车。如果你扔下去,国王将不得不越过黑车的进攻线。你是人工智能,这种情况把你搞砸了。
现在,你,人类可能知道一个方法,使你的人工智能更聪明,当涉及到抛弃。作为一个程序员,你将如何解决这个问题,使人工智能不再犯这个错误?
这里有更多的信息..。我的董事会代表是int board8。我有一个数组,它保存了所有可能的白色片段最多2个皇后,17个片段总数,int whitePieces17,以及包含所有可能的黑色片段的数组,int blackPieces17。此外,为了跟踪移动,有一个moveTo[]数组和一个moveFrom[]数组,每个层都包含移动部件在移动后和移动之前的副本。最右边的整数位是y值,4位十六进制值是x值。整数块还包含表示片类型、片色、whitePieces数组或blackPieces数组中的碎片位置的字节数据,以及一个移动计数器,该计数器跟踪移动次数,并用于确定国王或鲁克是否移动过,因此无法进行城堡操作。
发布于 2013-11-02 09:03:16
很久以前也有同样的问题(1978年在fortran)。
除了您已经准备好的测试(有select rook移动,有国王移动,它们之间的行是空的),您需要确保:
国王目前没有受到控制。
对于确定国王是否被检查的代码,可以使用相同的代码来查看国王是否会在两个感兴趣的方块中被检查。因此,“假装”移动国王,每次1个空格左(或右),并运行测试。
2.其他学究思想:
当rook被“移动”时设置的标志也需要设置,那就是rook被选中了。测试一辆车是否在角落是不够的,因为它可能是另一辆车。
一个被提升到一辆车,然后不移动的典当不能用于铸造。扔在文件上
备注:
而不是17件,考虑停留在16块。(你可以有0-9皇后,0-10钩,0-10主教,0-8卒,1公斤,等等)
车在或经过的空间可能会受到来自另一边的威胁。
https://stackoverflow.com/questions/17156751
复制相似问题