Bitboard作るのたいへん

とりあえずこんな感じで、任意の座標のビットパターンを取得。
山下さんが試していたビット構造でまずはやってみました
(回転とか考えるともっと効率の良い方法があるらしいけど、とりあえず)


山下さんのメモより

各bitの割り当ては下のようにしてます。

                  9 8 7 6 5 4 3 2 1
333333333          0  1  2  3  4  5  6  7  8 一
333333332          9 10 11 12 13 14 15 16 17 二
222222222         18 19 20 21 22 23 24 25 26 三
222222222         27 28 29 30 31 32 33 34 35 四
222222222         36 37 38 39 40 41 42 43 44 五
222211111         45 46 47 48 49 50 51 52 53 六
111111111         54 55 56 57 58 59 60 61 62 七
111111111         63 64 65 66 67 68 69 70 71 八
111111111         72 73 74 75 76 77 78 79 80 九

               a3                                   a2                              a1
xxxxxxxxxxxxxxx33333333333333333 22222222222222222222222222222222 11111111111111111111111111111111
0123456789abcdef0123456789abcdef 0123456789abcdef0123456789abcdef 0123456789abcdef0123456789abcdef
printf("unsigned long a[9][9][3]={\n");

for(int y=0;y<=8;y++)
{
	for(int x=0;x<=8;x++)
	{

unsigned long temp=0x80000000;
		printf("{ ");
		if( (x+y*9)<=16 )
		{
			printf("0x%08x ,",temp>>((x+y*9))+15 );
			printf("0x00000000 ,");
			printf("0x00000000 },");
		}
		else if( (x+y*9)<=48 )
		{
			printf("0x00000000 ,");
			printf("0x%08x ,",temp>>((x+y*9)-17) );
			printf("0x00000000 },");
		}
		else
		{
			printf("0x00000000 ,");
			printf("0x00000000 ,");
			printf("0x%08x },",temp>>((x+y*9)-17) );
		}
		printf("\n");
	}
}

出力結果

unsigned long a[9][9][3]={
{ 0x00010000 ,0x00000000 ,0x00000000 },
{ 0x00008000 ,0x00000000 ,0x00000000 },
{ 0x00004000 ,0x00000000 ,0x00000000 },
{ 0x00002000 ,0x00000000 ,0x00000000 },

……中略……

{ 0x00000000 ,0x00000000 ,0x00000008 },
{ 0x00000000 ,0x00000000 ,0x00000004 },
{ 0x00000000 ,0x00000000 ,0x00000002 },
{ 0x00000000 ,0x00000000 ,0x00000001 }

}

あとはこの配列を使って、駒毎の座標毎の利きを表現するビットパターンを作る必要が……
こういうの作るの苦手なんで疲れました。休憩