チェスとチェッカーから得た非常に効果的な表現であるbitboardsを使用します。概念はビットでピースを表現することであり、プレーヤーのピースのセットはビットのフィールドで表現できます。少なくとも 49 ビットが必要なので、64 ビットの整数が適切に機能します。
これは非常にメモリと計算効率の高い表現であり、他の表現よりも表現力があります。ビット演算を使用して、単一のピースとセット全体の両方を一度に簡単に操作できます。提案されているような配列ベースの表現では、ビットボード ( 、、、、など)byte[][]
を使用して単一の演算子で表すことができる操作に対して、あまりにも多くのループを実行する必要があります。&
|
^
<<
>>>
セットされたビットはプレイヤーの駒を与えます。たとえば、これは 1 人のプレーヤーのビットボードかもしれません。他のプレイヤーのために別のビットボードが必要になります。
0000000000000000000000000000000010000000001000000
10 進数では、これは になりますlong bitboard = 65600;
。いくつかの新しい行を挿入すると、次のようになります。
0000000
0000000
0000000
0000000
0000100
0000000
1000000
これを効率的に処理するために、いくつかのテーブルを事前計算できます。したがって、32 番目のビット/正方形の中央にあるピースについては、次のようsurrounding
に使用すると次の表がsurrounding[square]
得られる可能性があります。
0000000
0000000
0000000
0001110
0001010
0001110
0000000
&
次に、ビットごとの演算子を使用して、これと相手のビットボードとの交点を見つけるか、 との結合|
、または との差^
などを取得<< 7
できます。多くの表現力があり、これらの操作のほとんどは1 クロック サイクルしかかからないため、非常に効率的でもあります。