1.2 石を返す処理 |
今回は、前回紹介した変数を用いて、石を返す処理の説明をします。
石を返す処理は、次のように行います。
以下に書かれているのは黒番で返す処理だけですが、少し変更するだけで、白番での処理もできるようになります。 /* 黒番で石を返す処理 flip_black(マスのインデックス) 返り値は返した石の数 */ int flip_black(int m) { int n=0; n+=flip_line_black(m, -10); n+=flip_line_black(m, -9); n+=flip_line_black(m, -8); n+=flip_line_black(m, -1); n+=flip_line_black(m, 1); n+=flip_line_black(m, 8); n+=flip_line_black(m, 9); n+=flip_line_black(m, 10); if(n>0) ban[n]=BLACK; return n; } /* 黒番で1方向の石を返す処理 flip_line_black(マスのインデックス, 返す方向) 返り値は返した石の数 */ int flip_line_black(int m, int dir) { int i=0, n=m+dir; while(ban[n]==WHITE) n+=dir; if(ban[n]!=BLACK) return 0; n-=dir; while(n!=m){ ban[n]=BLACK; n-=dir; i++; } return i; }
上の関数では石を置くマスが空いているかどうかを調べていないので、関数を呼び出す前にあらかじめそれを調べておく必要があります。
石を返さずに、あるマスに石を置けるかどうか、または石を置いた場合に何石返せるかを知りたい場合があります。 |
トップに戻る 1.1 盤面の表現 1.3 返した石を元に戻す処理 |