Go言語:go-gtkでネットワーク対戦型○×ゲームのネイティブアプリケーションを実装する
Go言語のGUIライブラリgo-gtkを利用してネットワークを介して対戦できる○×ゲームのネイティブアプリケーションを実装した。
コード: github.com/inatus/noughts-and-crosses-go
使い方
事前準備
- PC2台と対戦してくれる友達を用意する
- GTK+2のインストール Macならbrew install gtk+でインストールするのが楽。
- 6392ポートを開けておく。 通信に勝手にこのポートを使う。
ビルド
$ go get github.com/inatus/noughts-and-crosses-go
$ cd $GOPATH/src/github.com/inatus/noughts-and-crosses-go
$ go build
$ ./noughts-and-crosses-go
解説
実装上の特徴は以下のとおり。
- GUIにGTKを利用。つまりマルチプラットフォームに動作する(はず)。 ライブラリはgo-gtkを利用。
- 対戦のための通信にはUDPを利用。ポート番号は決め打ち。 標準ライブラリnetパッケージを利用。
go-gtkライブラリには説明がなくて分かりにくかったが、他のGTK APIの解説サイトで解決。
これが役に立った。だいたい似ているメソッド名になっている。
GTK+ リファレンスマニュアル
ネットワーク対戦に必要な通信は下記の3つで成り立っている。
- 他端末に自分の存在を知らせるために一定間隔でブロードキャストを繰り返すためのgoroutineを起動
- 他端末から送られてくる通信を受信するためのgoroutineを起動
- Startボタンや手を決めるボタンのクリック時に対戦相手にデータを送信
Go言語でもこういったネイティブで動くGUIアプリが作れるとなるとかなり用途が広がるだろう。