Quellcode

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.


Highscore-Beispielcode

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('&'=>'&amp;'));
  
$name str_replace(array('\\','\'','\"','<','>',':','.','@'),'',$name);
  
// ... und gekürzt, um Überlänge zu vermeiden
  
$name substr($name035);
  
// 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].'&nbsp;</nobr></span></li>'."\r\n"
}
echo 
'</ol>';
?>