boris: Tennis

Hallo,

ich möchte ein zufallgeneriertes Tennis-Ergebniss per Skript erstellen; würde mich freuen, wenn es hierzu positives Feedback folgt bzw. Eure Ideen in dieses Projekt mit einfliessen:

<?php

echo "<h2>Tennis</h2>";

$points = array("0","15","30","40");
$points_lost = array("0","15","30");

$points_player1 = array();
$points_player2 = array();
echo "<table border='1'><tr>";
for ($i = 1; $i <= 6; $i++) {
$rand_keys = array_rand ($points, 2);
$rand_keys_lost = array_rand ($points_lost, 2);
$player1 = $points[$rand_keys[0]];
if ($points[$rand_keys[0]] < "40") { $player2 = "40"; $points_player2[] = 1; } else { $player2 = $points_lost[$rand_keys_lost[0]]; $points_player1[] = 1; }

?>
<td><h3>Game <?=$i?>:</h3>
Player 1:&nbsp;<?php echo $player1; ?><br>
Player 2:&nbsp;<?php echo $player2; ?></td>
<?
}
echo "</tr></table>";
?>

<h3>Set:</h3>
Player 1: <?php echo count($points_player1); ?><br>
Player 2: <?php echo count($points_player2); ?>

Vielen Dank und Gruss,
der Boris

  1. Hallo boris,

    Auf welche(s) Problem(e) bist du gestoßen, und wie sahen deine fehlgeschlagenen Lösungsansätze aus?

    Grüße aus Barsinghausen,
    Fabian

    --
    "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
    1. Ich möchte gerne dass das Ergebnis eines jeden Spiels aktuell angezeigt wird, also z.B. bei 0:0 starten, dann wird nach 1 sekunde weitergeleitet, z.B. auf 15:0 bis das erste spiel gewonnen ist, dann wird der aktuelle satz-stand angezeigt, also z.B. 1:0.

      Bei meiner bisherigen Lösung wird nicht immer bis 6 gespielt, wenn es manchmal 5:1 steht ist Ende...ausserdem muss ja auch ein Tie-Break mit berücksichtigt werden...

      Gruss,
      der Boris

      1. Hallo boris,

        Ich möchte gerne dass das Ergebnis eines jeden Spiels aktuell angezeigt wird, also z.B. bei 0:0 starten, dann wird nach 1 sekunde weitergeleitet, z.B. auf 15:0 bis das erste spiel gewonnen ist, dann wird der aktuelle satz-stand angezeigt, also z.B. 1:0.

        PHP läuft auf der Server. Du möchtest aber eine clientseitige Applikation haben, ja?

        Bei meiner bisherigen Lösung wird nicht immer bis 6 gespielt, wenn es manchmal 5:1 steht ist Ende...ausserdem muss ja auch ein Tie-Break mit berücksichtigt werden...

        Dann bahendle die Sonderfälle und setze die Zählvariablen in den Schleifen korrekt.

        Grüße aus Barsinghausen,
        Fabian

        --
        "It's easier not to be wise" - < http://www.fabian-transchel.de/kultur/philosophie/ialone/>
        1. PHP läuft auf der Server. Du möchtest aber eine clientseitige Applikation haben, ja?

          also per JS ist diese Verzögerung möglich? Wie erhält JS denn die Daten aus PHP, damit diese nicht manipuliert werden können - das Ergebnis soll ja nicht vom User verändert werden, sondern vom Computer errechnet werden per Zufall...

          Dann bahendle die Sonderfälle und setze die Zählvariablen in den Schleifen korrekt.

          also in etwa if (gesamtzahl der sätze < 6) { weiter mit dem zähler }
          und
          if (min_satz => 5 AND max_satz => 5) { spiele bis 7 weiter, d.h. Tie-Break) }
          ??????

          Gruss,
          der Boris

          1. hi,

            also per JS ist diese Verzögerung möglich? Wie erhält JS denn die Daten aus PHP, damit diese nicht manipuliert werden können - das Ergebnis soll ja nicht vom User verändert werden, sondern vom Computer errechnet werden per Zufall...

            PHP ermittelt alle "ergebnisstände" zack-zack sofort hintereinander weg, und stellt sie dem javascript zur verfügung.
            dieses gibt dann nach und nach zeitverzögert die werte aus.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. kann der user die ergebnisse denn dann per JS nicht manipulieren?

              Gruss,
              der Boris

              1. hi,

                kann der user die ergebnisse denn dann per JS nicht manipulieren?

                was hätte er davon?
                javascript zeigt lediglich die daten an, die es vom server bekommen hat.
                dadurch ändern sich aber, selbst wenn der user das script beeinflusst, doch noch lange nicht die daten, die du auf dem server vorhältst (in einer session, einer datenbank oder wo auch immer - je nach dem, was du mit den daten noch vor hast).

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
              2. echo $begrüßung;

                kann der user die ergebnisse denn dann per JS nicht manipulieren?

                Ist das für den Server interessant? Sollen die vom Client mittels Javascript angezeigten Daten (wahsagas Vorschlag) wieder zum Server zurücktransportiert werden, um dann dort damit was anzustellen? Abspeichern beispielsweise? Kannst du die dann nicht gleich nach der Erzeugung und vor dem Übertragen zum Client abspeichern?

                echo "$verabschiedung $name";

        2. habe hier wohl noch ein Denkproblem:
          es wird oft auch ein 7:3 o.ä. statt 6:3 angezeigt...

          $points = array("0","15","30","40","DEUCE","ADV");
          $points_player1 = array();
          $points_player2 = array();

          $max_games = 6;
          for ($i = 1; $i <= $max_games; $i++) {
          $zufall = rand(1,2);
          if ($zufall == "1") { $points_player1[] = 1; } else { $points_player2[] = 1; }
          if ((count($points_player1) + count($points_player2) >= 6) AND (count($points_player1) <= 6) AND (count($points_player2) <= 6)) { $max_games++; }
          }
          echo "Player 1: ".count($points_player1);
          echo "<br>Player 2: ".count($points_player2);

          Viell. gibt's ja auch eine Hilfestellung, wie man das mit dem Vorteil und Einstand lösen könnte...

          Dank und Gruss,
          der Boris

        3. hier noch ein Schritt, kann man das optimieren?

          <?php

          echo "<h2>Tennis</h2>";

          $points_player1a = array("0","15","30","40","DEUCE","ADV");
          $points_player2a = array("0","15","30","40","DEUCE","ADV");
          $points_player1 = array();
          $points_player2 = array();

          echo "0:0<br>";

          $points_player1[] = $points_player1a[0];
          $points_player2[] = $points_player2a[0];

          $max_games = 6;
          for ($i = 1; $i <= $max_games; $i++) {

          $zufall = rand(1,2);
          if ($zufall == "1") { $points_player1[] = next($points_player1a); } else { $points_player2[] = next($points_player2a); }

          echo end($points_player1).":".end($points_player2)."<br>";
          }

          Gruss,
          der Boris

        4. da kommen wir der sache wohl schon etwas näher...

          <?php

          echo "<h2>Tennis</h2>";

          $points_player1a = array("0","15","30","40","ADV");
          $points_player2a = array("0","15","30","40","ADV");
          $points_player1 = array();
          $points_player2 = array();

          echo "0:0<br>";

          $points_player1[] = $points_player1a[0];
          $points_player2[] = $points_player2a[0];

          $max_games = 1;
          for ($i = 1; $i <= $max_games; $i++) {

          $zufall = rand(1,2);
          if ($zufall == "1") { $points_player1[] = next($points_player1a); } else { $points_player2[] = next($points_player2a); }

          echo end($points_player1).":".end($points_player2)."<br>";

          if ((end($points_player1) != "40") AND (end($points_player2) != "40")) {
          $max_games++;
          }

          }