本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下
打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用...
数独代码是在之前寒假受命写的,学了一个月java的成果,现在看来有些不足但毕竟是第一个程序,就直接放上来,数独终盘的实现直接用了暴力,时间复杂度有点高,懒得改了直接放代码
终盘实现:
import java.util.Random; public class SudokuPuzzleGenerator { private Random random = new Random(); private static final int MAX_CALL_RANDOM_ARRAY_TIMES = 220; private int currentTimes = 0; public int[][] generatePuzzleMatrix() { int[][] randomMatrix = new int[9][9]; for (int row = 0; row <9; row++) { if (row == 0) { currentTimes = 0; randomMatrix[row] = buildRandomArray(); } else { int[] tempRandomArray = buildRandomArray(); for (int col = 0; col <9; col++) { if (currentTimes
界面及判断:
用swing写的
import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.Random; public class ShuD extends JFrame{ private static final long serialVersiOnUID= 5952689219411916553L; //序列化字段 private static JTextField a[][] = new JTextField[9][9]; //存储文本框中的数字 static int ans[][] = new int[9][9]; //存储输入后的两位数组 SudokuPuzzleGenerator example = new SudokuPuzzleGenerator(); public int right[][] = example.generatePuzzleMatrix(); public int rightans[][]; private int[][] Wk(int a[][]){ //挖空 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); } return a; } public ShuD(){ Container c = getContentPane(); c.setLayout(new BorderLayout(2, 1)); //边框布局 JMenuItem jmiOk = new JMenuItem("提交"); //定义菜单 JMenuItem jmiExplain = new JMenuItem("详情"); JMenuItem jmiMessage = new JMenuItem("信息"); JPanel panel = new JPanel(); //定义一个容器 panel.add(jmiOk); //将菜单在容器内显示 panel.add(jmiExplain); panel.add(jmiMessage); JPanel p1 = new JPanel(new GridLayout(9, 9, 5, 5)); //定义9行9列的网格布局 add(panel,BorderLayout.NORTH); //将菜单放置在北面 add(p1,BorderLayout.CENTER); //将数字放置在正中间 rightans = Wk(right); for(int k = 0;k<9; k ++) { for(int n=0;n<9;n++) { if(rightans[k][n] != 0) { a[k][n] = new JTextField("" + rightans[k][n]); a[k][n].setHorizontalAlignment(JTextField.CENTER);//将数字水平居中 a[k][n].setEditable(false); //只可显示不可修改 p1.add(a[k][n]); //添加文本框 } else { a[k][n] = new JTextField(); a[k][n].setHorizontalAlignment(JTextField.CENTER); p1.add(a[k][n]); } } } add(p1); //将数字面板显示在容器里 jmiOk.addActionListener(new ActionListener(){//匿名创建事件监听器 public void actionPerformed(ActionEvent e) { if(gettext() == 1) { if(judge() == true) { JOptionPane.showMessageDialog(null, "Your answer is right!","Result",JOptionPane.INFORMATION_MESSAGE); } else { JOptionPane.showMessageDialog(null, "Your answer is wrong!","Result",JOptionPane.INFORMATION_MESSAGE); } } } }); explainListenerClass listener2 = new explainListenerClass(); jmiExplain.addActionListener(listener2); messageListenerClass listener3 = new messageListenerClass(); jmiMessage.addActionListener(listener3); } static int gettext() //获取文本框的文字 { int i,j; for(i = 0; i <9; i++) { for(j = 0; j <9 ; j ++) { ans[i][j] = 0; } } for(int k = 0;k <9; k++) { for(int n = 0;n <9; n++) { try //异常处理 { ans[k][n] = Integer.parseInt(a[k][n].getText()); //将答案类型转换之后传给ans } catch(NumberFormatException nfe) { JOptionPane.showMessageDialog(null,"数据中包括非数字,请重新输入"); return 0; } } } return 1; } public static boolean judge() //判断输入的答案是否正确 { int i,j,k; int [][]answer = ans; for(i = 0; i <9; i ++) { if(judge9(answer[i]) == false) //判断每列是否有重复数字 return false; } for(j = 0; j <9; j ++) //判断每行是否有重复数字 { int[] newAnswerColumn = new int[9]; for(i = 0; i <9; i ++) { newAnswerColumn[i] = answer[i][j]; } if(judge9(newAnswerColumn) == false) return false; } for(i = 0; i <3; i ++) //判断每个小九宫格内是否有重复数字 { for(j = 0; j <3; j ++) { k = 0; int[] newAnswer = new int[9]; for(int m = i * 3; m
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。