Flash ゲーム用のスコアランキングライブラリを作りました

Flash ゲーム用のシンプルなスコアランキングライブラリを書きました。先日作った「さめがめ」でも使っています。

ダウンロード

パッケージを GitHub のリポジトリからダウンロードしてください。

確認済みの動作環境

PHP のバージョンは 5.2 でも動作すると思います。

インストール方法

サーバへのインストール方法を解説します。

  1. データベース、ユーザを作成する。
  2. パッケージを解凍した htdocs 内の config.php を編集する。
  3. htdocs 内のファイルをサーバにアップする。
  4. ブラウザで setup.php にアクセスし、ゲームの設定を行う。
  5. サーバから setup.php を削除する。

1. データベース、ユーザを作成する。

下記の SQL は、データベース名 "score_ranking"、ユーザ名 "score_ranking"、パスワード "ranking" で作成しています。
SQL ファイルはパッケージの sql ディレクトリにもあります。

CREATE DATABASE IF NOT EXISTS score_ranking CHARACTER SET utf8;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON score_ranking.* TO game_score@localhost IDENTIFIED BY 'ranking';

2. パッケージを解凍した htdocs 内の config.php を編集する。

config.php をエディタで開き、先のデータベース作成時の設定と同じ値を記述します。

define("DB_NAME", "score_ranking");
define("DB_USER", "game_score");
define("DB_PASSWORD", "ranking");

3. htdocs 内のファイルをサーバにアップする。

下記のファイルをウェブサーバにアップロードします。

4. ブラウザで setup.php にアクセスし、ゲームの設定を行う。

ブラウザで setup.php にアクセスし「ゲーム名」「シークレットキー」を入力してゲームのテーブルを作成します。ゲームは複数作成できます。

5. サーバから setup.php を削除する。

ウェブサーバから setup.php を削除します。

Flash ゲームからの呼び出し方法

次に、Flash ゲームからの呼び出し方法を解説します。

  1. ランキングの取得
  2. スコアの登録

パッケージの docs 内に API リファレンスが、sample 内には ActionScript 3 のサンプルライブラリが含まれています。

例では、アップロードした ranking.php の URL を "http://example.com/ranking.php"、ゲーム名を "ActionGame"、シークレットキーを "secretKey" としています。

1. ランキングの取得

ranking.php に固定引数 ?action=ranking を付けて、ゲーム名とスコアの数 (上位 N 個) を POST で送信します。

var urlLoader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http://example.com/ranking.php?action=ranking");
var variable:URLVariables = new URLVariables();
variable.gameName = "ActionGame";
variable.total = 10;
request.method = URLRequestMethod.POST;
request.data = variable;
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.load(request);

2. スコアの登録

ranking.php に固定引数 ?action=add を付けて、ゲーム名、ユーザ名、スコア、トークンを POST で送信します。

トークンは、ゲーム名、スコア、シークレットキーを結合した文字列の MD5 ハッシュ値です。ActionScript 3 用の MD5 ライブラリは as3corelib がおすすめです。

var urlLoader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("http://example.com/ranking.php?action=add");
var variable:URLVariables = new URLVariables();
variable.gameName = "ActionGame";
variable.userName = "testUser";
variable.score = 12345;
variable.token = MD5.hash("ActionGame" + "testUser" + 12345 + "secretKey");
request.method = URLRequestMethod.POST;
request.data = variable;
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.load(request);

注意点

不正防止のためにシークレットキーやトークンを採用していますが、Flash の SWF ファイルは解析可能なため、完璧な対策ではありません。