Der komplette Quellcode inklusive aller benötigten Dateien zum Reaktionstest ist jetzt hier abrufbar. Eine Installationsanleitung und Erklärungen zu Funktionen und Variablen sind als Textdateien beigelegt.
Dies ist eine einfache Methode, um eine Punkteliste für euer Spiel einzubauen. Das Gegenstück zum PHP-Code bekommt ihr, wenn ihr die Quelltextanzeigefunktion eures Browsers benutzt.
PS: Den Code habe ich etwas verändert, um ihn verständlicher zu machen. Hier geht es darum, möglichst viele Punkte zu erreichen, und die Höchstpunktzahl ist auf 99999 Punkte begrenzt.
<?php
highlight_file('highscore.php');die();
/**
* @author Björn Eberhardt
* @copyright PD-Self, 2008
*/
// Ist eine Punktzahl dabei, ist es eine Zahl?
if (isset($_POST['punktzahl']) && is_int($_POST['punktzahl']))
{
// Punktzahl muss eine Zahl sein
$punktzahl = (int)$_POST['punktzahl'];
// Punktzahl muss positiv sein
if ($punktzahl < 0) $best = 0;
// Punktzahl sollte nicht zu groß sein
if ($punktzahl > 99999) $best = 99999;
// 99999 ist ok für ein Spiel mit Highscore-Test von z.B. 5000
// Name muss aufwändig gefiltert werden...
$name = strtr($_POST['name'],array('&'=>'&'));
$name = str_replace(array('\\','\'','\"','<','>',':','.','@'),'',$name);
// ... und gekürzt, um Überlänge zu vermeiden
$name = substr($name, 0, 35);
// Dann lesen wir die Highscore aus, im Format:
/*
name:punktzahl\r\n
name:punktzahl\r\n
*/
$daten = @file_get_contents('./highscore.dat');
// Kleber lösen
// array(0 => "name:punktzahl", 1 => "name:punktzahl");
$daten = explode("\r\n", $ga);
// Hier werden die neuen Highscores reingeschrieben:
$neudaten = array();
// Erstmal auslesen (hier wäre übrigens auch die Möglichkeit, die Highscore
// speichertechnisch auf eine maximale Anzahl von Einträgen zu kürzen)
foreach ($daten as $datenfeld)
{
// array(0 => "name", 1 => "punktzahl");
$eintrag = explode(':', $datenfeld);
if ($eintrag[1] < $punktzahl)
{
// Highscore dazwischenschieben und unbedeutend machen
$neudaten[] = $name.':'.$punktzahl;
$punktzahl = -1;
}
// und reinschreiben
$neudaten[] = $datenfeld;
}
// Highscore am Ende einfügen, falls schlechtestes Resultat
if ($punktzahl != -1) $neudaten[] = $name.':'.$punktzahl;
// Zusammenkleben und speichern
file_put_contents('./highscore.dat', join("\r\n", $neudaten));
$daten = $neudaten;
}
// neues Auslesen unnötig, wenn Highscore verändert
else
{
// Highscore auslesen und Kleber lösen
$daten = @file_get_contents($pth['folder']['base'].'games/react1/highscore.dat');
$daten = explode("\r\n", $ga);
}
// Für die besten 12 Punktzahlen
echo '<ol>';
for ($index = 0; $index < 12; $index++)
{
// array(0 => "name", 1 => "punktzahl");
$eintrag = explode(':', $daten[$index]);
// Auf diese Weise (Quickinfo) könnte man auch weitere Zusatzinfos ausgeben,
//etwa durch weitere Doppelpunkte getrennt, etc.
echo ' <li><span title="Quickinfo-Highscore'."\r\n".$eintrag[0]."\r\n ".$eintrag[1].' Punkte ">'.
'<nobr><i>'.$eintrag[1].'</i> '.$eintrag[0].' </nobr></span></li>'."\r\n";
}
echo '</ol>';
?>