Hi all,
in case if anyone is interested, I found out how to make a simple high-score table for any game you are making, I have the details below:
1. get a web host site (free or paid)
a. use a free hosted site like I am http://www.000webhost.com/207343.html (includes referal link) which allows PHP programs.
b. create a web host on your local machine using WAMP (http://www.wampserver.com/) (free windows software) and enable internet access to it.
c. use a paid web host of some sort.
2. read this flash tutorial http://www.flashkit.com/tutorials/Ga...-657/index.php
I modified my scores.php file (from tutorial above) so I could pass parameters to it via my game as well as via the URL.
This was done by adding a GetValue() function at the beginning and calling this for each variable being read.
I also made a dedicated script (dodscores.php) that only reads the table and returns it as the HTML code so I could easily use that for people to see the high-scores
In dodscores.php, substitute the string
<YOUR SCORES FILENAME>
with the dedicated filename of the appropriate high-scores table file...
With my high-score table, you can go here to test it out:
http://paulsbitsandbytes.webatu.com/dodscores.php
Here is the code for my scores.php:
Code:
<?php
function GetValue($name)
{
$value = $_POST[$name];
if (!isset($_POST[$name]))
$value = $_GET[$name];
return $value;
}
$filename = "scores/" . GetValue("filename");
$action = GetValue("action");
$viewtype = GetValue("viewtype");
$winscore = GetValue("winscore");
$winname = GetValue("winname");
$scoresize = GetValue("scoresize");
$winscore = (int)$winscore;
// Create a Blank File if it doesn't already exist
if (!file_exists($filename))
{
$file=fopen($filename, "w");
fclose ($file);
}
// Read the file in
$oscores = file ($filename);
$numreadin = count($oscores);
// Break out the data into a new 2-d array called $tscores
for ($i = 0; $i < $numreadin; $i++)
{
$g = unserialize($oscores[$i]);
$tscores[$i][0] = $g[0];
$tscores[$i][1] = $g[1];
}
// Fill in any missing data with none/0
for ($i = $numreadin; $i < $scoresize; $i++)
{
$tscores[$i][0] = 0;
$tscores[$i][1] = "none";
}
// Process the actions
// Insert a score/name
if ($action == "INSERT")
{
// Add name to end of list, and sort
$tscores[$scoresize + 1][0] = $winscore;
$tscores[$scoresize + 1][1] = $winname;
rsort ($tscores);
$file=fopen($filename, "w");
// Write them out
for ($i = 0; $i < $scoresize; $i++)
{
$st = serialize($tscores[$i]) . "\n";
fputs($file, $st);
}
fclose($file);
}
// Clear the list
if ($action == "CLEAR")
{
$k[0] = 0;
$k[1] = "none";
$ser = serialize($k);
$file=fopen($filename, "w");
for ($i = 0; $i < $scoresize; $i++)
{
$st = $ser . "\n";
fputs($file, $st);
}
fclose($file);
}
// Process the OUTPUT options
if ($viewtype == "HTML")
{
// HTML PAGE CREATED HERE
?>
<table cellpadding=2 cellspacing=2 border=0 width="152">
<tr align=center>
<th bgcolor="#000033"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif">#</font></th>
<th bgcolor="#000033"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif">Name</font></th>
<th bgcolor="#000033"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif">Score</font></th>
</tr>
<?
for ($i = 0; $i < $scoresize; $i++)
{
echo ("<tr bgcolor='#666666' align='center'><td><font size='2' face='Arial, Helvetica, sans-serif'>");
echo ($i + 1);
echo ("</font></td><td><font size='2' face='Arial, Helvetica, sans-serif'>");
echo ($tscores[$i][1]);
echo ("</font></td><td><font size='2' face='Arial, Helvetica, sans-serif'>");
echo ($tscores[$i][0]);
echo ("</font></td></tr>");
}
?>
</table>
<?
}
// FLASH DATA CREATED HERE
if ($viewtype == "FLASH")
{
for ($i = 0; $i < $scoresize; $i++)
{
echo ("NAME" . $i . "=");
echo ($tscores[$i][1]);
echo ("&SCORE" . $i . "=");
echo ($tscores[$i][0]);
echo ("&");
}
}
?>
here is the code for dodscores.php
Code:
<?php
$filename = "scores/<YOUR SCORES FILENAME>";
$scoresize = 10;
$winscore = (int)$winscore;
// Create a Blank File if it doesn't already exist
if (!file_exists($filename))
{
$file=fopen($filename, "w");
fclose ($file);
}
// Read the file in
$oscores = file ($filename);
$numreadin = count($oscores);
// Break out the data into a new 2-d array called $tscores
for ($i = 0; $i < $numreadin; $i++)
{
$g = unserialize($oscores[$i]);
$tscores[$i][0] = $g[0];
$tscores[$i][1] = $g[1];
}
// Fill in any missing data with none/0
for ($i = $numreadin; $i < $scoresize; $i++)
{
$tscores[$i][0] = 0;
$tscores[$i][1] = "none";
}
// Process the actions
// HTML PAGE CREATED HERE
?>
<table cellpadding=2 cellspacing=2 border=0 width="152">
<tr align=center>
<th bgcolor="#000033"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif">#</font></th>
<th bgcolor="#000033"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif">Name</font></th>
<th bgcolor="#000033"><font color="#FFFFFF" face="Arial, Helvetica, sans-serif">Score</font></th>
</tr>
<?
for ($i = 0; $i < $scoresize; $i++)
{
echo ("<tr bgcolor='#666666' align='center'><td><font size='2' face='Arial, Helvetica, sans-serif'>");
echo ($i + 1);
echo ("</font></td><td><font size='2' face='Arial, Helvetica, sans-serif'>");
echo ($tscores[$i][1]);
echo ("</font></td><td><font size='2' face='Arial, Helvetica, sans-serif'>");
echo ($tscores[$i][0]);
echo ("</font></td></tr>");
}
?>
</table>
<?
?>
This is how I read the high-score table from within my Delphi code with the Synapse HttpPostURL routine (using generic scores.php with FLASH output):
[pascal]
Procedure TGame.ReadOnlineHightScores;
Const
cURL = '<MYURL>';
cData = 'filename=<YOUR SCORES FILENAME>&scoresize=%d&action=VIEW&viewtype=FLASH' ;
Var
i : Integer;
Data : AnsiString;
Stream : TMemoryStream;
Line : AnsiString;
Scores : TStringList;
Name : AnsiString;
Score : AnsiString;
Begin
Stream := TMemoryStream.Create;
Try
Data := Format(cData,
[cHighScoreTableLen]);
If HttpPostURL(cURL,
Data,Stream) Then
Begin
Stream.Position := 0;
SetLength(Line,Stream.Size);
Stream.Read(PChar(Line)^,Stream.Size);
Line := StringReplace(Line,'&',',',[rfReplaceAll]);
Scores := TStringList.Create;
Try
SetLength(FHighScoreTable,cHighScoreTableLen);
Scores.CommaText := Line;
i := 0;
While i < cHighScoreTableLen * 2 Do
Begin
Name := Scores.Strings[i + 0];
Score := Scores.Strings[i + 1];
Name := Copy(Name ,Pos('=',Name) + 1,Length(Name));
Score := Copy(Score,Pos('=',Score) + 1,Length(Score));
FHighScoreTable[i Div 2].TimeDateStamp := Now;
FHighScoreTable[i Div 2].Name := Name;
FHighScoreTable[i Div 2].Score := StrToInt(Score);
Inc(i,2);
End;
Finally
Scores.Free;
End;
End;
Finally
Stream.Free;
End;
End;
[/pascal]
This is how I add to the high-score table for my game using Delphi code with the Synapse HttpPostURL routine :
[pascal]
Procedure TGame.AddHighScore(Const AHighScore : THighScore);
Const
cURL = '<MYURL>';
cData = 'filename=<YOUR SCORES FILENAME>&scoresize=%d&action=INSERT&winname=%s&wi nscore=%d&viewtype=FLASH';
Var
i : Integer;
Data : AnsiString;
Stream : TMemoryStream;
Begin
i := Length(FHighScoreTable);
SetLength(FHighScoreTable,i + 1);
FHighScoreTable[i] := AHighScore;
SortHighScoreTable;
If Length(FHighScoreTable) > cHighScoreTableLen Then
SetLength(FHighScoreTable,cHighScoreTableLen);
Stream := TMemoryStream.Create;
Try
Data := Format(cData,
[cHighScoreTableLen,EncodeURLElement(AHighScore.Nam e),AHighScore.Score]);
If HttpPostURL(cURL,
Data,Stream) Then
Begin
ReadOnlineHightScores;
End;
Finally
Stream.Free;
End;
End;
[/pascal]
I hope this helps someone
cheers,
Paul
Bookmarks