Avatar billede energie Nybegynder
10. februar 2006 - 09:59 Der er 4 kommentarer og
1 løsning

Flash memory spil med highscore (PHP)

Hey;

Jeg er i gang med et flash memory/vende spil. Spillet fungerer ganske fint. Så vil jeg gerne have sendt mine infomationer ud til mine php-filer og gemme dem (memory_highscore.dat) for derefter at kunne hente dem til en highscoreliste.

Jeg har haft problemer med $_get og $_post. tidligerei scriptet stod der $HTTP_SERVER_GET, men da denne er for gammel i forhold til PHP 5 skiftede jeg til $_POST. Men nu for jeg en masse [type Function] meldinger i min highscore liste, hvor den før hentede resultaterne.

Desforuden kunne jeg godt tænke mig at vide, om man kan lave en slags (td) i flash, så den viser highscoren på pæn og overskuelig vis.

Først har jeg min flash code som gemme og henter highscoren:

scoreMsg = "Your score is " + _root.gamePoints + " points !";
txtScore = "Loading highscore, please wait...";

if(_root.modeHighscore == 1) {
    txtTop10 = "Top 10:";
    loadVariables("./get_score.php?count=10&" + _root.phpCounter++, "", "POST");
    }   
if(_root.modeHighscore == 0) {
    txtScore = _root.getHighscore();
}

for(var i = 0; i < _root.arrCats[i].length; i++) {
    _root.arrCats[i]._visible = true;
    _root.arrCards[i]._visible = false;
}

function onBtnApply() {
    if(_root.modeHighscore == 0) {
        _root.addScoreItem(txtPlayersName, txtPlayersEmail);
        _root.saveHighscore();
    }

    if(_root.modeHighscore == 1) {
        var d = new Date();
        var strDate = d.getDate() + "." + (d.getMonth() + 1) + "." + d.getFullYear() + " " + d.getHours() + ":" + d.getMinutes();

loadVariablesNum("./save_score.php?p=" + _root.gamePoints + "&n=" + escape(txtPlayersName) + "&e=" + escape(txtPlayersEmail) + "&d=" + escape(strDate) + "&l=" + _root.gameLevel + "&t=" + _root.secondsCounter / 1000 + "&a=" + _root.attemptsCounter, "", "POST");
    }

    btnApply.setEnabled(false);
    gotoAndPlay(1);
};

function OnBtnBack() {
  gotoAndPlay(1);
};

stop();

Og så har jeg en save_score.php:
<?php
  // Append the score to file
  $fp = fopen("./memory_highscore.dat", "a");
  foreach($_POST as $var) {
    fwrite($fp, "$var" . chr(9));
  }
  fwrite($fp, chr(10));
  fclose($fp);
?>

Og så har jeg en get_score.php:

<?php
  // Add spaces to string
  function formatString($var, $length) {
      $ret = $var;
      if(strlen($ret) > $length) {
          $ret = substr($ret, 0, $length);
      }
      $n = strlen($ret);
      for($i = 0; $i < strlen($ret); $i++) {
          if(ord(substr($ret, $i, 1)) > 192) {
              $n--; // UNICODE, count only 1x
              $i++;
          }
      }
      $n = $length - $n;
      if($n > 0) {
          $ret = $var.str_repeat("%20", $n);
      }
      return $ret;
  }
 
  // Sort function used by usort
  function sortfunc($val1, $val2) {
      return ($val1["p"] < $val2["p"]);
  }

  // Count of highscore entries
  $count = 10;
  if(isset($ _POST['count'])) {
      $count = $_POST['count'];
  }
 
  // Header
  $s1 = formatString("Points", 15);
  $s2 = formatString("Navn", 50);
  $s3 = formatString("E-mail", 50);
  $s4 = formatString("Tid/Se",25);
  $s5 = formatString("Forsoeg", 25);
  $s6 = formatString("Level", 25);
  $s7 = formatString("Dato", 25);
  $score = $s1.$s2.$s3.$s4.$s5.$s6.$s7.chr(10);

  // Read entries from file into an array
  $i = 0;
  $fp = fopen("./memory_highscore.dat", "r");
  while($strLine = fgets($fp, 100)) {
      $arr = split(chr(9), $strLine);
      $arrarr{$i} = array("p" => $arr[0], "n" => $arr[1], "e" => $arr[2], "d" => $arr[3], "l" => $arr[4], "t" => $arr[5], "a" => $arr[6]);
      $i++;
  }
  fclose($fp);

  // Sort the array
  usort($arrarr, sortfunc);

  // Print the array
  $i = 1;
  while(list($id, $val) = each($arrarr)) {
      if($i > $count) {
          break;
      }
      $s1 = formatString($arrarr{$id}{"p"}, 7);
      $s2 = formatString($arrarr{$id}{"n"}, 50);
    $s3 = formatString($arrarr{$id}{"e"}, 40);
      $s4 = formatString($arrarr{$id}{"t"}, 20);
      $s5 = formatString($arrarr{$id}{"a"}, 20);
      $s6 = formatString($arrarr{$id}{"l"}, 20);
      $s7 = formatString($arrarr{$id}{"d"}, 20);
      $score = $score.$s1.$s2.$s3.$s4.$s5.$s6.$s7.chr(10);
      $i++;
  }
  echo "&txtScore="."$score"; // Flash variable, attached to the highscore textfield
?>

Og til sidst en show_score.php:


    <?php
      // Sort function used by usort
      function sortfunc($val1, $val2) {
        return ($val1["p"] < $val2["p"]);
      }

      // Read entries from file into an array
      $i = 0;
      $fp = fopen("./memory_highscore.dat", "r");
      while($strLine = fgets($fp, 100)) {
        $arr = split(chr(9), $strLine);
        $arrarr{$i} = array("p" => $arr[0], "n" => $arr[1], "e" => $arr[2],"d" => $arr[3], "l" => $arr[4], "t" => $arr[5], "a" => $arr[6]);
        $i++;
      }
      fclose($fp);
     
      // Sort the array
      usort($arrarr, sortfunc);

      // Output as table
      echo '    <table width="100%" cellspacing="0" cellpadding="4" border="1">';
      echo '      <tr>';
      echo '        <th align="left">LL</th>';
      echo '        <th align="left">Point</th>';
      echo '        <th align="left">Navn</th>';
      echo '        <th align="left">Email</th>';
      echo '        <th align="left">Dato</th>';
      echo '        <th align="left">Level</th>';
      echo '        <th align="left">Tid</th>';
      echo '        <th align="left">Forsøg</th>';
      echo '      </tr>';
     
      $i = 1;
      while(list($id, $val) = each($arrarr)) {
        $p = $arrarr{$id}{"p"};
        $n = $arrarr{$id}{"n"};
      $e = $arrarr{$id}{"e"};
        $d = $arrarr{$id}{"d"};
        $l = $arrarr{$id}{"l"};
        $t = $arrarr{$id}{"t"};
        $a = $arrarr{$id}{"a"};
        echo '      <tr>';
        echo '        <td>' . "$i" . '</td>';
        echo '        <td>' . "$p" . '</td>';
        echo '        <td>' . "$n" . '</td>';
      echo '        <td>' . "$e" . '</td>';
        echo '        <td>' . "$d" . '</td>';
        echo '        <td>' . "$l" . '</td>';
        echo '        <td>' . "$t" . '</td>';
        echo '        <td>' . "$a" . '</td>';
        echo '      </tr>';
        $i++;
      }
      echo '    </table>';           
    ?>
  </body>
</html>
Avatar billede webt Nybegynder
11. februar 2006 - 20:43 #1
Prøv med loadVariables i stedet for loadVariablesNum og prøv at bruge $_GET i stedet for $_POST i php scriptet

Hvis det ikke virker kan du evt. prøve
loadVariables("url","_blank")
og så echo $_GET['p'] osv på php siden for at se om det overhovedet bliver overført rigtigt.

Mht til at få det til at stå pænt i flash ville jeg overveje at udskrive det som xml og loade det med XML objektet i flash, og dermed køre det igennem og ligge det pænt ind i nogle opsatte tekstfelter

Mvh
Martin
Avatar billede energie Nybegynder
13. februar 2006 - 09:10 #2
Jeg har forsøgt alt ovenstående. Den ligger stadig en masse af disse [function type] ind i highscoren. Og dette gør den helt uoverskuelig.
Avatar billede webt Nybegynder
13. februar 2006 - 11:58 #3
Har du checket hvad outputtet af din $var i din foreach er? er det flash der sender [function type] med, eller php?

Prøv evt at sætte den til getURL i stedet for loadVariables så kan du jo om ikke andet se om det er flash der sender det med eller ej

Mvh
Martin
Avatar billede energie Nybegynder
21. februar 2006 - 12:50 #4
Tak
Avatar billede webt Nybegynder
21. februar 2006 - 13:02 #5
Så lidt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester