数独 JAVA实现

数独游戏的规则从很久之前就知道,但是一直都没怎么玩过,然后到了大学,大一下学期自己学dfs的时候,刚刚好碰到了一个数独的题目,做出来后,感觉还是挺有成就感的

然后大二学了JAVA,看了下那个一些有关于界面的一些函数的使用这些,就写出来一个比较粗糙的数独游戏,这个游戏我打算一直维护更新,直到我大学毕业,看看最后可以变成什么样子

1 public class Main {
2     public static void main(String[] args) {
3         gra f = new gra("数独",400,400,400,400);
4     }
5 }
  1 package sodu;
  2 import java.io.*;
  3 import java.util.*;
  4 import java.math.*;
  5 import java.security.PrivateKey;
  6 import java.awt.*;
  7 import java.awt.event.ActionEvent;
  8 import java.awt.event.ActionListener;
  9 
 10 import javax.security.auth.login.CredentialExpiredException;
 11 import javax.security.cert.CertificateNotYetValidException;
 12 import javax.swing.*;
 13 import javax.swing.text.AbstractDocument.LeafElement;
 14 
 15 import org.omg.PortableServer.ServantLocator; 
 16 public class gra extends JFrame {
 17     Scanner cin = new Scanner(System.in);
 18     Random ran = new Random();
 19     JMenuBar mbar;
 20     JMenuItem ito,itt,its;
 21     JMenu menu;
 22     JTextField [][]tx = new JTextField [9][9];
 23     GridLayout gri;
 24     JPanel chess= new JPanel();;
 25     int[][] ans = new int[9][9];
 26     int []a = new  int [11];
 27     int [][]num = new int[9][9];
 28     int [][]fat = {
 29                 {8,7,1,9,3,2,6,4,5},
 30                 {4,9,5,8,6,1,2,3,7},
 31                 {6,3,2,7,5,4,8,1,9},
 32                 {5,2,8,4,7,3,1,9,6},
 33                 {9,1,3,6,2,5,7,8,4},
 34                 {7,6,4,1,9,8,3,5,2},
 35                 {2,8,7,3,4,9,5,6,1},
 36                 {1,4,6,5,8,7,9,2,3},
 37                 {3,5,9,2,1,6,4,7,8},
 38     };
 39     gra(){
 40     }
 41     gra(String name,int a,int b,int c,int d){
 42         ints(name);
 43         setLocation(a,b);
 44         setSize(c,d);
 45         setVisible(true);
 46         set();
 47         setDefaultCloseOperation(EXIT_ON_CLOSE);
 48     }
 49     void Show(){        
 50         chess.updateUI();
 51         chess.removeAll();
 52         gri = new GridLayout(9,9);
 53         for(int i = 0 ; i < 9 ; i++)
 54             for(int j = 0 ; j <9 ; j++){
 55                 String s = String.valueOf(num[i][j]);
 56                 int n = ran.nextInt(13);
 57                 if(n%4==0){
 58                     ans [i][j] = num [i][j];
 59                     JLabel text = new JLabel(s,JLabel.CENTER);
 60                     text.setForeground(Color.white);
 61                     chess.add(text);
 62                 }else{
 63                     tx[i][j] = new JTextField();
 64                     tx[i][j].setHorizontalAlignment(SwingConstants.CENTER);
 65                     chess.add(tx[i][j]);
 66                 }
 67             }
 68         chess.setLayout(gri);
 69         chess.setBackground(Color.DARK_GRAY);
 70         add(chess);    
 71     }
 72     void set(){
 73         ito.addActionListener(new ActionListener(){
 74             public void actionPerformed(ActionEvent e) {    
 75                 setVisible(false);
 76                 calc();
 77                 Show();
 78                 setVisible(true);
 79             }
 80         });
 81         itt.addActionListener(new ActionListener(){
 82             public void actionPerformed(ActionEvent e) {
 83                         judge();
 84             }
 85         });
 86         its.addActionListener(new ActionListener() {
 87             public void actionPerformed(ActionEvent e) {
 88                 setVisible(false);
 89             }
 90         });
 91         
 92     }
 93     void ints(String s){
 94         setTitle(s);
 95         mbar = new JMenuBar();
 96         menu = new JMenu("菜单");
 97         ito = new JMenuItem("开始");
 98         itt = new JMenuItem("提交");
 99         its = new JMenuItem("退出");
100         menu.add(ito);
101         menu.add(itt);
102         menu.add(its);
103         mbar.add(menu);
104         setJMenuBar(mbar);
105     }
106     void calc(){
107         boolean []b = new boolean[11];
108         int i = 0;
109         b[0] = true;
110         while(i<9){
111             int n = ran.nextInt(10);
112             if(!b[n]) {
113                 a[i++] = n;
114                 b[ n ] = true;
115             }
116         }
117         for(int k = 0 ; k < 9 ; k++)
118             for(int m = 0 ; m < 9 ; m++)
119                 for(int n = 0 ; n < 9 ; n++){
120                     if(fat[m][n]==a[ k ] && k != 8){
121                         num[m][n] = a[k+1];
122                     }else if(fat[m][n]==a[k]&&k == 8){
123                         num[m][n] = a[0];
124                     }
125                 }
126     void judge(){
127         int falg = 0;
128         for(int i = 0 ; i < 9 ; i++)
129             for(int j = 0 ; j < 9 ; j++){
130                 if(ans[i][j] == 0) {
131                     int tmp = Integer.valueOf(tx[i][j].getText());
132                     ans[i][j] = tmp;
133                 }
134             }
135         for(int i = 0 ; i < 9 ; i++){
136             boolean[]h = new boolean[10];
137             boolean[]s = new boolean[10];
138             for(int j = 0 ; j < 9 ; j++){
139                 if(!h[ans[i][j]]&&!s[ans[i][j]]){
140                     h[ans[i][j]] = true;
141                     s[ans[i][j]] = true;
142                 }else {
143                     falg = 1;
144                     break;
145                 }
146             }
147             if(falg == 1) break;
148         }
149         if(falg == 1) {
150             JFrame a = new JFrame("错误");
151             JTextField text = new JTextField("你的答案错了");
152             text.setHorizontalAlignment(SwingConstants.CENTER);
153             a.add(text);
154             a.setSize(200,200);
155             a.setLocation(500,500);
156             a.setVisible(true);
157         }else{
158             JFrame a = new JFrame("成功");
159             JTextField text = new JTextField("你的答案正确");
160             text.setHorizontalAlignment(SwingConstants.CENTER);
161             text.setForeground(Color.red);
162             a.add(text);
163             a.setSize(200,200);
164             a.setLocation(500,500);
165             a.setVisible(true);
166         }
167     }
168 }
169     
gra
原文地址:https://www.cnblogs.com/Tree-dream/p/6051858.html