StartseiteZahlenrätselSudokuSkripteKlasse: sudoku_logicMethode: check()

Methode: check()

  1. <?php

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

  47. ?>

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:

Ausblenden