bigsleepの日記

 | 

2015-05-08

リバーシのオンラインゲームを作った (1)

17:30

オンライン対戦ゲームを作ったことがなかったので何か作ってみたかったのと、

独自なゲームのアイデアとかが特になかったので

簡単そうなリバーシ (オセロ) のオンライン対戦ゲームを作ってみることにしました。


作り始めたのが確か去年の年末の休みあたりで

2月終わりか3月ぐらいに動くようになった気がします。

その後、やる気が停滞して放置してましたが

色々すぐ忘れてしまうのでブログに書いて置こうと思います。


herokuにあげてみたページがこれです。 (そのうち止めるかもしれません)

https://fast-shelf-3320.herokuapp.com/index.html



ソースがこれです。サーバー側がHaskell, クライアント側はhtmlジャバスクリプトです。

https://github.com/bigsleep/reversi-online


あんまりWebアプリHaskellも詳しくないため色々とおかしい部分があるかもしれません。

基本的に自分の学習用というような感じで自由に書いたのものなので参考にならないことが多いと思います。

後は適当に作るのに必要だったことなどを書くつもりです。



リバーシ部分

最初の方にリバーシのゲームロジックの部分を作りました。


そのあたりのコードはここにおいてました

https://github.com/bigsleep/reversi


ゲームのロジック部分の実装など色々な部分でこちらのページを参考にさせていただきました。

http://labs.timedia.co.jp/2013/07/write-othello-in-javascript-with-functional-style.html


まず盤面の状態から石をおける場所を列挙する関数と、

石をおいた時に挟んだ石をひっくり返して次の盤面の状態を取得する関数

を普通の関数で書いてます。


それから入出力などが絡んだ部分をFreeモナドを使ってDSLのような感じで書いてます。

コマンドラインでも動かせてオンラインゲームとしても使えるといいかなということで

Freeモナドを使ってみました。

ただ別にそんなに何回も使うわけではないのでIOなどで書くのでもいいと思います。

入出力の部分でMVar, TVarなどを使って作ればどこでも動かせそうな気もします。



オンライン対戦ゲームにするのに必要なこと

適当に考えつくものを上げていくだけでたくさんあって大変そうな感じがします。

ライブラリなどを使えば結構楽できるとは思います。

次は上のうちどれかについて書くと思います。

トラックバック - http://d.hatena.ne.jp/bigsleep/20150508/1431073817
 |