SHARE
TWEET

Untitled

a guest Apr 26th, 2019 86 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2. session_start();
  3. #<!-- Session, zum Speichern der Zahlen wird gestartet -->
  4. ?>
  5.  
  6.  
  7. <html>
  8.  
  9. <head>
  10. <title>Sudoku</title>
  11. <link rel = "stylesheet" href = "style.css">
  12. <meta charset="utf-8">
  13. </head>
  14.  
  15. <header>
  16.    
  17.    
  18. <?php  
  19.    
  20.  
  21.  
  22. # Prüft ob die Zahlen gesetzt sind
  23. # Prüft falls keine Zahlen gesetzt sind (nicht ausgefüllt) und nicht 81 Arrays --> nicht ausführen  
  24. if (isset($_POST["zahleneingabe"]) && !empty($_POST["zahleneingabe"]) && count($_POST["zahleneingabe"]) === 81) {
  25.    
  26. # Session definieren
  27.     $_SESSION["zahleneingabe"] = $_POST["zahleneingabe"];
  28.  
  29.  
  30. # Array in 9 Teile zerteilen    
  31. # Zeile 0 auslesen
  32.     $chunk = array_chunk($_SESSION['zahleneingabe'], 9);
  33.  
  34. # Spalte 0 auslesen
  35.     $column = array_column($chunk, 0);
  36.  
  37.  
  38. # prüfen, ob alle Felder ausgefüllt sind
  39.     $voll = count(array_filter($_SESSION["zahleneingabe"])) === 81;
  40.    
  41.    
  42.    
  43. # Zeilen
  44.        
  45.     # prüfen, ob alle Zeilen komplett richtig sind
  46.     # hier werden die Fehler gespeichert
  47.     $fehler_zeilen = array();
  48.    
  49.     # Schleife die 9x ausgeführt wird, $r steht für die aktuelle Zeile
  50.     for($r = 0; $r < 9; $r++)
  51.    
  52.     # 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)
  53.         for($i = 1; $i < 10; $i++) {
  54.            
  55.             # falls die Zahl ($i) mehr als einmal in der Zeile ($r) vorkommt, ist es ein Fehler
  56.             # die Position der Zahl ($i) im Array ($r) werden im Array ($keys) gespeichert
  57.             if (count($keys = array_keys($chunk[$r], (string)$i)) > 1) {
  58.                
  59.                 # Details zum Fehler (Zeile, falsche Zahl) werden in dem Array für die Fehler gespeichert
  60.                 $fehler_zeilen[] = array(
  61.                     "row" => $r,
  62.                     "number" => $i,
  63.                     "offset" => $keys
  64.                 );
  65.             }
  66.     }
  67.  
  68. # Spalten
  69. # Anstatt ($r) jetzt ($c)    
  70.    
  71.     # hier werden die Fehler gespeichert
  72.     $fehler_spalten = array();
  73.    
  74.     # Schleife die 9x ausgeführt wird, $c steht für die aktuelle Spalte
  75.     for($c = 0; $c < 9; $c++)
  76.        
  77.         # 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)
  78.         for($i = 1; $i < 10; $i++) {
  79.            
  80.             # liest zuerst die Spalte aus
  81.             # macht aus der Zahl ($i) einen String um sie vergleichen zu können (Weil im Sudoku Strings eingegeben werden)
  82.             # speichert alle Positionen aller gleichen Elementen im Arrays $keys
  83.             # zählt die Elemente von $keys und prüft, ob es mehr als 1 sind: falls ja wird die IF-Abfrage durchgeführt
  84.             if (count($keys = array_keys(array_column($chunk, $c), (string)$i)) > 1) {
  85.                
  86.                 # Details zum Fehler (Zeile, falsche Zahl)
  87.                 $fehler_spalten[] = array(
  88.                     "column" => $c,
  89.                     "number" => $i,
  90.                     "offset" => $keys
  91.                 );
  92.             }
  93.     }
  94.  
  95.     $richtig_oder_falsch = (count($fehler_zeilen) > 0 || count($fehler_spalten) > 0) ? "falsch" : "richtig" ;
  96.  
  97. } else {
  98.     $richtig_oder_falsch = 'richtig';
  99. }
  100. echo "<center><img src='sudoku_$richtig_oder_falsch.png' alt='sudokubild' class='sudokubild'></center>";
  101.  
  102. ?>
  103.    
  104.    
  105. </header>
  106.  
  107. <body>
  108.    
  109.  
  110.    
  111. <!-- Hier befindet sich das Aufklapp-Menü, welches das Spiel erklärt -->
  112. <div class="erklärung">
  113. <br>    
  114. <details>
  115. <summary>Erklärung<p></summary>
  116. 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.
  117. </details>    
  118. </div>
  119. <br>    
  120.    
  121.    
  122.    
  123.    
  124.  
  125.    
  126.    
  127. <?php
  128.    
  129.     # hier ist noch nicht alles ausgefüllt
  130. if (!isset($voll) || !$voll) {
  131.    
  132.    
  133. # hier ist alles ausgefüllt
  134. } else {
  135.  
  136.     # Sudoku komplett richtig ausgefüllt
  137.     if ($richtig_oder_falsch === "richtig") {
  138.        
  139.         $gewonnen = array(
  140.             "gewonnen" => "Herzlichen Glückwunsch, du hast das Sudoku komplett richtig ausgefüllt!",
  141.             "gewonnen_resetten" => "<form method='post'><input type='submit' name='richtig' id='neustarten' value='Sudoku resetten' /><br/></form>");
  142.        
  143.         echo '<b><br><br><center><font size="7" color="#00c700">' . $gewonnen["gewonnen"] . '<center></font></b>';
  144.         echo $gewonnen["gewonnen_resetten"] . '<br><br>';
  145.         session_destroy();
  146. } else {
  147. }
  148. }    
  149.    
  150.    
  151.    
  152.    
  153.    
  154.     # Hier wird die Session gestartet, die dafür sorgt, dass der eingestelle Schwierigkeitsgrad, nach dem neuladen bestehen bleibt
  155.    
  156.     if(!empty($_POST['einstellungen'])){
  157.         $_SESSION['einstellungen'] = $_POST['einstellungen'];
  158.     }
  159.            
  160.    
  161.  ?>
  162.    
  163.    
  164.    
  165. <?php
  166.    
  167. if (isset($_SESSION['einstellungen'])) {
  168. } else {
  169.      
  170.    
  171. ?>
  172.    
  173. <!-- DropDown-Menü -->
  174.    
  175. <form action="#" method="post">
  176. <center><font size="5"><b>Hier hast du die Möglichkeit, einen von <u>3</u> Schwierigkeitsgraden zu wählen:</b><br></font>
  177.  
  178.  <select name="einstellungen">
  179.      <option value="leicht">Leicht</option>
  180.      <option value="mittel">Mittel</option>
  181.      <option value="schwer">Schwer</option>
  182.  </select>
  183.  <br>
  184.    
  185.    
  186. <input type="submit" name="absenden" value="speichern"></center></form>
  187.    
  188.    
  189. <?php
  190. }
  191.    
  192.    
  193.    
  194.    
  195. # Ausgabe der Fehlermeldung, wenn eine Zahl bereits im Sudoku steht und dadurch in einer Zeile, oder Spalte doppelt vorkommt            
  196.              
  197. if (!isset($fehlermeldung_falsch)) {
  198. if ($richtig_oder_falsch === 'falsch') {
  199.    
  200. $fehlermeldung_falsch = array(
  201.     "falsche_zahl" => "Du hast eine Zahl eingetragen, die sich Bereits in einer Zeile oder Spalte befindet!");
  202.     echo '<br><b><center><font size="7" color="darkred">' . $fehlermeldung_falsch["falsche_zahl"] . '<center></font></b><br><br>';
  203. } else {
  204. }
  205. }
  206.    
  207.    
  208.    
  209.  
  210.    
  211.     # leichter Schwierigkeitsgrad
  212.            
  213.      if (isset($_SESSION['einstellungen'])){
  214.          if ($_SESSION['einstellungen']=="leicht"){    
  215.              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>";
  216.              
  217. ?>      
  218. <br>  
  219. <main>      
  220. <form action="#" method="POST">
  221. <section id="sudoku">    
  222.    
  223. <?php
  224.              
  225.  $sudoku_leicht = array(
  226. "1" => array(
  227.     array("", "", "", "", "1", "3", "", "9", ""),
  228.     array("", "6", "2", "", "", "", "", "", ""),
  229.     array("", "", "", "", "7", "8", "", "", ""),
  230.     array("", "", "", "", "", "6", "5", "7", "9"),
  231.     array("5", "1", "7", "", "3", "2", "8", "", "6"),
  232.     array("", "8", "", "4", "5", "", "2", "", "3"),
  233.     array("2", "", "", "7", "6", "9", "1", "", "5"),
  234.     array("", "", "", "", "4", "", "", "", ""),
  235.     array("", "3", "9", "8", "2", "", "4", "", "")),
  236.      
  237. "2" => array(
  238.     array("9", "", "", "", "7", "", "", "", "6"),
  239.     array("", "2", "", "", "6", "", "4", "3", ""),
  240.     array("", "4", "", "3", "9", "2", "", "", "8"),
  241.     array("", "", "", "", "", "5", "", "8", "3"),
  242.     array("", "5", "", "4", "1", "8", "6", "", ""),
  243.     array("2", "8", "6", "", "3", "7", "", "1", ""),
  244.     array("", "", "", "7", "", "3", "", "", "5"),
  245.     array("", "3", "", "", "8", "6", "", "", ""),
  246.     array("8", "", "7", "", "", "", "", "", "2")),
  247.      
  248. "3" => array(
  249.     array("", "", "", "", "", "", "5", "", "4"),
  250.     array("1", "", "4", "3", "5", "9", "8", "", "7"),
  251.     array("5", "", "", "4", "", "", "", "", ""),
  252.     array("", "", "5", "", "1", "3", "9", "", "8"),
  253.     array("", "1", "", "2", "", "", "6", "", "5"),
  254.     array("6", "8", "3", "", "9", "", "", "4", "2"),
  255.     array("9", "", "8", "", "", "4", "2", "", ""),
  256.     array("4", "2", "", "", "3", "5", "", "", "6"),
  257.     array("", "", "", "", "", "", "", "", "")));
  258.              
  259.     $keys = array_keys($sudoku_leicht);
  260.     $sudokurdm = mt_rand(0, count($sudoku_leicht)-1);  
  261.     $sudoku = $sudoku_leicht[$keys[$sudokurdm]];    
  262.  
  263. }
  264.          
  265.          
  266.          
  267.  
  268.          
  269. # mittlerer Schwierigkeitsgrad
  270.            
  271. if ($_SESSION['einstellungen']=="mittel"){
  272.     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>";
  273.                        
  274. ?>      
  275. <br>  
  276. <main>    
  277. <form action="#" method="POST">
  278. <section id="sudoku">
  279.    
  280. <?php
  281.    
  282. $sudoku_mittel = array(
  283. "1" => array(
  284.     array("", "", "6", "", "4", "9", "", "", ""),
  285.     array("", "7", "1", "", "", "", "", "2", ""),
  286.     array("3", "", "", "", "", "7", "", "5", ""),
  287.     array("", "8", "", "", "5", "", "3", "1", ""),
  288.     array("", "", "", "", "8", "", "", "", ""),
  289.     array("", "6", "4", "", "1", "", "", "7", ""),
  290.     array("", "3", "", "4", "", "", "", "", "7"),
  291.     array("", "4", "", "", "", "", "1", "9", ""),
  292.     array("", "", "", "8", "9", "", "4", "", "")),
  293.      
  294. "2" => array(
  295.     array("", "", "8", "6", "5", "", "", "1", ""),
  296.     array("", "", "2", "", "4", "", "", "", "6"),
  297.     array("", "", "", "", "", "3", "", "2", ""),
  298.     array("", "9", "", "5", "", "", "", "6", ""),
  299.     array("", "", "1", "7", "", "9", "3", "", ""),
  300.     array("", "5", "", "", "", "1", "", "7", ""),
  301.     array("", "4", "", "3", "", "", "", "", ""),
  302.     array("5", "", "", "", "1", "", "2", "", ""),
  303.     array("", "3", "", "", "8", "6", "5", "", "")),
  304.      
  305. "3" => array(
  306.     array("8", "", "", "", "", "", "", "2", ""),
  307.     array("", "", "", "", "6", "4", "", "9", ""),
  308.     array("", "", "", "2", "", "", "4", "", "5"),
  309.     array("", "8", "4", "", "1", "6", "", "3", ""),
  310.     array("6", "", "", "", "3", "", "", "", "7"),
  311.     array("", "1", "", "8", "2", "", "9", "4", ""),
  312.     array("3", "", "9", "", "", "1", "", "", ""),
  313.     array("", "6", "", "3", "7", "", "", "", ""),
  314.     array("", "7", "", "", "", "", "", "", "3")));
  315.              
  316.     $keys = array_keys($sudoku_mittel);
  317.     $sudokurdm = mt_rand(0, count($sudoku_mittel)-1);  
  318.     $sudoku = $sudoku_mittel[$keys[$sudokurdm]];
  319.    
  320. }
  321.  
  322.        
  323.          
  324.          
  325.        
  326.        
  327.              
  328. # schwerer Schwierigkeitsgrad
  329.        
  330.          
  331. if ($_SESSION['einstellungen']=="schwer"){
  332.     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>";
  333.                  
  334. ?>    
  335. <br>  
  336. <main>    
  337. <form action="#" method="POST">
  338. <section id="sudoku">
  339.    
  340. <?php
  341.  
  342.    
  343.    
  344. $sudoku_schwer = array(
  345. "1" => array(
  346.     array("", "", "", "", "", "", "", "4", "8"),
  347.     array("", "9", "8", "2", "", "", "", "", "7"),
  348.     array("", "", "", "4", "3", "", "", "", "6"),
  349.     array("9", "8", "", "", "", "", "", "", ""),
  350.     array("", "", "", "3", "1", "", "", "", ""),
  351.     array("7", "", "", "", "", "", "", "9", "4"),
  352.     array("", "", "9", "", "", "", "6", "", ""),
  353.     array("", "", "", "7", "", "2", "", "", ""),
  354.     array("5", "", "3", "", "", "4", "8", "", "")),
  355.      
  356. "2" => array(
  357.     array("", "", "", "5", "4", "6", "", "", "9"),
  358.     array("", "2", "", "", "", "", "", "", "7"),
  359.     array("", "", "3", "9", "", "", "", "", "4"),
  360.     array("9", "", "5", "", "", "", "", "7", ""),
  361.     array("7", "", "", "", "", "", "", "2", ""),
  362.     array("", "", "", "", "9", "3", "", "", ""),
  363.     array("", "5", "6", "", "", "8", "", "", ""),
  364.     array("", "1", "", "", "3", "9", "", "", ""),
  365.     array("", "", "", "", "", "", "8", "", "6")),
  366.      
  367. "3" => array(
  368.     array("", "", "", "", "", "", "", "5", "3"),
  369.     array("", "", "2", "7", "", "9", "", "4", ""),
  370.     array("", "", "7", "8", "", "", "", "", ""),
  371.     array("", "3", "", "", "", "", "", "", "6"),
  372.     array("", "", "", "9", "", "1", "", "", ""),
  373.     array("", "8", "9", "", "", "2", "", "", "7"),
  374.     array("4", "", "", "", "", "", "2", "", ""),
  375.     array("1", "", "", "", "6", "", "9", "", ""),
  376.     array("8", "", "", "", "4", "", "", "", "")));
  377.              
  378.     $keys = array_keys($sudoku_schwer);
  379.     $sudokurdm = mt_rand(0, count($sudoku_schwer)-1);  
  380.     $sudoku = $sudoku_schwer[$keys[$sudokurdm]];
  381.  
  382. }                    
  383. }
  384.  
  385.    
  386.  # Speichert eines der 3 zufällig ausgewählten Sudokus    
  387.    
  388.    
  389. if(!empty($_POST['einstellungen'])){
  390.     $_SESSION['speichern'] = $sudoku;
  391. }      
  392.    
  393.  
  394.    
  395.    
  396.  
  397.  
  398.  
  399. # noch sind keine Daten zum füllen der Felder verfügbar
  400. $fill = 0;
  401.  
  402. # Zahlen in der Session speichern
  403. if (isset($_POST['zahleneingabe'])){
  404.     $_SESSION['zahleneingabe'] = $_POST['zahleneingabe'];
  405.  
  406.     # jetzt sind Daten um die Felder zu füllen verfügbar
  407.     $fill = 1;
  408. }        
  409.  
  410.    
  411.    
  412.    
  413.  
  414.    
  415.    
  416.    
  417.    
  418.     # Die Spalten und die Zeilen des Sudokus werden beide 9x erstellt
  419.    
  420.    
  421.     if (isset($_POST["absenden"]) or (isset($_POST["submit"]))) {
  422.            
  423.     for($z = 0; $z < 9; $z++)       # $z = Zeile
  424.     for($s = 0; $s < 9; $s++){  # $s = Spalte
  425.  
  426.         # Falls $chunk schon definiert ist, wurden schon Zahlen eingegeben
  427.         if (isset($chunk)) {
  428.  
  429.             # Wenn in einem Feld keine feste Zal ist,
  430.             if ($_SESSION['speichern'][$z][$s] === "") {
  431.  
  432.                 # wird die Zahl eingetragen, die der Spieler eingibt
  433.                 $value = $chunk[$z][$s];
  434.                 $fixed = "";
  435.  
  436.             # Es wird versucht, eine feste Zahl zu ändern
  437.             } else if ($chunk[$z][$s] !== $_SESSION['speichern'][$z][$s]) {
  438.                
  439.                 $value = $_SESSION['speichern'][$z][$s];
  440.                 $fixed = "fixed";
  441.                
  442.                 /*$fehlermeldung = array(
  443.                 "vorhanden" => "Du darfst die bereits vorhandenen Zahlen nicht verändern!");*/
  444.                
  445.  
  446.             # Es wird nicht versucht, eine feste Zahl zu ändern
  447.             } else {
  448.  
  449.                 # sonst wird die feste Zahl eingetragen
  450.                 $value = $_SESSION['speichern'][$z][$s];
  451.                 $fixed = "fixed";
  452.             }
  453.  
  454.         # Beim Betreten der Seitem, sofort die fixed Zahlen eintragen
  455.         } else {
  456.             $value = $_SESSION['speichern'][$z][$s];
  457.             $fixed = $value !== "" ? "fixed" : "";
  458.         }
  459.  
  460.         # Hier wird immer wieder das InputFeld mit dem fixed-wert erstellt
  461.         echo "<div class='input'><input class='$fixed' type='text' name='zahleneingabe[]' minlength='1' maxlength='1' pattern='[1-9]' value='$value'></div>";
  462.     }
  463.  
  464. ?>    
  465.                
  466. </section>          
  467. <center><input type="submit" value="Sudoku überprüfen" name="submit"></center>          
  468. </form>
  469.  
  470. <?php
  471.  
  472. } else {
  473.    
  474. }
  475.        
  476. ?>
  477.    
  478.    
  479.    
  480.  
  481. </main>    
  482. </body>
  483. </html>
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top