最近、自分のチェスエンジンを開発しようと思って魔法のビットボードを勉強してきました。私はビットボードのコンセプトに遭遇しました。役に立つトピックの1つはサイトhttp://www.rivalchess.com/magic-bitboards/からのものでしたが、そこに与えられた例はルックとビショップの動きだけです。偶然、女王のための占有マスクを生成するコンセプトを共有できる人はいますか?クイーンズチェスのためのビットボード占有マスクを生成する方法は?
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;
}
}
2つのマスクのビット単位のORではないのですか? –
これらはハードコーディングできませんか? –
投稿コード1)がコンパイルされません。 2)ステートメントを挿入した後:#includeと#include がコンパイルされます。次に、関数を呼び出すmain()を追加します(結果としてクリーンなコンパイルが行われます)。コードを実行しようとします。結果のマスクは正しくありません。詳細については私の答えを参照してください –
user3629249