PHP :: Aufgabe #271 :: Lösung #1

1 Lösung Lösung öffentlich
#271

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
#1
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;

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
1817037

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.