最近在研究魔位棋盘,希望尝试开发自己的国际象棋引擎。我遇到过位板的概念。其中一个有用的主题来自网站 http://www.rivalchess.com/magic-bitboards/但那里给出的例子仅适用于 Rook 和 Bishop 运动。有没有人可以分享为女王生成占用掩码的概念?我在此处粘贴用于 Rook 和 Bishop 的代码:
void generateOccupancyMasks()
{
int i, bitRef;
uint64_t mask;
for (bitRef=0; bitRef<=63; bitRef++)
{
mask = 0;
for (i=bitRef+8; i<=55; i+=8) mask |= (((uint64_t)1) << i);
for (i=bitRef-8; i>=8; i-=8) mask |= (((uint64_t)1) << i);
for (i=bitRef+1; i%8!=7 && i%8!=0 ; i++) mask |= (((uint64_t)1) << i);
for (i=bitRef-1; i%8!=7 && i%8!=0 && i>=0; i--) mask |= (((uint64_t)1) << i);
occupancyMaskRook[bitRef] = mask;
mask = 0;
for (i=bitRef+9; i%8!=7 && i%8!=0 && i<=55; i+=9) mask |= (((uint64_t)1) << i);
for (i=bitRef-9; i%8!=7 && i%8!=0 && i>=8; i-=9) mask |= (((uint64_t)1) << i);
for (i=bitRef+7; i%8!=7 && i%8!=0 && i<=55; i+=7) mask |= (((uint64_t)1) << i);
for (i=bitRef-7; i%8!=7 && i%8!=0 && i>=8; i-=7) mask |= (((uint64_t)1) << i);
occupancyMaskBishop[bitRef] = mask;
}
}
最佳答案
我认为您可以简单地对这两个掩码进行按位或运算:
for (bitRef=0; bitRef<=63; bitRef++)
{
occupancyMaskQueen[bitRef] = occupancyMaskRook[bitRef] | occupancyMaskBishop[bitRef];
}
关于c - 如何为国际象棋中的女王移动生成位板占用掩码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36185580/