ツクールMVでオンラインランキングを実装する

はいどーもこんにちは、ニートランキング一位のツミオです。
本日はツクールMVでオンラインランキングを実装してみたいと思いますよ。

ユーザ間の変数同期プラグイン

オンラインランキングを実装するにあたって使えそうなプラグインの一つに、ユーザ間の変数同期プラグインというものがあります(あのトリアコンタンさん作のプラグインです)。
これはMilkcocoaという外部のサービスを使って通信周りをどうこうしているようです。
ぜーんぶトリアコンタンさんが用意してくれているので、プラグイン使用者が考えることはほぼ皆無です
なのでこのプラグインを使うのも一つの手なのですが、ここでは自分で実装してみようと、そういうわけなんですね。

MariaDB+PHPを用いる

今回はMariaDB+PHPを用います。
自分でサーバーを用意しますが、今回作成するオンラインランキングくらいなら、Milkcocoaに自分で登録して~というのがよさそうです(別にMilkcocoaじゃなくてもいいですが)。
だってサーバー用意するの面倒ですし、セキュリティどうこうも大変ですし、サーバーサイドプログラム書くのも大変ですもんw
ですが今回は勉強ということで、自前のサーバーを用意します。
この辺の話は「Unity+PHP+JavaScriptで遊んでみる」を参照してください!

データベースの作成

データベースの名前はrmmv-testとします。
カラムは

・code(AI)
・name
・score

とします。

サーバー側のプログラム

サーバーサイドでは「データベースに情報を送るプログラム」と「データベースから情報を取得するプログラム」が必要となります。
dataLoader.phpとでもしておきます。
というわけで情報を取得する側のコードをドン。

普通にデータベースから全部のデータを引っ張ってきてるだけです。
それをJSON形式にエンコードしてクライアントに返します。

お次はデータの送信側(スコアを登録する側)。
dataUploader.phpとでもしておきます。

SQLにREPLACE INTOを使っています。
僕はSQL文をよく理解していないので間違っている可能性が大いにありますが、これで「重複するデータがあった場合は上書き、なければ新規登録」という動きができるようです。

サーバーサイド側のプログラムは以上です。

クライアント側のプログラム

お次はクライアント側のプログラムです。
これは考慮すべき点がいくつかあります。

・スコアや名前はどこで保持する?
・データを取得・送信する方法は?
・データを取得したとき、それはどう保持する?

などなど……。

ここでは

・スコアや名前などはツクールの変数で管理
・データを取得・送信するにはプラグインコマンドを使う
・データを取得したとき、それはセーブデータに保存せず、その場限りアクセス可能な領域を用意する

とします。

というわけでコードをドン。

めんどくさくて色々と説明を省略していますが、使い方は以下の通りです(なんか抜けてたらすみませんw)。

・「Ranking Get」プラグインコマンドでサーバーからランキング情報を取得
・「Ranking Post」プラグインコマンドでサーバーに自身のスコアを送信
・「./js/plugins/dataUploader.php」と「./js/plugins/dataLoader.php」の設置が必須
・ユニークIDは基本プラグイン使用者はいじらない
・データ送信前に先にデータを取得する必要がある
・取得したデータはWWWRanking.onlineDataの中に入っている

これをプラグインとして導入したあと、適当に変数の値を変更するイベントを置いてください。
それからGETとPOSTをするイベントも設置すればOKです。
あとはウェブブラウザ用デプロイメントをしたあと、自分のサーバーにそのまま置けば準備完了です。

問題点

データ送信のタイミングによっては「他人のデータに上書きする」とかありそうな気がしていますw
ちょっとまだDBの使い方に慣れてないので自信がないですね。
この辺の問題を考慮すると、やっぱり自分でサーバーを作って、PHPでプログラムを書いて~とかするより、素直に外部のツール使ったほうがよさそうですかねえ。
あとこれ自分のウェブブラウザ用デプロイメント専用になってます。
それも外部のツールを使うと簡単に解決できそうなので、その点もやはり……w

終わりに

サーバーサイドの処理に慣れている人ならオンラインゲームっぽいものも作れるんじゃないかなあなんて妄想しています。
僕はもう少し修行が必要そうですね。

ほなそんな感じでまた。

フォローする