1.1 定数と関数の定義 |
本章ではリバーシ盤面の処理について説明します。
まず本節で定数と関数の概要を説明し、具体的な処理については次節以降で説明します。
本節では定数と関数の一覧を載せているだけなので軽く読む程度にしてください。
まずはじめに盤面処理で使用する定数を列挙します。
使用頻度の高い値を定数として定義しておくことで、実装が行いやすくなります。
盤面の大きさ(1辺のマスの数)を以下で定義します。
この値を使用することで、盤面の大きさに変更が生じてもソースコードの修正が少なくて済むようにします。
/* 盤面の大きさ */ #define BOARD_SIZE 8
あるマスにどの石が置かれているのか表す定数を定義します。
また盤外を表す定数"WALL"も定義しておきます。
/* マスの状態 */ #define WALL -1 #define EMPTY 0 #define BLACK 1 #define WHITE 2
マスの位置または手の種類を表す定数を定義しておきます。
なぜマスの位置がこの値になるのかについては、盤面の実装に関係するのでそのときに説明します。
また以下の定数は8x8の盤面でしか使用できないので、盤面の大きさを変更したら修正する必要があります。
#define PASS -1 #define NOMOVE -2 #define A1 10 #define B1 11 (中略) #define G8 79 #define H8 80
次に関数の説明を行います。
以下の関数があればリバーシの対局を行うのに特に支障はないと思います。
説明の前にいくつか注意点を挙げておきます。
盤面の操作にはあらかじめBoardクラスを生成する必要があります。
そして生成したBoardクラスが必要なくなったら、Boardクラスを破棄してください。
具体的な方法についてはmain.cを参考にしてください。
またルールに従った盤面操作を行うためには、呼び出し側で手番の管理を行う必要があります。
手番の管理をうまく行わないと、例えば黒番で連続2回着手するといったことが可能になってしまいます。
盤面クラスの生成を行います
引数 なし
戻り値 生成した盤面クラス。生成に失敗したらNULLを返します
盤面クラスの破棄を行います
引数
self : Boardクラスへのポインタ
戻り値 なし
盤面の初期化を行います
引数
self : Boardクラスへのポインタ
戻り値 なし
指定されたマスの状態を返します
引数
self : Boardクラスへのポインタ
in_pos : 状態を取得するマスの位置
戻り値 指定されたマスの状態
指定された状態のマスの数を返します
引数
self : Boardクラスへのポインタ
in_color : 数を取得するマスの状態
戻り値 指定された状態のマスの数
指定された色、位置で着手を行います
引数
self : Boardクラスへのポインタ
in_color : 着手する石の色
in_pos : 着手するマスの位置
戻り値 着手できた場合には返した石の数(着手したマスの石は数に含まない)。着手できない場合には0
1手戻します
引数
self : Boardクラスへのポインタ
戻り値 直前の手によって返した石の数(着手したマスの石は数に含まない)。盤面が初期状態の場合には0を返す
指定した色、マスに着手した場合に何石返すかを調べます
引数
self : Boardクラスへのポインタ
in_color : 着手する石の色
in_pos : 着手するマスの位置
戻り値 着手できる場合には返す石の数(着手するマスの石は数に含まない)。着手できない場合には0
指定した色、マスに着手できるかどうかを調べます
引数
self : Boardクラスへのポインタ
in_color : 着手する石の色
in_pos : 着手するマスの位置
戻り値 着手できるなら1、できないなら0
盤面のコピーを行います
引数
self : Boardクラスへのポインタ
out_board : コピー先のBoardクラスへのポインタ
戻り値 なし
盤面の反転を行います。
各マスの黒石を白石に、白石を黒石に変更します
引数
self : Boardクラスへのポインタ
戻り値 なし
指定した色で着手可能かどうかを調べます
引数
self : Boardクラスへのポインタ
in_color : 着手を行う色
戻り値 指定された色でどこかのマスに着手可能なら1、可能でなければ0
マスの位置を返す
引数
in_x : マスのX座標
in_y : マスのY座標
戻り値 指定されたマスの位置
マスのX座標を返す
引数
in_pos : マスの位置
戻り値 マスのX座標
マスのY座標を返す
引数
in_pos : マスの位置
戻り値 マスのY座標
指定された色の逆の色を返す
引数
in_color : BLACKまたはWHITE
戻り値 in_colorがBLACKならWHITE、WHITEならBLACK