Als ich JavaScript lernte, schrieb ich ein Sudoku -Spiel in JavaScript. Ich habe kürzlich einige Java -Inhalte gelesen, also wollte ich eine Java -Version von Sudoku Game erstellen.
Jetzt werde ich den gesamten Code teilen und von Ihnen lernen. Natürlich gibt es verschiedene Probleme und Mängel im Code. Ich hoffe, Sie werden kritisieren und mir einige Ratschläge geben.
Das Folgende ist der Kernalgorithmus für die Erzeugung von Sudoku -Karten. Der Algorithmus ist nicht sehr gut, und ich habe auch schon einmal auf einige Ideen online verwiesen:
Paket hlc.shudu.src;/** sudoku help -Klasse, die alle für Daten benötigten Algorithmen enthält*/öffentliche Klasse Shuduhelper {// Sudoku Map Array Private statische statische int [] [] maps = new int [9] [9]; // die Anzahl der Positionen, die in jedem neun-meter-Gitter private statische int [] canputsum = new int [9] platziert werden können; // verwendet, um zuvor statische int [] verwendet zu speichern = new int [9]; // ob die Kartengenerierung abgeschlossen wurde statisch boolean isok = true; /** Holen Sie sich das Sudoku -Kartenarray*/public static int [] [] getMap () {// Beurteilen Sie, ob die Karte generiert und regeneriert wurde, wenn sie nicht abgeschlossen ist. // Daraus können wir sehen, dass der Algorithmus noch optimiert werden muss. Wenn der Backtrack gut ist, kann er durch Backtracking regeneriert werden, und hier wird er durch erneuter Ausführung des Generationsalgorithmus regeneriert. Ich hoffe, dass interessierte Freunde Folgendes umsetzen können. do {isok = true; initmaps (); } while (! isok); Karten zurückgeben; } / * * Karten initialisieren * / private statische void initmaps () {// MAP -Array initialisieren ohne eine Zahl für (int i = 0; i <9; i ++) {für (int j = 0; j <9; j ++) {maps [i] [j] = -1; }} // füllen Sie 1 ~ 9 für (int num = 1; num <= 9; num ++) {für (int i = 0; i <9; i ++) {verwendet [i] = -1; Canputsum [i] = -1; } // Jedes neunte Raster im Big Nine Grid für (int i = 0; i <9; i ++) {if (canputsum [i] ==-1) {canputsum [i] = getCanputsum (i, num); } if (canputsum [i] == 1) {verwendet [i] = -1; } if (canputsum [i] == 0) {canputsum [i] = -1; verwendet [i] = -1; // Wenn die Nummer Num nicht in das aktuelle Nine-Raster platziert werden kann, kehren Sie zum vorherigen NIN zurück, wenn (i> 0) {// die Position löschen, in der Num in das vorherige neun Gitter platziert wird, wenn (verwendet [i-1]! =-1) {// maps [(int)) (Math.floor (verwendet [i-1]/3)+math.floor ((i-1)/3)*3)] [verwendet [i-1]%3+((i-1)%3)*3] =-1; Clearnum (i - 1, num); } // Ich fällt zurück, weil das für Loop Grey einen zu i hinzufügt, also wird 2 hier i -= 2 abtrahiert; weitermachen; } else {isok = false; zurückkehren; }} else {// In die aktuelle neunte Gitter -Boolean -Flagge = false; while (! flag) {int j = (int) (math.random () * 9); // die horizontale Koordinate des aktuellen kleinen Quadrats int II = (I / 3) * 3 + j / 3; // die aktuelle vertikale Koordinate des kleinen Quadrats int jj = (i % 3) * 3 + j % 3; //System.out.println("num:"+num+"/tii:"+ii+"/tjj:"+Jj); // Wenn Num platziert werden kann, platzieren Sie if (Maps [ii] [jj] == -1 && j! = Verwendet [i] && iscanput (ii, jj, num)) {maps [ii] [jj] = num; verwendet [i] = j; Canputsum [i] -= 1; Flag = wahr; }}}}}}}} / * * Löschen im neunten neunten Raster * / private statische void clearnum (int i, int num) {für (int j = 0; j <9; j ++) {// die horizontale Koordinate des aktuellen kleinen Quadrats int ii = (i / 3) * 3+J / 3; // die vertikale Koordinate des aktuellen kleinen Quadrats int jj = (i % 3) * 3 + j % 3; // Bestimmen Sie, ob das aktuelle kleine Quadrat platziert werden kann, wenn (Karten [ii] [jj] == num) {Maps [ii] [jj] = -1; }}} /** Die Anzahl der Positionen abrufen, in denen der aktuelle neun-klient in der numn num* / private static int getCanputsum (int i, int num) {int sum = 0 platziert werden kann; // Durchqueren Sie den Neun-Client für (int j = 0; j <9; j ++) {// die horizontale Koordinate des aktuellen kleinen Quadrats int II = (i / 3) * 3+j / 3; // die vertikale Koordinate des aktuellen kleinen Quadrats int jj = i % 3 * 3 + j % 3; // Bestimmen Sie, ob das aktuelle kleine Quadrat platziert werden kann, wenn (Karten [ii] [jj] == -1 && iscanput (ii, jj, num)) {++ sum; }} return sum; } / * * Geben Sie an, ob die horizontalen und vertikalen Koordinatenpunkte num platziert werden können. Wenn es gibt, ist es falsch für (int i = 0; i <9; i ++) {if (maps [ii] [i] == num) {return false; } if (maps [i] [jj] == num) {return false; }} return true; }}Das komplette Paket kann auf GitHub heruntergeladen werden: https://github.com/houlongchao/s
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.