Wie kann ich verhindern, dass Benutzer dieselbe Zahl mehrfach im Sudoku eingeben?
- Verhinderung mehrfacher Eingabe der gleichen Zahl im Sudoku
- Funktionsweise der Überprüfung
- Beispielhafte Implementierung in JavaScript
- Integration in das Eingabesystem
- Zusätzliche Tipps
Verhinderung mehrfacher Eingabe der gleichen Zahl im Sudoku
Wenn Benutzer in einem Sudoku-Spiel dieselbe Zahl mehrfach an unerlaubten Stellen eingeben, beeinträchtigt das die Spielregeln und führt zu Fehlern. Um dies zu verhindern, müssen Sie sicherstellen, dass eine Zahl nicht in einer gleichen Reihe, Spalte oder einem 3x3-Block mehrfach vorkommt. Dies ist eine Kernregel im Sudoku, und die Überprüfung erfolgt üblicherweise direkt bei der Eingabe oder vor dem Einfügen der Zahl in das Spielfeld.
Funktionsweise der Überprüfung
Das Sudoku-Spiel wird normalerweise als zweidimensionales 9x9-Array modelliert, das die aktuellen Zahlen im Gitter speichert. Wenn ein Benutzer eine Zahl einträgt, prüft man zunächst, ob die Zahl an dieser Position die Regeln verletzt. Dazu überprüft man drei Bereiche:
Erstens die Zeile, in der die Zahl eingefügt werden soll. Man traversiert alle neun Felder der selben Zeile, um zu sehen, ob die Zahl dort schon existiert.
Drittens der 3x3-Block, in dem sich die Zelle befindet. Dieser Block besteht aus neun Zellen, die zusammengehören (z.B. Zellen 0-2 in Zeile und Spalte für den linken oberen Block), und auch hier darf dieselbe Zahl nicht doppelt vorkommen.
Erst wenn alle diese Tests negativ sind (also die Zahl nirgends in der Zeile, Spalte oder im Block existiert), darf die Zahl für die Zelle angenommen werden.
Beispielhafte Implementierung in JavaScript
Hier ein grundlegendes Beispiel, das zeigt, wie Sie mit JavaScript diese Prüfung umsetzen können:
function isValidMove(board, row, col, num) { // Prüfe Zeile for (let x = 0; x < 9; x++) { if (board === num) { return false; // Zahl ist schon in der Zeile vorhanden } } // Prüfe Spalte for (let y = 0; y < 9; y++) { if (board === num) { return false; // Zahl ist schon in der Spalte vorhanden } } // Prüfe 3x3 Block const startRow = Math.floor(row / 3) * 3; const startCol = Math.floor(col / 3) * 3; for (let r = 0; r < 3; r++) { for (let c = 0; c < 3; c++) { if (board === num) { return false; // Zahl ist im 3x3 Block vorhanden } } } // Wenn alle Prüfungen bestanden sind, ist der Zug gültig return true;}Diese Funktion erhält als Parameter das Sudoku-Board (zweidimensionales Array), die Zielposition (Zeile und Spalte) sowie die Zahl, die eingetragen werden soll. Sie gibt true zurück, falls die Eingabe erlaubt ist, andernfalls false.
Integration in das Eingabesystem
Beim Eingeben einer Zahl sollte das Programm diese Funktion aufrufen, bevor es die Zahl im Spielspeicher setzt. Falls false zurückgegeben wird, kann das System die Eingabe ablehnen, eine Fehlermeldung anzeigen oder den Wert zurücksetzen. Somit erlaubt es keine mehrfachen Einträge gleicher Zahlen in unerlaubten Bereichen.
Zusätzliche Tipps
Sie können zusätzlich überprüfen, ob der Benutzer überhaupt gültige Zahlen von 1 bis 9 eingibt und Leerzellen (z.B. 0 oder null) zulässt. Außerdem ist eine visuelle Markierung bei Konflikten hilfreich, z.B. Zellen rot hervorheben oder einen Popup-Hinweis zeigen.
Beim Web-Programmieren empfiehlt es sich auch, die Eingabe in Formularfeldern zu beschränken und Validierungen sowohl clientseitig (JavaScript) als auch serverseitig vorzunehmen, um Datenintegrität sicherzustellen.
