-------------------------------------------------------------------------- nngs_try.c の説明 山下 宏 -------------------------------------------------------------------------- 変更点 2005/08/28 サーバに正式な棋譜として保存させるため、連続パスの後にdoneを 送る。こうしないと、次の同じ対局者名での棋譜で上書きされる。 0.はじめに このサンプルは2005年10月の岐阜チャレンジで使われるnngs対戦サーバに 接続して対局するWindows用のサンプルです。乱数の思考ルーチンがついています。 1.とりあえず動かすには white.bat を実行した後、 black.bat を実行してください。 黒 test1 白 test2 で公開nngsテストサーバを経由して対戦がはじまります。 2.実行ファイルの使い方 nngs_try W test1 test2 は黒が test1、白が test2、の対局を行い、白 test2 でログインして 待機する、という意味です。 また、白を待機させた後、 nngs_try B test1 test2 を新たに実行させれば、黒 test1 でログインしてtest2との対局を開始します。 nngs_try W test1 test2 192.168.0.1 の両対戦者名(test1,test2)を省略すると 黒 playera 白 playerb が標準となります。 4つめのオプションでサーバのアドレス、又はIPを直接指定することも出来ます。 省略すると、nngsのテストサーバである、"nngs.computer-go.jp" が標準となります。 本物のnngsサーバ nngs.cosmic.org に接続するには nngs_try W test1 test2 nngs.cosmic.org となります(現在接続できないようです)。 3.リンクが必要なライブラリ 動作させるには wsock32.libをリンクする必要があります。 VC++6.0の場合は、「プロジェクト」「設定」「リンク」の 「オブジェクト・ライブラリモジュール」に wsock32.lib を追加して下さい。 4.サンプルソースのビルド方法 VC++6.0の場合、nngs_try.dsw をダブルクリックしてください。 5.注意点 5.1 座標 座標はD13 のような座標で(x,y)を表しますが英語のX座標では'I'を使いません。 つまり'A'-'H','J'-'T'までを使います。 5.2 時間切れ どちらかの持ち時間が切れると、 9 {Game 2: test1 vs test2 : White forfeits on time.} というメッセージが飛んできます。 5.3 飛んでくるメッセージ サーバからは他の対戦相手がログインしたり他の対局が終了した場合でも {playera [ NR ] has connected.} {playera has disconnected} {Match 2: aya2 [ NR ] vs. aya1 [ NR ] } {Game 2: aya2 vs aya1 : has adjourned.} などのメッセージが突然飛んできます。 こういったメッセージは無視しましょう。 5.4 recv()関数 サンプルのrecv()関数は何かデータを受信するまで処理を戻しません。 つまり相手の手がくるまで永遠に待ってしまいます。 解決するには、WSAAsyncSelect()という関数を使ってデータが来たときに FD_READメッセージが飛んでくるような非同期処理が必要になります。 詳しくはCgfGoBanのソースを見てください。 http://www32.ocn.ne.jp/~yss/cgfgoban.html 6.履歴 2005/03/25 2005年4月のCGF特別例会用に修正。 2004/09/17 岐阜チャレンジ2004に作成して公開