好的,我有这个用位板构建的国际象棋应用程序,我想检查给定的一步棋是否将敌棋子将死。
验证检查情况很容易。您构建敌方棋子攻击的位掩码,然后使用对面国王的位掩码
AND
,如果结果不为零,则您有一个检查。
但是将军呢?将死是检查后将发生的事情。我的意思是,我移动了一块,应用程序检测到该移动生成了一张支票。那么我怎么知道这张支票是不是将死呢?我是否必须为对手的所有可能的玩法生成所有可能的位板,并检查是否有可以将国王从检查中移除的举动?这似乎不切实际。还有别的办法吗?
我认为没有其他办法。对我来说,最终的算法如下:
我将每种类型的棋子放在国王所在的位置,并从那里获取它的走法。如果它的动作碰到了同类型的敌方棋子,我知道它会制止王。知道哪个棋子正在攻击对于其他功能也很有用。