第10回UEC杯コンピュータ囲碁大会に参加しようぜ

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703171212a3.png?raw=true)
（第10回UEC杯コンピュータ囲碁大会）
http://www.computer-go.jp/uec/public_html/index.shtml

いや、もう第10回で終わってしまうんだが、次がない大会への参加方法を書いていてもいいだろう。

# ノー・ネーム・碁・サーバー　（NNGS）に対応しようぜ
この大会では別に　指し手は人力の手入力でも構わない、という話しを前にしたが　コンピューターの言う通りに２０００手も指すのは嫌だ。サーバーに対応させて自動化したい。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703171212a4.png?raw=true)
NNGS (source forge)
https://sourceforge.net/projects/nngs/

サーバーのソースはここに置いてある。バージョンはわたしが見る限り　ずっと 1.1.22 だ。
書き方を見ると多分 Linux か何かなんだろう。

これ、人と人が対局するサイトを作るサーバーなんで、
nngsmain.c ファイルに main 関数があって、main_event_loop 関数にラッピングされた net_select 関数が　くるくると回って対局者のログインを待っている。

これを自宅のＰＣで開局できれば……、とか思ってたんだが　わたしは Linuxのインストールと基本操作でつまづいて Windows に Cygwin を入れようとして　またつまづいたんでやらなかったんだが、　自宅サーバーができる人なら　できるんじゃないか。開局をやってみてはどうだろうか。

で、コンピューター囲碁開発者は　別に　サーバーの開局なんかしなくても、次の２つを知ってればいいわけだ。

- サーバーとの通信は CgfGoBan にやってもらう。API（関数３つほど）を覚える
- 通信プロトコル（コマンド５つほど）を覚えて　つなぎに行く。ぶっつけ本番で　大会で接続できることを祈る

# 囲碁の通信プロトコルは GMP と、GTP の２つだけ

- GMP （Go Modem Protocol; 碁モデム・プロトコル）
- GTP （碁テキスト・プロトコル）

バイナリでもばりばり書くぜ、という人は GMP を、テキストを送受信するぜ、という人は GTP を書く。

## GMP （Go Modem Protocol; 碁モデム・プロトコル）
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703171212a5.png?raw=true)
「Go Modem Protocol」（britgo）
http://www.britgo.org/tech/gmp.html

何バイトを飛ばして、何ビット目にフラグが立っている、といった　電気通信だぜ。
そういうえば UEC杯とは　電気通信大学のことだぜ。

似たようなものに楽器の入力を送受信する MIDI とかがあるし、他にもいっぱいあるだろう。

**わたしはサーバーのテスト環境を開局できなかったんで、これは使わなかった。**

## GTP （Go Text Protocol; 碁テキスト・プロトコル）
![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703171212a6.png?raw=true)
「19.2 Running GNU Go in GTP mode」（GNU Go）
http://www.gnu.org/software/gnugo/gnugo_19.html#SEC192

GTP は、GMPをテキスト形式にしたものだ。
バイナリよりはテキストの方が扱いやすいだろう、とうことで GNU Go 3.8 で実装されているらしいんだが、 **GNU Go 3.8 のソースコードは読むのが嫌になるほどとても難しい。**

マニュアルにはあんまり載ってないが、ソースを読むとコマンドが 300個ぐらいあったんじゃないか。

「19.6 GTP command reference」（GNU Go）
http://www.gnu.org/software/gnugo/gnugo_19.html#SEC200

**このうち、UEC杯で使うコマンドは　5種類　ぐらいだ。むしろそれ以外を送信して問題が起こったら処罰されてしまう。**

「3.プロトコル」（第10回UEC杯コンピュータ囲碁大会）
http://www.computer-go.jp/uec/public_html/network.shtml

だいぶ　実装方法が絞られてきたのではないか。

## サーバーとの通信は CgfGoBan にやってもらう。API（関数３つほど）を覚える

「コンピュータ囲碁プログラム CGF碁盤プロトコル」（Qiita）
http://qiita.com/muzudho1/items/ddf9eb068ecfce8c5ec2

APIの使い方は説明した。**これが一番簡単、C++ さえ読書きできれば……。**

CgfGoBan に丸投げすることで、通信は行けそうだ。

## コンピュータ囲碁ソフトを自作しよう

「コンピュータ囲碁プログラム 設定を作ろう」（Qiita）
http://qiita.com/muzudho1/items/51ae95477b669ba61f29#_reference-5b5fe9f2cfa413bbeee8

「コンピュータ囲碁プログラム ゲームデータを作ろう」（Qiita）
http://qiita.com/muzudho1/items/f7049ad58a6b19a41761#_reference-40f14ba19ab43cd3962a

「コンピュータ囲碁プログラム 盤上を走査しよう」（Qiita）
http://qiita.com/muzudho1/items/b5fbe7f9a6dd9fb1b989#_reference-38f35238e3ccded9b64f

「コンピュータ囲碁プログラム 囲碁のルール」（Qiita）
http://qiita.com/muzudho1/items/51537ba182c44c0829ff#_reference-e30c26335b2dd37cd70e

続きを書く時間がないぜ。

# 持っていくもの

- ノートＰＣ
- 自作のコンピューター囲碁ソフト

また、遠隔ＰＣを使う場合はその用意。

## 例）わたしが持っていくもの

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703171212a1.png?raw=true)

シンプルなものでファイルは３つだけ。

- cgfgoban.exe ※これが CGF碁盤
- cgfthink.dll ※これが API。思考部もこの中
- stone.wav ※石を置いたときの音

.exe を叩くとこんな感じ。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703171212a2.png?raw=true)

碁盤が描かれているのが cgfgoban.exe が出したウィンドウで、CGF碁盤は CGFシンクを別ウィンドウとして出す（黒い画面）。

１つのCGF碁盤は１つのCGFシンクと対応する。

同じ CGFシンク同士で対局することは　１つのCGF碁盤でできるが、
異なる２つのCGFシンクで対局したいときは、２つのCGF碁盤を立ち上げればいいが、そのやり方は忘れた。

![Gazo](https://github.com/muzudho/HowToMakeGame/blob/master/img/2017-03/201703171212a7b1.png?raw=true)

[対局(P)] - [対局開始(N)] と進む。

これで　人間vsコンピューター　でも、コンピューターvsコンピューター　でも、サーバーを中継した対局でもできる。
ただ、コンピューター将棋の floodgate みたいな、コンピューター用に開局して常時稼働しているサーバーが無いんだが……。歴史的には floodgate はコンピューター囲碁の対局サーバーの CGOS みたいになることを目指しているので先輩は囲碁の方なんだが。

## 大会のテストサーバー

「5.テストサーバ」（第10回UEC杯コンピュータ囲碁大会）
http://www.computer-go.jp/uec/public_html/network.shtml

おや、動かんね。どうも、

CSAのコンピュータ将棋の場合、GPS将棋か何かがテスト相手をしてくれるんだが、
UECのコンピュータ囲碁の場合、サーバーだけ開局してるんで　自分vs自作ソフトで対局してくれ、
ということらしい。

そうか。

動かね。ぶっつけ本番でいいや。

解説終わり。

# 次の記事
「コンピュータ囲碁プログラム CgfGoBan を改造しよう」（Qiita）
http://qiita.com/muzudho1/items/f0d22cb8d12f41172b00

# 追記
CgfGoBanの対局開始ダイアログボックスでは、URLの後ろに :9696 とポート番号を付けてはいけないらしい。