September 15, 2013

573 letters 2 mins read

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アプリが作れるとなるとかなり用途が広がるだろう。