好的,我有这个用 bitboard 构建的国际象棋应用程序,我想检查给定的移动是否将对手的棋子置于将死状态。
验证检查情况很容易。你建立敌方棋子攻击AND
的位掩码,你用对面国王的位掩码,如果结果不为零,你有一个检查。
但是检查伴侣呢?将死是在检查后将发生的事情。我的意思是,我移动了一块,应用程序检测到移动生成了一张支票。那我怎么知道这张支票是否是支票伴侣?我是否必须为对手所有可能的游戏生成所有可能的位板并检查是否有可以将国王从检查中移除的移动?这似乎不切实际。还有其他方法吗?
我不认为有任何其他方式。对我来说,最终算法看起来像: