動的にハイスコアランキングを作成するWEBページを作りたいです。

現在webで簡単なゲームを作成しています。
ユーザの得点を送信してもらい、動的にハイスコアランキングを表示させたいと考えています。
よくゲームセンターで最後に出てくる上位10位の得点表示のようなイメージです。

質問の内容はPHPやjqueryでこのような事が実現できる機能があるかご教授下さい。
また、参考になるサイトや書籍があれば併せてご教授頂けると助かります。

お手数おかけいたしますがよろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/16 12:19:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:holoholobird No.2

回答回数574ベストアンサー獲得回数104

ポイント200pt

PHPだけで可能です。
ちょっと一例を作ってみます。

record_maker.php
例えばhttp://www.test.comにwebゲームがあるとします。
2013年10月5日23時51分にtakashiがゲームで98点を取った時に、
http://www.test.com/record_maker.php?score=98&user=takashiにアクセスすると、
98,takashi,2013/10/5-23:51が
http://www.test.com/record.txtに記録されます。

<?php
$score=$_GET['score'];
$user=$_GET['user'];
$s_date=date( "Y/m/d-H:i", time());

$text=$score.",".$user.",".$s_date.";";
//log.txtにスコアを保存
$fp = fopen("./record.txt", "a");
fwrite($fp, $text);
fclose($fp);
?>

record_echo.php
http://www.test.com/record_echo.phpにアクセスすると、
http://www.test.com/record.txtの情報を基にランキングを表示します。

<?php
// CSV ファイルを読み込み、$data配列に格納
    $handle = fopen("./record.txt", "r");
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $data[] = array( 'score'=>$row[0] ,'user'=>$row[1], 's_date'=>$row[2], 'place'=>$row[3] );
        
    }
    fclose($handle);

// 列方向の配列を得る
    foreach ($data as $key => $row) {
        $score[$key]   = $row['score'];
        $user[$key] = $row['user'];
        $s_date[$key] = $row['s_date'];
    }

// データを スコアの昇順にソートする
    array_multisort($score, SORT_ASC, $user, SORT_DESC, $s_date, SORT_DESC, $place, SORT_DESC, $data);

// 結果を10件表示
   for( $i=0 ; $i<10 ; $i++ ) {
       print "$score[$i] $user[$i] $s_date[$i] <br>\n";
   }
?>

PHPを勉強する場合、初級者であれば、この本1冊あれば絶対に十分です。

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

id:hossiiii

PHPだけで作成可能なのですね。
また、サンプルコードまで記載頂き誠にありがとうございます。
こちらを参考にして実際にチャレンジしてみたいと思います。

お勧めの書籍も本屋で確認してみます。

2013/09/16 12:19:00

その他の回答1件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント100pt

・このURLにpostされたらランキングDBを更新する。
・このURLをgetしにきたらランキング結果を返す。
あたりの骨組みをphpで作ってからjQueryでAjax化するなり見せ方を工夫する流れでしょうか。
CakePHPのようなフレームワークを使うのがおすすめです。パーフェクトPHPはphp入門本として鉄板です。

id:hossiiii

早急なご回答ありがとうございます。
phpで実現可能のようですね。
ご教授頂いた書籍も本屋で見て見ます。

2013/09/16 12:17:38
id:holoholobird No.2

回答回数574ベストアンサー獲得回数104ここでベストアンサー

ポイント200pt

PHPだけで可能です。
ちょっと一例を作ってみます。

record_maker.php
例えばhttp://www.test.comにwebゲームがあるとします。
2013年10月5日23時51分にtakashiがゲームで98点を取った時に、
http://www.test.com/record_maker.php?score=98&user=takashiにアクセスすると、
98,takashi,2013/10/5-23:51が
http://www.test.com/record.txtに記録されます。

<?php
$score=$_GET['score'];
$user=$_GET['user'];
$s_date=date( "Y/m/d-H:i", time());

$text=$score.",".$user.",".$s_date.";";
//log.txtにスコアを保存
$fp = fopen("./record.txt", "a");
fwrite($fp, $text);
fclose($fp);
?>

record_echo.php
http://www.test.com/record_echo.phpにアクセスすると、
http://www.test.com/record.txtの情報を基にランキングを表示します。

<?php
// CSV ファイルを読み込み、$data配列に格納
    $handle = fopen("./record.txt", "r");
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $data[] = array( 'score'=>$row[0] ,'user'=>$row[1], 's_date'=>$row[2], 'place'=>$row[3] );
        
    }
    fclose($handle);

// 列方向の配列を得る
    foreach ($data as $key => $row) {
        $score[$key]   = $row['score'];
        $user[$key] = $row['user'];
        $s_date[$key] = $row['s_date'];
    }

// データを スコアの昇順にソートする
    array_multisort($score, SORT_ASC, $user, SORT_DESC, $s_date, SORT_DESC, $place, SORT_DESC, $data);

// 結果を10件表示
   for( $i=0 ; $i<10 ; $i++ ) {
       print "$score[$i] $user[$i] $s_date[$i] <br>\n";
   }
?>

PHPを勉強する場合、初級者であれば、この本1冊あれば絶対に十分です。

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

PHP 逆引きレシピ (PROGRAMMER'S RECiPE)

id:hossiiii

PHPだけで作成可能なのですね。
また、サンプルコードまで記載頂き誠にありがとうございます。
こちらを参考にして実際にチャレンジしてみたいと思います。

お勧めの書籍も本屋で確認してみます。

2013/09/16 12:19:00

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません