Flash ゲーム用のシンプルなスコアランキングライブラリを書きました。先日作った「さめがめ」でも使っています。
ダウンロード
パッケージを GitHub のリポジトリからダウンロードしてください。
確認済みの動作環境
PHP のバージョンは 5.2 でも動作すると思います。
インストール方法
サーバへのインストール方法を解説します。
- データベース、ユーザを作成する。
- パッケージを解凍した htdocs 内の config.php を編集する。
- htdocs 内のファイルをサーバにアップする。
- ブラウザで setup.php にアクセスし、ゲームの設定を行う。
- サーバから 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 ゲームからの呼び出し方法を解説します。
- ランキングの取得
- スコアの登録
パッケージの 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 ファイルは解析可能なため、完璧な対策ではありません。