我有一个国际象棋 AI,它并不总是知道它是否可以城堡。车和国王有移动计数器,仅当移动计数器的值等于 0 时才允许他们参与城堡。当移动计数器为零并且没有棋子阻挡城堡时会出现问题,但是敌人有能力从远处阻挡城堡。
例如,假设你是白人,你想建造一座王后城堡。移动计数器为零,所以你的棋子移动为零,你的白马、主教和王后不见了。你认为你可以城堡。但你实际上不能城堡,因为有一个敌方车有一个清晰的攻击线,一直延伸到你有白车和白王的第一排。如果你城堡,国王将不得不越过黑车的攻击线。你是人工智能,这种情况把你搞砸了。
现在,你 [人类] 可能知道一种方法可以让你 [人工智能] 在易位方面变得更聪明。作为程序员,你会如何解决这个问题,让 AI 不再犯这个错误?
这里有更多信息...我的板表示是 int board[8][8]。我有一个包含所有可能的白色棋子的数组 [最多 2 个皇后,总共 17 个棋子],int whitePieces[17],以及包含所有可能的黑色棋子的数组,int blackPieces[17]。此外,为了跟踪移动,还有一个 moveTo[] 数组和一个 moveFrom[] 数组,其中包含每个层的移动片在移动之后和移动之前的副本。片段整数的最右边位是 y 值,4 位十六进制值是 x 值。整数棋子还包含表示棋子类型、棋子颜色、棋子在 whitePieces 数组或 blackPieces 数组中的位置的字节数据,以及跟踪移动次数并用于确定是王还是车的移动计数器已搬家,因此无法建城。