Page 1 of 1

Help with sorting highscore

Posted: Fri Apr 06, 2007 10:21 pm
by mofle
Hi all you beautiful people

I'm making a Flashgame with a php highscore.
In my game I have a timer and I want the highscore to show me the lowest time.
But the code is created to show the best score.
I think I have to do something with the "rsort" or something.

Can anybody help me with this?

It works as it is, but the highest time is sortet to the top not the bottom.

If you help me I will include your name in the credits of the game.

http://www.mofle.net/moflegame2/

Start the game and click on the button named "Highscore" to test the Highscore.

The game is far from be finished...

Code: Select all

<?php

	$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 ("&");
		}
	}

?>

Posted: Sat Apr 07, 2007 5:56 am
by mickd
Just a guess without looking deeply into the code..

Replacing rsort with sort should reverse the current order.

Posted: Sat Apr 07, 2007 5:59 am
by dantleech

Code: Select all

// Add name to end of list, and sort
      $tscores[$scoresize + 1][0] = $winscore;
      $tscores[$scoresize + 1][1] = $winname;
      rsort ($tscores);
sorry if this sounds dumb, have you tried using sort() instead of rsort()? failing that you may want to look at

usort() - lets you define how sorting is done
http://uk.php.net/manual/en/function.usort.php