PHP :: Aufgabe #271

1 Lösung Lösung öffentlich

Game - Heiß oder Kalt

Anfänger - PHP von DavidDev024 - 20.04.2020 um 19:36 Uhr
Das Spiel läuft folgender Maßen ab:

- Spieler 1 denkt sich eine Zahl aus
- Spieler 2 versucht nun die Zahl zu erraten, indem er eine Zahl eingibt
- nun wird der vorherige Versuch (falls einer vorhanden) mit dem jetzigen verglichen und wärmer oder kälter ausgegeben (je nachdem ob man der geheimen Zahl von Spieler 1 näher kommt oder nicht)
-Erratet Spieler 2 die Zahl sollen die benötigten Versuche und die benötigte Zeit ausgegeben werden.

Have Fun

Lösungen:

vote_ok
von juergen (360 Punkte) - 05.06.2020 um 12:58 Uhr
Quellcode ausblenden PHP-Code

session_start();

//Hilfsfunktion zum vollständigen Löschen aller Sessions
function deleteSessions()
{
    // Löschen aller Session-Variablen.
    $_SESSION = array();

    // Falls die Session gelöscht werden soll, löschen Sie auch das
    // Session-Cookie.
    // Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(
          session_name(),
          '',
          time() - 42000,
          $params["path"],
          $params["domain"],
          $params["secure"],
          $params["httponly"]
      );
    }
    // Zum Schluß, löschen der Session.
    session_destroy();
}

// Definition der Standardwerte
$form1 = '';
$form2 = '';
$form3 = '';
$msg = '';

// Absenden des Formulars zur Bestimmung der gesuchten Zahl
if (isset($_POST['submit1'])) {
    $_SESSION['zahlauswahl'] = $_POST['zahl'];
    $_SESSION['startzeit'] = new DateTime("now");
} else {
    //Formular zur Eingabe der Zahl die gesucht werden soll.
    $form1 = <<<EOT
  <form method="POST">
    Meine Zahl: <input type="number" name="zahl" required>€<br />
    <input type="submit" value="Abschicken" name="submit1">
  </form>
  EOT;
}


if (isset($_SESSION['zahlauswahl'])) {
    $form1 = '';
    //Schätzforumular
    $form2 = <<<EOT
  <form method="POST">
    Meine Schätzung: <input type="number" name="estimate" required>€<br />
    <input type="submit" value="Ausprobieren" name="submit2">
  </form>
  EOT;

    $form3 = <<<EOT
  <form method="POST">
    <input type="submit" value="Neues Spiel starten" name="submit3">
  </form>
  EOT;
}

// Alle Sessions löschen wenn neues Spiel starten Button gedrückt wird
if ($_POST['submit3']) {
    deleteSessions();
    header('Location: '.$_SERVER['REQUEST_URI']);
}

// Schätzformular absenden und Ausgabe der Meldungen
if (isset($_POST['submit2'])) {
    //Speichere Startzeit in einer Session
    $schaetzzahl = $_POST['estimate'];
    switch ($schaetzzahl) {
    case($schaetzzahl < $_SESSION['zahlauswahl']):
      $msg = '<p>Die gesuchte Zahl ist größer als '.$schaetzzahl.'.</p>';
      $_SESSION['gewaehlteZahlen'][] = $schaetzzahl;
    break;
    case($schaetzzahl > $_SESSION['zahlauswahl']):
      $msg = '<p>Die gesuchte Zahl ist kleiner als '.$schaetzzahl.'.</p>';
      $_SESSION['gewaehlteZahlen'][] = $schaetzzahl;
    break;
    default:
      $ende = new DateTime("now");
      $dauer = $_SESSION['startzeit']->diff($ende);
      $diff = $dauer->format('%H:%I:%S');
      $numberofAttempts = count($_SESSION['gewaehlteZahlen']) + 1;
      $msg = '<p>'.sprintf('Herzlichen Glückwunsch! Sie haben die gesuchte Zahl ('.$schaetzzahl.') erraten. Sie haben dafür %d Versuche und eine Zeit von %s benötigt.', $numberofAttempts, $diff).'</p>';
      $form2 = $form1 = '';
      deleteSessions();
  }
}


// Ausgabe:
echo $form1;
echo $form2;

echo '<p>'.$msg.'</p>';
if (isset($_SESSION['gewaehlteZahlen'])) {
    echo '<p>Bisher gewählte Zahlen: '.implode(', ', $_SESSION['gewaehlteZahlen']).'</p>';
}

echo $form3;

1810258

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.