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