RPGツクールMZランキングスクリプト(昇順)

RPGツクールMZランキングスクリプトの昇順バージョンを作ったので公開します。

ゲーム本体の部分はRPGツクールMZ反射神経ゲームです。

【ランキング表示部分】
Image

// ハイスコア比較用
$gameVariables.setValue(変数ID, score.toFixed(2));
}

// スコアの昇順でソート
sortedScores.sort((a, b) => a.score - b.score);

ハイスコア比較用の変数IDの保存に.toFixed()メソッドを使い小数点以下2桁まで保存させます。

ハイスコア比較用、スコアの昇順でソート部分だけRPGツクールMZランキングスクリプトのスクリプトを昇順用に変更します。

【ランキング送信部分】
Image

スコアを送信する際の条件分岐も「>」から「<」に変更します。

その他はRPGツクールMZ上の作業は全て同じですのでRPGツクールMZランキングスクリプトRPGツクールMZ反射神経ゲームを参考下さい。

【昇順用のPHP】

<?php
// セキュリティヘッダーの設定
header("Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self';");
header("X-XSS-Protection: 1; mode=block");
header("X-Frame-Options: DENY");
header("X-Content-Type-Options: nosniff");

// POSTリクエストのみを許可
if ($_SERVER["REQUEST_METHOD"] !== "POST") {
http_response_code(405);
}

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
$score = filter_input(INPUT_POST, 'score', FILTER_VALIDATE_FLOAT);

// ファイルパス
$scoresFile = __DIR__ . '/ファイル名';

// ファイルの存在確認と書き込み権限チェック
if (!is_writable($scoresFile) && !is_writable(dirname($scoresFile))) {
http_response_code(500);
}

// 排他的ファイルロックを使用してファイルを読み込む
$fp = fopen($scoresFile, 'c+');
if (flock($fp, LOCK_EX)) {
$scores = file_get_contents($scoresFile);
$scores = $scores ? json_decode($scores, true) : [];

// 新しいスコアを追加または更新
if (!isset($scores[$username]) || $score < $scores[$username]) {
$scores[$username] = $score;

// スコアで昇順ソート
asort($scores);

// 何位まで保存するか
$scores = array_slice($scores, 0, 5, true);

// ファイルに保存
file_put_contents($scoresFile, json_encode($scores));
flock($fp, LOCK_UN);
fclose($fp);

} else {
flock($fp, LOCK_UN);
fclose($fp);
}

} else {
fclose($fp);
http_response_code(500);
}
?>

【小数点の入ったスコア】

{"name1":1.11,"name2":2.22,"name3":3.33,"name4":4.44,"name5":5.55}

コメント