Los ejemplos en este artículo comparten el código específico del juego Java Sudoku para su referencia. El contenido específico es el siguiente
Planeo instalar los componentes requeridos por Javafx y usar Javafx directamente, pero parece que la versión de Eclipse es incorrecta y no se puede usar incluso después de la instalación ...
El código de Sudoku fue escrito durante las vacaciones de invierno. Aprendí Java por un mes. Parece que ahora es un poco insuficiente, pero después de todo es el primer programa, así que lo puse directamente. La implementación del disco final de Sudoku usa directamente la violencia, y la complejidad del tiempo es un poco alta. Soy demasiado vago para cambiarlo y poner directamente el código.
Implementación del disco final:
import java.util.random; clase pública SudokUpuzzleGenerator {private Random Random = new Random (); Private static final int max_call_random_array_times = 220; Private int curtentTimes = 0; public int [] [] generatePuzzLematrix () {int [] [] randommatrix = new int [9] [9]; for (int row = 0; fila <9; fila ++) {if (fila == 0) {currentTimes = 0; randommatrix [fila] = buildRandomArray (); } else {int [] temprandomArray = buildRandomArray (); for (int col = 0; col <9; col ++) {if (currentTimes <max_call_random_array_times) {if (! isCandidAtenmbfound (randommatrix, temprandomArray, fila, col)) {resetvaluesInrowTozero (randommatrix, fila); fila -= 1; col = 8; TemPrandomArray = buildRandomArray (); }} else {row = -1; col = 8; ResetvaluStezeros (randommatrix); CurrentTimes = 0; }}} return randommatrix; } private void resetValuesInrowToZero (int [] [] matrix, int row) {for (int j = 0; j <9; j ++) {matrix [fila] [j] = 0; }} private void resetvaluStezeros (int [] [] matrix) {for (int row = 0; fila <9; fila ++) {for (int col = 0; col <9; col ++) {matrix [fila] [col] = 0; }}} booleano privado iscandidatenmbfound (int [] [] randommatrix, int [] randomArray, int row, int col) {for (int i = 0; i <9; i ++) {randommatrix [fila] [col] = randomarray [i]; if (noconflict (randommatrix, row, col)) {return true; }} return false; } private boolean noconflict (int [] [] candidateMatrix, int row, int col) {return noconflictInrow (candidateMatrix, row, col) && noconflictIncolumn (candidateMatrix, fila, col) && noconflictinblock (Candidatematrix, Row, col); } booleano privado noconflictinrow (int [] [] candidateMatrix, int row, int col) {int currentValue = candidateMatrix [fila] [col]; for (int colnum = 0; colnum <col; colnum ++) {if (currentValue == candidateMatrix [fila] [colnum]) {return false; }} return verdadero; } booleano privado noconflictIncolumn (int [] [] candidateMatrix, int row, int col) {int curtentValue = candidateMatrix [fila] [col]; for (int rownum = 0; Rownum <row; Rownum ++) {if (currentValue == candidateMatrix [Rownum] [col]) {return false; }} return verdadero; } boolean privado noconflictInblock (int [] [] candidateMatrix, int row, int col) {int Baserow = row / 3 * 3; int basecol = col / 3 * 3; for (int rownum = 0; Rownum <8; Rownum ++) {if (candidateMatrix [Baserow + Rownum / 3] [Basecol + Rownum % 3] == 0) {Continuar; } para (int colnum = Rownum + 1; Colnum <9; Colnum ++) {if (Candidatematrix [Baserow + Rownum / 3] [Basecol + Rownum % 3] == Candidatematrix [Baserow + Colnum / 3] [Basecol + Colnum % 3]) {return False; }}} return true; } private int [] buildRandomArray () {actualTimes ++; int [] array = new int [] {1, 2, 3, 4, 5, 6, 7, 8, 9}; int randomint = 0; para (int i = 0; i <20; i ++) {randomInt = random.nextint (8)+1; int temp = array [0]; matriz [0] = array [randomint]; Array [Randomint] = temp; } matriz de retorno; } public int getCurrentTimes () {return currentTimes; } public void setCurrentTimes (int curtentTimes) {this.currentTimes = currentTimes; }} Interfaz y juicio:
Escrito con Swing
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.random; Public Class Shud extiende Jframe {Private Static Final Long SerialVersionUid = 5952689219411916553l; // Serializar campo privado static jtextfield a [] [] = new JTextfield [9] [9]; // almacenamiento de los números en el cuadro de texto static int ans [] [] = new int [9] [9]; // almacenar la matriz de entrada de dos dígitos SudokupuzzleGenerator Ejemplo = new SudokupuzzleGenerator (); public int Right [] [] = Ejemplo.GeneratePUzzLematrix (); Public int derechos [] []; private int [] [] wk (int a [] []) {// Hidden Random r = new Random (); int a1, a2; A1 = R.NextInt (9); A2 = R.NextInt (9); para (int i = 0; i <100; i ++) {a [a1] [a2] = 0; A1 = R.NextInt (9); A2 = R.NextInt (9); } return a; } public shud () {contenedor c = getContentPane (); C.SetLayout (nuevo BorderLayout (2, 1)); // Diseño de borde JMenuitem jmiok = new JMenuitem ("enviar"); // Definir menú JMenuitem JMiexPlain = new JMenuitem ("Detalles"); JMenuitem JMIMessage = new JMenuitem ("Información"); Panel jpanel = new JPanel (); // Defina un contenedor panel.add (jmiok); // Mostrar el menú en el panel de contenedores.Add (JMIExPlain); panel.Add (JMIMessage); JPanel P1 = nuevo JPanel (nuevo GridLayout (9, 9, 5, 5)); // Defina el diseño de la cuadrícula de 9 filas y 9 columnas ADD (panel, borderLayout.north); // Coloque el menú en North Add (P1, BorderLayout.Center); // Coloque los números en el centro de la derecha = wk (derecha); para (int k = 0; k <9; k ++) {for (int n = 0; n <9; n ++) {if (rayans [k] [n]! = 0) {a [k] [n] = new JTextField (""+REDES [k] [n]); a [k] [n] .SethorizontalAlignment (jTextfield.center); // Centra el número horizontalmente a [k] [n] .setEditable (falso); // solo muestra no modificado p1.add (a [k] [n]); // Agregar cuadro de texto} else {a [k] [n] = new JTextField (); a [k] [n] .sethorizontalalignment (jTextfield.center); p1.add (a [k] [n]); }} add (p1); // Mostrar el panel digital en el contenedor jmiok.addactionListener (new ActionListener () {// Crear oyente de eventos anónimo public void actionperformed (ActionEvent e) {if (getText () == 1) {if (juzgar () == true) {joptionpane.showmessedialog (nullo "," su respuesta es es una respuesta es ¡Correcto! "," Resultado ", JOptionPane.Information_Message);} else {joptionPane.ShowMessEdialog (NULL," ¡Su respuesta es correcta! "," Resultado ", jOptionPane.Information_Message);} else {joptionPane.showMessagedialog (nulo", "su respuesta es es ¡Incorrecto! "," resultado ", joptionPane.information_message);}}}}}); ExplyListerClass oyente2 = new ExplicleListenerClass (); jmiexPlain.addactionListener (Listener2); MessageListenerClass Listener3 = new MessageListenerClass (); JMIMessage.AddactionListener (Listener3); } static int getText () // Obtener el texto del cuadro de texto {int i, j; para (i = 0; i <9; i ++) {for (j = 0; j <9; j ++) {ans [i] [j] = 0; }} para (int k = 0; k <9; k ++) {for (int n = 0; n <9; n ++) {try // manejo de excepción {Ans [k] [n] = Integer.ParseInt (a [k] [n] .gettext ()); // Convierta el tipo de respuesta a Ans} Catch (NumberFormateException nfe) {joptionPane.showMessEdialog (nulo, "Incluya no numbers en los datos, vuelva a ingresar"); regresar 0; }}} return 1; } juez público booleano () // juzga si la respuesta de entrada es correcta {int i, j, k; int [] [] respuesta = ans; for (i = 0; i <9; i ++) {if (j (respuesta [i]) == falso) // juzga si hay números duplicados en cada columna return false; } para (j = 0; j <9; j ++) // juzga si hay números duplicados en cada fila {int [] newanswercolumn = new int [9]; para (i = 0; i <9; i ++) {newanswercolumn [i] = respuesta [i] [j]; } if (j (newanswerColumn) == falso) return false; } para (i = 0; i <3; i ++) // juzga si hay números duplicados en cada novena cuadrícula {para (j = 0; j <3; j ++) {k = 0; int [] newanswer = new int [9]; para (int m = i * 3; m <i * 3 +3; m ++) {for (int n = j * 3; n <j * 3 +3; n ++) {newAnSwer [k] = respuesta [m] [n]; K ++; }} if (Judge9 (NewAnswer) == falso) {return false; }} return verdadero; } Public static boolean juez9 (int [] respuesta) {int i, j; para (i = 0; i <9; i ++) {for (j = 0; j <9; j ++) {if (i == j) continuar; if (respuesta [i] == respuesta [j]) // Si hay números duplicados, return false {return false; }}} return true; // No hay números duplicados, return true} public static void main (string [] args) {jframe frame = new shud (); Frame.settitle ("Suduku"); Frame.setsize (600,900); Frame.SetLocationRelativeto (nulo); Frame.setDefaultCloseOperation (jframe.exit_on_close); Frame.SetVisible (verdadero); }} class ExplicleListenerClass implementa ActionListener {// Event LoyerPublic Void ActionPerformed (ActionEvent e) {jOptionPane.ShowMessEdialog (nulo ", complete los números para garantizar que no haya duplicación de números en cada fila, cada columna y cada pequeña nine-ins", "Explique", joptionPane.information_message); }} clase MessionAgelistenerClass implementa ActionListener {public void ActionPerformed (ActionEvent E) {jOptionPane.ShowMessEdialog (nulo, "hecho por wyx", "mensaje", joptionPane.information_message); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.