Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.77 KB | None | 0 0
  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>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement