Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- session_start();
- #<!-- Session, zum Speichern der Zahlen wird gestartet -->
- ?>
- <html>
- <head>
- <title>Sudoku</title>
- <link rel = "stylesheet" href = "style.css">
- <meta charset="utf-8">
- </head>
- <header>
- <?php
- # Prüft ob die Zahlen gesetzt sind
- # Prüft falls keine Zahlen gesetzt sind (nicht ausgefüllt) und nicht 81 Arrays --> nicht ausführen
- if (isset($_POST["zahleneingabe"]) && !empty($_POST["zahleneingabe"]) && count($_POST["zahleneingabe"]) === 81) {
- # Session definieren
- $_SESSION["zahleneingabe"] = $_POST["zahleneingabe"];
- # Array in 9 Teile zerteilen
- # Zeile 0 auslesen
- $chunk = array_chunk($_SESSION['zahleneingabe'], 9);
- # Spalte 0 auslesen
- $column = array_column($chunk, 0);
- # prüfen, ob alle Felder ausgefüllt sind
- $voll = count(array_filter($_SESSION["zahleneingabe"])) === 81;
- # Zeilen
- # prüfen, ob alle Zeilen komplett richtig sind
- # hier werden die Fehler gespeichert
- $fehler_zeilen = array();
- # Schleife die 9x ausgeführt wird, $r steht für die aktuelle Zeile
- for($r = 0; $r < 9; $r++)
- # Schleife die 9x ausgeführt wird, einmal für jede Zahl, $i entspricht der aktuellen Zahl (die 0 muss eine 1 sein und die 9 eine 10, sonst wird die 9 nicht überprüft)
- for($i = 1; $i < 10; $i++) {
- # falls die Zahl ($i) mehr als einmal in der Zeile ($r) vorkommt, ist es ein Fehler
- # die Position der Zahl ($i) im Array ($r) werden im Array ($keys) gespeichert
- if (count($keys = array_keys($chunk[$r], (string)$i)) > 1) {
- # Details zum Fehler (Zeile, falsche Zahl) werden in dem Array für die Fehler gespeichert
- $fehler_zeilen[] = array(
- "row" => $r,
- "number" => $i,
- "offset" => $keys
- );
- }
- }
- # Spalten
- # Anstatt ($r) jetzt ($c)
- # hier werden die Fehler gespeichert
- $fehler_spalten = array();
- # Schleife die 9x ausgeführt wird, $c steht für die aktuelle Spalte
- for($c = 0; $c < 9; $c++)
- # Schleife die 9x ausgeführt wird, einmal für jede Zahl, $i entspricht der aktuellen Zahl (die 0 muss eine 1 sein und die 9 eine 10, sonst wird die 9 nicht überprüft)
- for($i = 1; $i < 10; $i++) {
- # liest zuerst die Spalte aus
- # macht aus der Zahl ($i) einen String um sie vergleichen zu können (Weil im Sudoku Strings eingegeben werden)
- # speichert alle Positionen aller gleichen Elementen im Arrays $keys
- # zählt die Elemente von $keys und prüft, ob es mehr als 1 sind: falls ja wird die IF-Abfrage durchgeführt
- if (count($keys = array_keys(array_column($chunk, $c), (string)$i)) > 1) {
- # Details zum Fehler (Zeile, falsche Zahl)
- $fehler_spalten[] = array(
- "column" => $c,
- "number" => $i,
- "offset" => $keys
- );
- }
- }
- $richtig_oder_falsch = (count($fehler_zeilen) > 0 || count($fehler_spalten) > 0) ? "falsch" : "richtig" ;
- } else {
- $richtig_oder_falsch = 'richtig';
- }
- echo "<center><img src='sudoku_$richtig_oder_falsch.png' alt='sudokubild' class='sudokubild'></center>";
- ?>
- </header>
- <body>
- <!-- Hier befindet sich das Aufklapp-Menü, welches das Spiel erklärt -->
- <div class="erklärung">
- <br>
- <details>
- <summary>Erklärung<p></summary>
- In Sudoku geht es darum, dass du es schaffst, dass jede Zahl,<br>in jeder Zeile und Spalte nur einmal vorkommt!<br>Unten hast du die Möglichkeit, den Schwierigkeitsgrad zwischen LEICHT - MITTEL - SCHWER einzustellen.
- </details>
- </div>
- <br>
- <?php
- # hier ist noch nicht alles ausgefüllt
- if (!isset($voll) || !$voll) {
- # hier ist alles ausgefüllt
- } else {
- # Sudoku komplett richtig ausgefüllt
- if ($richtig_oder_falsch === "richtig") {
- $gewonnen = array(
- "gewonnen" => "Herzlichen Glückwunsch, du hast das Sudoku komplett richtig ausgefüllt!",
- "gewonnen_resetten" => "<form method='post'><input type='submit' name='richtig' id='neustarten' value='Sudoku resetten' /><br/></form>");
- echo '<b><br><br><center><font size="7" color="#00c700">' . $gewonnen["gewonnen"] . '<center></font></b>';
- echo $gewonnen["gewonnen_resetten"] . '<br><br>';
- session_destroy();
- } else {
- }
- }
- # Hier wird die Session gestartet, die dafür sorgt, dass der eingestelle Schwierigkeitsgrad, nach dem neuladen bestehen bleibt
- if(!empty($_POST['einstellungen'])){
- $_SESSION['einstellungen'] = $_POST['einstellungen'];
- }
- ?>
- <?php
- if (isset($_SESSION['einstellungen'])) {
- } else {
- ?>
- <!-- DropDown-Menü -->
- <form action="#" method="post">
- <center><font size="5"><b>Hier hast du die Möglichkeit, einen von <u>3</u> Schwierigkeitsgraden zu wählen:</b><br></font>
- <select name="einstellungen">
- <option value="leicht">Leicht</option>
- <option value="mittel">Mittel</option>
- <option value="schwer">Schwer</option>
- </select>
- <br>
- <input type="submit" name="absenden" value="speichern"></center></form>
- <?php
- }
- # Ausgabe der Fehlermeldung, wenn eine Zahl bereits im Sudoku steht und dadurch in einer Zeile, oder Spalte doppelt vorkommt
- if (!isset($fehlermeldung_falsch)) {
- if ($richtig_oder_falsch === 'falsch') {
- $fehlermeldung_falsch = array(
- "falsche_zahl" => "Du hast eine Zahl eingetragen, die sich Bereits in einer Zeile oder Spalte befindet!");
- echo '<br><b><center><font size="7" color="darkred">' . $fehlermeldung_falsch["falsche_zahl"] . '<center></font></b><br><br>';
- } else {
- }
- }
- # leichter Schwierigkeitsgrad
- if (isset($_SESSION['einstellungen'])){
- if ($_SESSION['einstellungen']=="leicht"){
- echo "<div class='einstellungen'><center><font size=5''>Du hast dich für den Schwierigkeitsgrad <br><b><font color='00c700'>LEICHT</font></b> entschieden!</center></font></div>";
- ?>
- <br>
- <main>
- <form action="#" method="POST">
- <section id="sudoku">
- <?php
- $sudoku_leicht = array(
- "1" => array(
- array("", "", "", "", "1", "3", "", "9", ""),
- array("", "6", "2", "", "", "", "", "", ""),
- array("", "", "", "", "7", "8", "", "", ""),
- array("", "", "", "", "", "6", "5", "7", "9"),
- array("5", "1", "7", "", "3", "2", "8", "", "6"),
- array("", "8", "", "4", "5", "", "2", "", "3"),
- array("2", "", "", "7", "6", "9", "1", "", "5"),
- array("", "", "", "", "4", "", "", "", ""),
- array("", "3", "9", "8", "2", "", "4", "", "")),
- "2" => array(
- array("9", "", "", "", "7", "", "", "", "6"),
- array("", "2", "", "", "6", "", "4", "3", ""),
- array("", "4", "", "3", "9", "2", "", "", "8"),
- array("", "", "", "", "", "5", "", "8", "3"),
- array("", "5", "", "4", "1", "8", "6", "", ""),
- array("2", "8", "6", "", "3", "7", "", "1", ""),
- array("", "", "", "7", "", "3", "", "", "5"),
- array("", "3", "", "", "8", "6", "", "", ""),
- array("8", "", "7", "", "", "", "", "", "2")),
- "3" => array(
- array("", "", "", "", "", "", "5", "", "4"),
- array("1", "", "4", "3", "5", "9", "8", "", "7"),
- array("5", "", "", "4", "", "", "", "", ""),
- array("", "", "5", "", "1", "3", "9", "", "8"),
- array("", "1", "", "2", "", "", "6", "", "5"),
- array("6", "8", "3", "", "9", "", "", "4", "2"),
- array("9", "", "8", "", "", "4", "2", "", ""),
- array("4", "2", "", "", "3", "5", "", "", "6"),
- array("", "", "", "", "", "", "", "", "")));
- $keys = array_keys($sudoku_leicht);
- $sudokurdm = mt_rand(0, count($sudoku_leicht)-1);
- $sudoku = $sudoku_leicht[$keys[$sudokurdm]];
- }
- # mittlerer Schwierigkeitsgrad
- if ($_SESSION['einstellungen']=="mittel"){
- echo "<div class='einstellungen'><center><font size=5''>Du hast dich für den Schwierigkeitsgrad <br><b><font color='#2E64FE'>MITTEL</font></b> entschieden!</center></font></div>";
- ?>
- <br>
- <main>
- <form action="#" method="POST">
- <section id="sudoku">
- <?php
- $sudoku_mittel = array(
- "1" => array(
- array("", "", "6", "", "4", "9", "", "", ""),
- array("", "7", "1", "", "", "", "", "2", ""),
- array("3", "", "", "", "", "7", "", "5", ""),
- array("", "8", "", "", "5", "", "3", "1", ""),
- array("", "", "", "", "8", "", "", "", ""),
- array("", "6", "4", "", "1", "", "", "7", ""),
- array("", "3", "", "4", "", "", "", "", "7"),
- array("", "4", "", "", "", "", "1", "9", ""),
- array("", "", "", "8", "9", "", "4", "", "")),
- "2" => array(
- array("", "", "8", "6", "5", "", "", "1", ""),
- array("", "", "2", "", "4", "", "", "", "6"),
- array("", "", "", "", "", "3", "", "2", ""),
- array("", "9", "", "5", "", "", "", "6", ""),
- array("", "", "1", "7", "", "9", "3", "", ""),
- array("", "5", "", "", "", "1", "", "7", ""),
- array("", "4", "", "3", "", "", "", "", ""),
- array("5", "", "", "", "1", "", "2", "", ""),
- array("", "3", "", "", "8", "6", "5", "", "")),
- "3" => array(
- array("8", "", "", "", "", "", "", "2", ""),
- array("", "", "", "", "6", "4", "", "9", ""),
- array("", "", "", "2", "", "", "4", "", "5"),
- array("", "8", "4", "", "1", "6", "", "3", ""),
- array("6", "", "", "", "3", "", "", "", "7"),
- array("", "1", "", "8", "2", "", "9", "4", ""),
- array("3", "", "9", "", "", "1", "", "", ""),
- array("", "6", "", "3", "7", "", "", "", ""),
- array("", "7", "", "", "", "", "", "", "3")));
- $keys = array_keys($sudoku_mittel);
- $sudokurdm = mt_rand(0, count($sudoku_mittel)-1);
- $sudoku = $sudoku_mittel[$keys[$sudokurdm]];
- }
- # schwerer Schwierigkeitsgrad
- if ($_SESSION['einstellungen']=="schwer"){
- echo "<div class='einstellungen'><center><font size=5''>Du hast dich für den Schwierigkeitsgrad <br><b><font color='darkred'>SCHWER</font></b> entschieden!</center></font></div>";
- ?>
- <br>
- <main>
- <form action="#" method="POST">
- <section id="sudoku">
- <?php
- $sudoku_schwer = array(
- "1" => array(
- array("", "", "", "", "", "", "", "4", "8"),
- array("", "9", "8", "2", "", "", "", "", "7"),
- array("", "", "", "4", "3", "", "", "", "6"),
- array("9", "8", "", "", "", "", "", "", ""),
- array("", "", "", "3", "1", "", "", "", ""),
- array("7", "", "", "", "", "", "", "9", "4"),
- array("", "", "9", "", "", "", "6", "", ""),
- array("", "", "", "7", "", "2", "", "", ""),
- array("5", "", "3", "", "", "4", "8", "", "")),
- "2" => array(
- array("", "", "", "5", "4", "6", "", "", "9"),
- array("", "2", "", "", "", "", "", "", "7"),
- array("", "", "3", "9", "", "", "", "", "4"),
- array("9", "", "5", "", "", "", "", "7", ""),
- array("7", "", "", "", "", "", "", "2", ""),
- array("", "", "", "", "9", "3", "", "", ""),
- array("", "5", "6", "", "", "8", "", "", ""),
- array("", "1", "", "", "3", "9", "", "", ""),
- array("", "", "", "", "", "", "8", "", "6")),
- "3" => array(
- array("", "", "", "", "", "", "", "5", "3"),
- array("", "", "2", "7", "", "9", "", "4", ""),
- array("", "", "7", "8", "", "", "", "", ""),
- array("", "3", "", "", "", "", "", "", "6"),
- array("", "", "", "9", "", "1", "", "", ""),
- array("", "8", "9", "", "", "2", "", "", "7"),
- array("4", "", "", "", "", "", "2", "", ""),
- array("1", "", "", "", "6", "", "9", "", ""),
- array("8", "", "", "", "4", "", "", "", "")));
- $keys = array_keys($sudoku_schwer);
- $sudokurdm = mt_rand(0, count($sudoku_schwer)-1);
- $sudoku = $sudoku_schwer[$keys[$sudokurdm]];
- }
- }
- # Speichert eines der 3 zufällig ausgewählten Sudokus
- if(!empty($_POST['einstellungen'])){
- $_SESSION['speichern'] = $sudoku;
- }
- # noch sind keine Daten zum füllen der Felder verfügbar
- $fill = 0;
- # Zahlen in der Session speichern
- if (isset($_POST['zahleneingabe'])){
- $_SESSION['zahleneingabe'] = $_POST['zahleneingabe'];
- # jetzt sind Daten um die Felder zu füllen verfügbar
- $fill = 1;
- }
- # Die Spalten und die Zeilen des Sudokus werden beide 9x erstellt
- if (isset($_POST["absenden"]) or (isset($_POST["submit"]))) {
- for($z = 0; $z < 9; $z++) # $z = Zeile
- for($s = 0; $s < 9; $s++){ # $s = Spalte
- # Falls $chunk schon definiert ist, wurden schon Zahlen eingegeben
- if (isset($chunk)) {
- # Wenn in einem Feld keine feste Zal ist,
- if ($_SESSION['speichern'][$z][$s] === "") {
- # wird die Zahl eingetragen, die der Spieler eingibt
- $value = $chunk[$z][$s];
- $fixed = "";
- # Es wird versucht, eine feste Zahl zu ändern
- } else if ($chunk[$z][$s] !== $_SESSION['speichern'][$z][$s]) {
- $value = $_SESSION['speichern'][$z][$s];
- $fixed = "fixed";
- /*$fehlermeldung = array(
- "vorhanden" => "Du darfst die bereits vorhandenen Zahlen nicht verändern!");*/
- # Es wird nicht versucht, eine feste Zahl zu ändern
- } else {
- # sonst wird die feste Zahl eingetragen
- $value = $_SESSION['speichern'][$z][$s];
- $fixed = "fixed";
- }
- # Beim Betreten der Seitem, sofort die fixed Zahlen eintragen
- } else {
- $value = $_SESSION['speichern'][$z][$s];
- $fixed = $value !== "" ? "fixed" : "";
- }
- # Hier wird immer wieder das InputFeld mit dem fixed-wert erstellt
- echo "<div class='input'><input class='$fixed' type='text' name='zahleneingabe[]' minlength='1' maxlength='1' pattern='[1-9]' value='$value'></div>";
- }
- ?>
- </section>
- <center><input type="submit" value="Sudoku überprüfen" name="submit"></center>
- </form>
- <?php
- } else {
- }
- ?>
- </main>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement