○構成 本パッケージは、囲碁プログラムをGTP(Go Text Protocol)に対応させるため のC++によるライブラリと、GTPに対応した囲碁プログラムをNNGSに接続して対 戦を行なうためのrubyスクリプトから構成されています。 NNGSに接続するためのスクリプトはrubyで作成しているため、rubyがインストー ルされている環境であれば、さまざまなOS上で使用可能と思います。 ファイルを展開した時に作成される gtp_go の下の gtp_sample ディレクトリ 以下のファイルが囲碁プログラムをGTPに対応させるためのライブラリ群、 gtp_goディレクトリ直下のrubyスクリプト群がGTP対応の囲碁プログラムを NNGSに接続するためのスクリプトです。 ○GTP対応ライブラリおよびサンプルプログラムについて gtp_go/gtp_sample 以下のライブラリを用いて囲碁プログラムをGTPに対応さ せることができます。 GTPプロトコルの処理はライブラリ側が行ないます。 engineクラスの以下のメソッドを実装して下さい。 # samplel.ccの該当部分を書換えるのが簡単だと思います。 std::string engine::name() GTPの name コマンドに対応しています。 プログラム(チーム)の名前を返して下さい std::string engine::version() GTPの version コマンドに対応しています。 プログラムのバージョンを返して下さい void engine::reset(int size, float komi) GTPの boardsize, komi, clear_board コマンドに対応しています。 指定のサイズ、KOMIで盤情報をリセットして下さい。 boardsize, komi, clear_boardが呼ばれる度に実行されますので、繰り返し実 行されることに注意して下さい。 void engine::time_settings(int, int, int) GTPの time_settings に対応しています。 void engine::time_left(COLOR c, int t, int s) GTPの time_left に対応しています。 tに残り時間(秒)が入っています。 void engine::genmove(int& i, int& j, COLOR color) GTPの genmove に対応しています。 現在の盤情報からcolor側の手を決定してi, jに設定して下さい。 また↓playmoveを呼び出すなどして盤情報に反映して下さい void engine::playmove(int i, int j, COLOR color) GTPの playmove に対応しています。 手情報がi, j, colorに入っていますので、盤情報に反映して下さい。 bool engine::legal_move(int i, int j, COLOR color) playmove呼び出しの直前に手の正否をチェックするために呼び出されます。 void engine::undo() GTPの undo に対応しています。 盤情報の最後の手ををundoして下さい。 COLOR engine::get_board(int i, int j) GTPの showboard コマンドに対応します。 指定の座標の盤情報を返して下さい。 void engine::compute_final_status() GTPの final_score に対応しています。 試合終了後に呼出します。 最終的な盤面情報を決定して下さい。 COLOR engine::get_final_status(int i, int j) 指定の座標の最終的な盤情報を返して下さい。 ○NNGS接続スクリプトの使い方 GTPに対応している囲碁プログラムをNNGSに接続して対戦を行なうことができ ます。 必要に応じて設定ファイル(config.rb)を編集します。 −−−−−−−−−−−−−−−ここから−−−−−−−−−−−−−−− $config = { 'NNGS' => { 'server'=>'localhost', #NNGSサーバ名 'port'=>'9696', #NNGSポート番号 'user'=>'test1', #ログインユーザ名 'pass'=>'' #ログインパス、ゲストユーザには不要 }, 'GTP' => { # 囲碁プログラム指定 'command'=>'/usr/games/bin/gnugo --mode gtp --quiet' }, 'SIZE' => 5, # 盤面サイズの指定 # 'SIZE' => 10, # 'SIZE' => 19, 'TIME' => 10 # 持ち時間(分)の指定 } −−−−−−−−−−−−−−−ここまで−−−−−−−−−−−−−−− コマンドラインから起動 ruby nngsCUI.rb ruby nngsCUI.rb user NNGSユーザ名指定 ruby nngsCUI.rb user server NNGSユーザ名,NNGSサーバの指定 起動すると「input user:」と表示されます。 ここでユーザ名を入力するとそのユーザに試合を申込みます。 試合を申し込むユーザは試合では「黒」になります。 ここで空白を入力すると、「waiting match request.」と表示して申込待ちモー ドに入ります。 こちらのユーザは試合では「白」になります。 試合の申込があると「match requested. accept(Y/n)」と聴いてくるのでどち らか選びます。 nを入力すると最初の対戦ユーザ入力までもどります。 それ以外だと囲碁プログラムが起動されてGTPによる通信がはじまり、NNGS上 で試合が開始されます。 何ごともなければ、最後まで自動的に試合をすすめ、試合終了後にはNNGSから 自動的にログアウトします。 ○NNGS接続スクリプトから碁プログラムへの入力 碁プログラムには次のようなGTPプログラムがスクリプトによって入力されま す。 1。試合設定 boardsize 5 komi 0 clear_board 2。相手の手情報 play BLACK C3 3。残り時間の報告と手の要求 time_left WHITE 600 0 time_left BLACK 600 0 genmove WHITE 4。終了 quit 入力される順番は以下のとおりです。 boardsize komi clear_board while { playmove time_left BLACK time_left WHITE genmove } quit