トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BearReversi用思考ルーチンの作り方

BearReversiのアーカイブに含まれるrdk103r1.lzhを解凍すると,思考ルーチンのサンプルソースが含まれています。このサンプルソースの一部分を書き換えることで,自作のルーチンをBearReversi用思考ルーチンにすることができます。書き換えるファイルはSkelton.cです。

ファイルの最下部にあるRvsClientOpeningBook関数を見てください。この関数の返り値をFALSEにすることで,BearReversiの定石機能をOFFにできます。

 //-----------------------------------------------------------------------------
 //
 // 機 能 : RVS クライアントに定石を使用させる
 //
 // 戻り値 : 定石を使用させるか
 //
 //-----------------------------------------------------------------------------
 BOOL WINAPI RvsClientOpeningBook(void)
 {
 	// TO DO: TRUE を返すとクライアントに定石機能があれば定石の間は RVS が呼ばれません
 	//return TRUE;
 	return FALSE;
 }

次に,思考ルーチンの置き換えですが,ファイルの中央辺りにあるRvsThink関数をこのように書き換えてください。そして,このコメントにしたがって自分のルーチンに置き換えればOKです。

 //
 // 戻り値 : RVS クライアントに渡すメッセージ
 //
 //-----------------------------------------------------------------------------
 char* WINAPI RvsThink(HWND hWnd, char* lpszMsg)
 {
 	char szBoard[RVS_91];
 	char cPiece;
 	int x, y, nLevel = 0;
 	float val;
 
 	BOOL success = Rvs_InspectMsg(lpszMsg, &cPiece, szBoard, &nLevel);
 	assert(success == TRUE);
 
 
 	//x,y座標は(x,y)=([1-8],[1-8])で表現される。([0-7]ではないことに注意!)
 
 	if(cPiece==RVS_BLACK){
 		//打つべき色は黒
 	}else{
 		//打つべき色は白
 	}
 
 	switch(Rvs_GetPiece(board, RVS_XY_TO_INDEX(x, y))){
 	  case RVS_SPACE:
 		//座標x,yは空き
 	  case RVS_BLACK:
 		//座標x,yは黒
 	  case RVS_WHITE:
 		//座標x,yは白
 	  default:
 		//エラー
 	}
 
 
 	//自分の思考ルーチンで処理して,置くことに決めた座標を(int x,int y)とする。
 	//置けるかどうかのチェックは自分でして,置けない場所を指示しないこと。
 	// if(Rvs_CheckPieceXY(szBoard, x, y, cPiece))でチェック可能(trueなら置ける)
 	//評価値をfloat型の変数valに入れる。特に,評価値などなければ0でOK。
 
 	return Rvs_CreateMsg(x, y, "好きなメッセージ", val);
 }  

その他,データファイルをロードする場合などは初期化関数を変更したりする必要がありますが,Skelton.cの大体の部分にはきちんとしたコメントがあるので,それを参照すればいいと思います。あと,たぶんSkelton.c以外のファイルを変更する必要はありません。

質問があればおーくらまで。分かる限りは答えます。

 思考経過の表示方法

ベアやパンダが出す、思考経過メッセージはどのようにして出すのかと柏木氏に聞いてみたところ、思考ルーチン側で独自にCreateWindowして適当な位置に移動させてから表示をしているということのようです。