我正在使用位棋盘(bitboards)来表示国际象棋棋盘并检查合法移动。我卡在了滑动棋子攻击中源方格和目标方格之间的占用计算上。我不想通过查找表来解决问题,所以我正在尝试弄清楚是否可能在没有查找表的情况下获取介于两个方格之间的方格掩码。例如,在以下棋盘中,c4上有一枚车(Rook):
8 0 0 0 0 0 0 0 0
7 0 0 0 0 0 0 0 0
6 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0
4 0 0 R 0 0 0 0 0
3 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
a b c d e f g h
给定一个表示空位(或占用位)的位棋盘和一个伪有效移动Rf4(车可以从c4移动到f4),如何获得d4-e4方格的掩码(不包括源和目标方格)?
我假设,一旦这个问题清楚了,垂直移动将很容易计算,并且可以通过使用旋转的位棋盘来计算对角线移动。
编辑:位棋盘用ulong/unsigned int64表示,每8位代表实际棋盘的一行/列。