c - 如何为国际象棋中的女王移动生成位板占用掩码?

标签 c

最近在研究魔位棋盘,希望尝试开发自己的国际象棋引擎。我遇到过位板的概念。其中一个有用的主题来自网站 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/

相关文章:

java - Arduino和Java之间的校验和函数

c - 如何动态创建字符串数组,同时从数组条目中删除空格?

c - 结构指针数组段错误

C编程求二维数组的长度

c - 如何创建一个文本文件,在给定路径中该文件不存在

java - JNI异常: jarray is an invalid global reference

c - 如何在 Linux 中获取键盘状态?

c - void * 作为函数参数

Java Swing 应用程序卡住

c++ - getchar()有什么用?