Web ブラウザを用いてオンラインで対戦できるオセロです。サーバー側はGo言語
、クライアント側はJavascript
を利用しました。これを作った理由は単純で、作れる気がしたからです。アイデアのオリジナル性は低いことは理解しています。ですが「オセロを作ろう」的なチュートリアルを見たことはなく、オセロのコードなどは全て自分で考えました。2Dだとありきたりな気がしたので3Dにしました。制作期間は一か月程ですが、そのほとんどが WebGL との戦いでした。Three.js 使えばもっと早く終わったでしょう。ですが、一から書くことで大まかですがOpenGL
の仕組みや処理の流れが把握できたので勉強としては良かったと思います。
WebSocket
の接続待機Websocket
で接続するWebGL
を利用してゲームの状況を画面に描画サーバーはGo 言語(v1.16.5)で開発しました。
Go をビルドする際は Go のプロジェクトルート./src/server/
に移動してから行います。
cd ./src/server
go -o gothello build main.go
無事完了するとsrc/server
の中にgothello.exe
が作成されているはずです。
クライアントをビルドするには、yarn
が必要です。(npm
でビルド可能かどうかは未検証)
また、yarn
を利用するうえでNode.jsも必要になります。_(開発環境の Node.js は、v12.13.1 です)_
初めに、プロジェクトのルートに移動してから以下のコマンドを実行します。
yarn install
yarn build
特にエラーが出なければクライアントのビルドは完了です。
また、クライアントとサーバーをビルドするこれらのタスクをスクリプトにしてあります。
./build.sh
まず、gothello.exe
をpublic
と同じ階層に配置 します。
(build.sh
を利用してビルドした場合は自動で配置されます。)
そして、このバイナリファイルを実行するために以下のコマンドを入力します。
#デフォルトではポート番号80で起動します
./gothello.exe
#また、特定のポート番号を使用したい場合は以下のようにします
./gothello.exe -port=8080
#実行権限がないとき
chmod u+rx gothello.exe
Web ブラウザを起動し、アドレスバーにアドレスを入力します。
#サーバーを起動しているコンピューターでプレイする場合
http://localhost
#ポート番号を指定した場合
http://localhost:8080
#例: ローカルネットワークからプレイ
http://192.168.3.2
Player
の線形リストpush
の操作は、新しい要素を最後尾に連結するのみpop
の操作は、先頭の次の要素を先頭の要素にするのみpass
を 1 増やし、さらにターンを更新するpass
が 2 を超えたとき、これ以上ゲームを進めることは不可能なので終了するpass
は 0 に戻されるWebGL Context
を取得する。(ブラウザが対応していない場合はエラーを表示)DOMイベント
はキューに格納され、描画ループで処理されるGo
とJavascript
の両方で扱うのが簡単なJSON
で通信するように./src/server/game/game.go
) は全て自分で考えた。Disc(disc.go)
はint8
のエイリアスである。-1
を掛けることで裏返しを表現しているManager(manager.go)
ではハッシュテーブルを実装している