LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

オセロにおけるビットボード

オセロにおけるビットボードでは、オセロにおけるビットボードを使用した計算法を説明する。8x8 = 64 マスについて、石が存在するかどうかを1ビットで表すデータ構造。ひとつの石種について64ビット、オセロは黒白2種類の石があるので、64ビット変数 x 2 で盤面を表すことができる。相手の石を挟んだかどうかなどの判定や、石の反転などの処理を再帰やループを使わず、シフトや論理演算だけで複数の石について同時に行うことができる(ビットパラレル性)ため、通常のデータ構造よりも処理が高速になる。オセロの盤面は 8x8 = 64 マス、石は白黒2種類なので、64ビット整数を2つ用意すれば盤面を表現することができる。ネガマックス、ネガアルファなどの反転系のゲーム木探索アルゴリズムでは、次のレベルをコールするときに、盤面の先後を反転する必要があるが、オセロの盤面を2つのビットボード black, white で表し探索関数の引数として渡す場合は、以下のように引数で渡すときに順序を入れ替えるだけでよい。オセロのマスは左上が原点で、水平方向に A, B, C, ...H, 垂直方向に 1, 2, 3, ...8 で指標され、A1, D3 の様に指定される。水平方向を col (0..7), 垂直方向を row (0..7) とすると、マスに対応するビットボードのビット番号を col + row * 8 とするとよい。黒の着手位置を BitBoard mv; それにより反転する位置を BitBoard rev; とすれば盤面の更新処理は以下のように記述できる。配列で盤面を表した場合、反転する石の数に比例して反転処理のコストがかかるが、ビットボードを用いれば、複数マスを同時に処理できるので、上記のように反転する石数に依存せず、一定コストで処理を行うことができる。着手を取り消して元の状態に戻す処理も、上記の反転処理と同一になる。ゲーム木探索で次の深さの関数をコールするとき、引数で白黒ビットボードを渡すのであれば、以下のようにすれば盤面の状態を戻す必要はない。合法着手である条件は以下の通りである。連続する相手の石が反転パターンとなる。以下にループを用いる場合のコードを示す。
このコードでは1方向についてのみチェックしているが、実際は8方向全てについてチェックしなくてはいけない。BitBoard transfer(BitBoard m) は特定方向へ移動したパターンを返す。右方向への移動であれば、と定義できる。ひとつの方向について反転する相手の石数の上限は6だから、ループを用いずそれぞれの場合について以下のように展開することができる。

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。