Willkommen auf www.sudokurechner.de.vu

Linkweg: Home / Zahlenrätsel / Sudoku / Skripte / Klasse: sudoku_logic / Methode: check()

Methode: sudoku_logic::check()

PHP-Code
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
<?php
 
function check($mode=false) {
  for ($x=0;$x<9;$x++) {
    for ($y=0;$y<9;$y++) {
      if (9 < $this->arrZeilen[$x][$y]) {
        $this->status = 'unfinished';
        return true;
      }
    }
  }
  $this->aktualisieren();
  for ($x=0;$x<9;$x++) {
    $arrStatus = array_count_values($this->arrZeilen[$x]);
    foreach ($arrStatus as $key => $element) {
      if (1 < $element && '' != $key) {
        $this->status = 'error';
        return true;
      }
    }
    $arrStatus = array_count_values($this->arrSpalten[$x]);
    foreach ($arrStatus as $key => $element) {
      if (1 < $element && '' != $key) {
        $this->status = 'error';
        return true;
      }
    }
    $arrStatus = array_count_values($this->arrFelder[$x]);
    foreach ($arrStatus as $key => $element) {
      if (1 < $element && '' != $key) {
        $this->status = 'error';
        return true;
      }
    }
  }
  if ($mode) {
    for ($x=0;$x<9;$x++) {
      for ($y=0;$y<9;$y++) {
        if ('' == $this->arrZeilen[$x][$y]) {
          $this->status = 'error';
          return true;
        }
      }
    }
  }
  $this->status = 'finished';
}
 
?>

sudoku_logic::check() aktualisiert $status.
Wenn in einem Feld noch mehrere Zahlen möglich sind, so ist das Rätsel noch nicht fertig gelöst. Ist dies der Fall, so erhält $status den Wert "unfinished" (= nicht fertig) und die Methode wird durch return true abgebrochen.
Als nächstes werden die Werte aus $arrZeilen in $arrSpalten und $arrFelder geschrieben.
Dann wird überprüft, ob in einer Zeile, einer Spalte oder einem Feld ein Wert doppelt vorkommt. Ist dies der Fall, so ist das Ergebnis falsch. Deshalb erhält $status den Wert "error" (= Fehler) und die Methode wird durch return true abgebrochen.
In der letzten Überprüfung ist $mode = true. Dann wird auch überprüft, ob in einem Feld kein Wert vorkommen kann. Ist dies der Fall, so ist das eingegebene Rätsel falsch. $status erhält den Wert "error" (= Fehler) und die Methode wird abgebrochen.
Sollte jedoch keine der vorigen Bedingungen zutreffen, so erhält $status den Wert "finished" (= Fertig). Im nächsten Schritt wird das Ergebnis dann ausgegeben.

Links: