Go言語で囲碁ゲームできたよー\(^o^)/

https://github.com/technohippy/Go-Go

GoGo って言いたかっただけDeath!

全世界に一万人くらい同じこと思いついた人いると思うけど、検索してみたら意外と見つからなかったからつい・・・。

コマンドのオプションはこんな感じ。

Usage of ./go:
  -server=false: ブラウザをUIに使いたいときはtrueに設定する。デフォルトのURLは http://localhost:55555/
  -port=55555: ポート番号。server=trueじゃなければ無視される
  -ai=false: コンピュータ対戦。今はひたすらランダムな場所に打ってくる
  -size=19: 碁盤のサイズ
  -load="": ファイルに保存した盤面をロードする。主にデバッグ用


現時点のAIと対戦するのは苦行でしかないので、ブラウザ使って人間同士で対戦してがんばって楽しんで欲しい。整地はできないから競ってると地を数えるのが大変そうだけど・・・。

もう少し時間ができたらまともなAI組み込んで囲碁の自習に使えるようにしたいと妄想中*1。ゴルーチンってゲーム木の探索とかに便利そうな気がするけどどんなもんなんだろう。

・・・

そういえばGo言語のドキュメントは http://golang.jp/ にたくさん翻訳があって非常にありがたい。ただ、言語自体の開発が活発なこともあってときどきはオリジナルをチェックしないとハマる。具体的にはHTTPサーバーの書き方が日本語ドキュメントに従うとこんな感じだったりするけど

http.HandleFunc("/", http.HandlerFunc(func(conn *http.Conn, req *http.Request) {
	conn.SetHeader("Content-Type", "text/plain")
	conn.Write([]byte("This is an example server.\n"))
}))

いつのまにやら http.Conn がなくなったみたいで今は http.ResponseWriter を使ってこんな感じにしないと動かなかった。

https://github.com/technohippy/Go-Go/blob/master/src/go/server.go

http.HandleFunc("/get", http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
    // 略
    fmt.Fprint(rw, m.Json())
}))


まぁそれはそれとして、Go言語は標準添付ライブラリが意外と充実してるし、無駄なお作法が少なくて簡潔にかけるし、慣れるとなかなかいい感じ。登場から1年が経って結構こなれて来てると思うので、そろそろ何か新しい言語を覚えたいけどあんまり素っ頓狂な文法は避けたいという人は試してみてもいいんじゃないかなと。

*1:買った本に載ってる処理は最低限組み込みたい