Os exemplos deste artigo compartilham o código específico do jogo Java Sudoku para sua referência. O conteúdo específico é o seguinte
Planejo instalar os componentes exigidos pelo Javafx e usar diretamente o Javafx, mas parece que a versão do eclipse está errada e não pode ser usada mesmo após a instalação ...
O código sudoku foi escrito durante as férias de inverno. Aprendi Java por um mês. Parece ser um pouco insuficiente agora, mas é o primeiro programa, então eu o coloquei diretamente. A implementação do disco final de Sudoku usa diretamente a violência e a complexidade do tempo é um pouco alta. Estou com preguiça de alterá -lo e colocar diretamente o código.
Implementação de disco final:
importar java.util.random; classe pública sudokupuzuzlegenerator {private aleatoming = new aleatom (); private estático final int max_call_random_array_times = 220; private int currentTimes = 0; public int [] [] generatePuzzLematrix () {int [] [] randommatrix = new int [9] [9]; for (int linha = 0; linha <9; linha ++) {if (linha == 0) {currentTimes = 0; Randommatrix [linha] = BuildRandomArray (); } else {int [] temprandomArray = BuildRandomArray (); para (int col = 0; col <9; col ++) {if (currentTimes <max_call_random_array_times) {if (! iscandidatenMbfound (randommatrix, temprandomarray, row, col)) {resetValuesIrwtoZero (Randommatrix, Row); linha -= 1; col = 8; temprandomarray = BuildRandomarray (); }} else {row = -1; col = 8; ResetValuestozeros (Randommatrix); CurrentTimes = 0; }}} retornar Randommatrix; } private void resetValuesInRowToZero (int [] [] matriz, int linha) {for (int j = 0; j <9; j ++) {matrix [linha] [j] = 0; }} private void resetValuestoZeros (int [] [] matrix) {for (int linha = 0; linha <9; linha ++) {for (int col = 0; col <9; col ++) {matrix [linha] [col] = 0; }}} private boolean iscandidatenMbfound (int [] [] randommatrix, int [] randomArray, int row, int col) {for (int i = 0; i <9; i ++) {randommatrix [linha] [col] = aleatórios [i]; if (noconflict (randommatrix, linha, col)) {return true; }} retornar false; } private boolean noconflict (int [] [] candidatematrix, int linha, int col) {return noconflictinrow (candidatematrix, linha, col) && noconflictincolumn (candidatematrix, row, col) && noconflictinblock (candidatematrix, row) e colon) e noconflictinBlock (candidatematrix, row) e colonfliclicblock (candidatematrix; } private boolean noconflictInrow (int [] [] candidatematrix, int linha, int col) {int currentValue = candidatematrix [linha] [col]; for (int colnum = 0; colnum <col; colnum ++) {if (currentValue == candidatematrix [linha] [colnum]) {return false; }} retornar true; } private boolean noconflictiColumn (int [] [] candidatematrix, int linha, int col) {int currentValue = candidatematrix [linha] [col]; for (int rownum = 0; rownum <linha; rownum ++) {if (currentValue == candidatematrix [rownum] [col]) {return false; }} retornar true; } private boolean noconflictInBlock (int [] [] candidatematrix, int linha, int col) {int baserow = linha / 3 * 3; int basecol = col / 3 * 3; para (int rownum = 0; rownum <8; rownum ++) {if (candidatematrix [baserow + rownum / 3] [basecol + rownum % 3] == 0) {continue; } para (int colnum = rownum + 1; colnum <9; colnum ++) {if (candidatematrix [baserow + rownum / 3] [Basecol + relum % 3] == Candidatematrix [Baserow + Colnum / 3] [Basecol + Colnum % 3]) {Return False; }}} retorna true; } private int [] BuildRandomarray () {currentTimes ++; int [] array = new int [] {1, 2, 3, 4, 5, 6, 7, 8, 9}; int randomint = 0; for (int i = 0; i <20; i ++) {randomint = random.nextInt (8)+1; int temp = matriz [0]; Array [0] = Array [Randomint]; Array [randomint] = temp; } retornar a matriz; } public int getCurrentTimes () {return currentTimes; } public void setCurrentTimes (int currentTimes) {this.currentTimes = currentTimes; }} Interface e julgamento:
Escrito com swing
importar javax.swing.*; importar java.awt.*; importar java.awt.event.*; importar java.util.random; A classe pública SHUD estende JFrame {private estático final serialversionuid = 5952689219411916553L; // serializa campo privado estático jtextfield A [] [] = novo JTextfield [9] [9]; // armazenar os números na caixa de texto estática int ans [] [] = new int [9] [9]; // armazenando a entrada de dois dígitos Sudokupuzzlegenerator Exemplo = new SudokupuzuzleGenerator (); public int Right [] [] = exemplo.GeraRePuzzLematrix (); Direitos Public Int [] []; private int [] [] WK (int a [] []) {// Hidden Random r = new Random (); int a1, a2; A1 = R.NextInt (9); A2 = R.NextInt (9); for (int i = 0; i <100; i ++) {a [a1] [a2] = 0; A1 = R.NextInt (9); A2 = R.NextInt (9); } retornar um; } public shud () {contêiner c = getContentPane (); C.SetLayout (New BorderLayout (2, 1)); // layout de fronteira jmenuitem jmiok = new jmenuitem ("submit"); // define menu jmenuitem jmiexplain = new jmenuitem ("detalhes"); Jmenuitem jmimessage = new jmenuitem ("Information"); Painel jpanel = new jpanel (); // define um painel de contêineres.add (jmiok); // mostra o menu no painel do contêiner.add (jmiexplain); painel.add (JMimessage); JPanel P1 = New JPanel (New GridLayout (9, 9, 5, 5)); // Defina o layout da grade de 9 linhas e 9 colunas add (painel, borderlayout.north); // coloque o menu no norte add (p1, borderlayout.center); // coloque os números no meio rightans = semana (à direita); para (int k = 0; k <9; k ++) {for (int n = 0; n <9; n ++) {if (rightans [k] [n]! a [k] [n] .SethorizontalAlignment (jtextfield.center); // centralize o número horizontalmente a [k] [n] .seteditable (false); // exibe apenas P1.Add não modificado (a [k] [n]); // Adicione caixa de texto} else {a [k] [n] = new jtextfield (); a [k] [n] .SethorizontalAlignment (jtextfield.center); p1.add (a [k] [n]); }} add (p1); // Mostra o painel digital no contêiner jmiok.addactionListener (new ActionListener () {// Crie o ouvinte anônimo do evento public void ActionPerformed (ActionEvent E) {if (getText () == 1) {if (juiz () ==) {joptpane.showMessagalog (null (Judge () ==) Certo! "," Resultado ", JoptionPane.information_message);} else {joptionpane.showMessagedialog (null," Sua resposta está certa! "," Result ", JoptionPane.information_message);} else {JOPtionPane.Showmessagedialog (null" " errado! "," Resultado ", joptionpane.information_message);}}}}}); ExpliqueListenerclass ouvinte2 = new ExplyListenerClass (); jmiexplain.addactionListener (ouvinte2); messagelistenerclass ouvinte3 = new Messagelistenerclass (); jmimessage.addactionListener (ouvinte3); } static int getText () // Obtenha o texto da caixa de texto {int i, j; for (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 // Manuseio de exceção {Ans [k] [n] = Integer.parseint (a [k] [n] .getText ()); // Converta o tipo de resposta em ANS} catch (numberformatexception nfe) {JoptionPane.showMessagedialog (null, "inclua não-numbers nos dados, por favor, volte-se"); retornar 0; }}} retornar 1; } juiz booleano estático público () // julga se a resposta de entrada está correta {int i, j, k; int [] [] resposta = Ans; for (i = 0; i <9; i ++) {if (j (resposta [i]) == false) // julga se existem números duplicados em cada coluna retorna false; } para (j = 0; j <9; j ++) // julga se existem números duplicados em cada linha {int [] newanswercolumn = new int [9]; for (i = 0; i <9; i ++) {newanswercolumn [i] = resposta [i] [j]; } if (j (newanswercolumn) == false) retorna false; } para (i = 0; i <3; i ++) // julgue se existem números duplicados em cada nona grade {for (j = 0; j <3; j ++) {k = 0; int [] newanswer = new int [9]; for (int m = i * 3; m <i * 3 +3; m ++) {for (int n = j * 3; n <j * 3 +3; n ++) {newanswer [k] = resposta [m] [n]; k ++; }} if (juiz9 (newanswer) == false) {return false; }} retornar true; } public static boolean juiz9 (int [] resposta) {int i, j; for (i = 0; i <9; i ++) {for (j = 0; j <9; j ++) {if (i == j) continue; if (responda [i] == Responder [j]) // Se houver números duplicados, retorne false {return false; }}} retorna true; // sem números duplicados, retorne verdadeiro} public static void main (string [] args) {jframe frame = new shud (); frame.setTitle ("suduku"); frame.SetSize (600.900); frame.setLocationRelativeTo (NULL); frame.setDefaultCloseoperation (jframe.exit_on_close); frame.setVisible (true); }} Classe ExpliqueListEnerClass implementa ActionListener {// Event LivenerPublic void ActionPerformed (ActionEvent E) {JoptionPane.ShowMessagedialog (NULL, "Preencha os números para garantir que não haja duplicação de números em cada linha, cada coluna e cada pequena nine-grid" "" "Explique, explicar, JOPT. }} classe MessagelistEnerclass implementa ActionListener {public void ActionPerformed (ActionEvent E) {JoptionPane.showMessagedialog (null, "Made By Wyx", "Mensagem", JoptionPane.information_message); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.