一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java數獨游戲完整版分享

java數獨游戲完整版分享

2021-03-07 12:13lideguo1979 Java教程

這篇文章主要為大家分享了java數獨游戲的完整版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了java數獨游戲的具體代碼,供大家參考,具體內容如下

自己寫的數獨游戲,共9關,代碼如下:

1、DoShudu類用于產生數獨數組

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import java.util.Random;
 
public class DoShudu {
 
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
 
   
  int[][] cells=newshudu();
   
  //cells=changeShu(cells,9);
  for(int k=0;k<9;k++){
   for(int i=0;i<9;i++){
   System.out.print(cells[k][i]);
   }
   System.out.println();
  }
 }
  
  
 public static int[][] newshudu(){
   
  int[][] cells=new int[][]{
     
    {1,2,3,4,5,6,7,8,9},
    {4,5,6,7,8,9,1,2,3},
    {7,8,9,1,2,3,4,5,6},
    {2,3,1,5,6,4,8,9,7},
    {5,6,4,8,9,7,2,3,1},
    {8,9,7,2,3,1,5,6,4},
    {3,1,2,6,4,5,9,7,8},
    {6,4,5,9,7,8,3,1,2},
    {9,7,8,3,1,2,6,4,5}
     
  };
   
   
   
  int countH=new Random().nextInt(10);
  for(int k=0;k<countH;k++){
   cells=lineTolie(cells);
   
  }
   
  int count=0;
  for(int k=0;k<12;k++){
   count=new Random().nextInt(9);
   cells=changeLine(cells,count);
   
  }
   
  int countH2=new Random().nextInt(10);
  for(int k=0;k<countH2;k++){
   cells=lineTolie(cells);
   
  }
  return cells;
 }
  
 public static int [][] changeLine(int[][] cells,int m){//行與行交換
  int n=m;
  int [] temp=new int[9];
  n=((m+3)>=9)?(m+3-9):m+3;
   for(int j=0;j<9;j++){
    temp[j]=cells[m][j];
    cells[m][j]=cells[n][j];
    cells[n][j]=temp[j];
    
  }
  return cells;
   
 }
  
 
 public static int[][] lineTolie(int[][] cells){//行與列互換
   
  int temp=0;
  for(int j=0;j<9;j++){
    for(int k=j+1;k<9;k++){
     temp=cells[k][j];
     cells[k][j]=cells[j][k];
     cells[j][k]=temp;
 
    }
  }
  return cells;
   
   
 }
 
}

2、界面運行類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
import java.awt.Button;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Point;
import java.awt.TextField;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.TextEvent;
import java.awt.event.TextListener;
import java.util.Random;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
import com.sun.awt.AWTUtilities;
 
public class Sudoku extends JFrame {
 
 final private TextField[][] txtGame;
 
 static int num=20;//空白格數量
 static int guan=5;//關卡數量
 static int add=5;//沒關過后增加的空白格數量
 public static void main(String[] args) {
  Sudoku shudu = new Sudoku();
 
 }
 
 public Sudoku() {// 對JFrame進行布局初始以及監聽設置
  txtGame = new TextField[9][9];// 建立81個TextField對象
  DoShudu shudu = new DoShudu();
  int[][] cells = shudu.getShudu();// 獲取數獨數組
  final JPanel jpl = new JPanel();// 建立JPanel對象
  final int spaceNum = num;// spaceNum表示需要設置空白TextField的數量
  jpl.setLayout(new GridLayout(9, 9));// JPanel布局
  final int[][] cellAn = new int[9][9];// 數獨數組的答案
  System.arraycopy(cells, 0, cellAn, 0, cells.length);// 答案從建立的數獨數組中Copy
  for (int i = 0; i < 9; i++) {// 把答案從Console打印出來
 
   for (int j = 0; j < 9; j++) {
    System.out.print(cellAn[i][j]);
   }
   System.out.println();
  } // 打印結束
  this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
  this.setSize(600, 600);
  this.setResizable(false);
  this.setTitle("黑馬-李德國-數獨游戲 9關");
 
  for (int i = 0; i < 9; i++) {
 
   for (int j = 0; j < 9; j++) {
 
    txtGame[i][j] = new TextField();
 
    // 設置TextField背景顏色
 
    if ((i < 3 && j < 3) || (i < 6 && i >= 3 && j >= 3 && j < 6)
      || (i < 9 && i >= 6 && j >= 6 && j < 9)) {
     txtGame[i][j].setBackground(Color.ORANGE);
 
    }
    if ((i < 6 && i >= 3 && j < 3) || (i < 3 && j >= 6 && j < 9)
      || (i < 9 && i >= 6 && j >= 3 && j < 6)) {
     txtGame[i][j].setBackground(Color.GREEN);
    }
 
    if ((i < 9 && i >= 6 && j < 3) || (i < 3 && j >= 3 && j < 6)
      || (i < 6 && i >= 3 && j < 9 && j >= 6)) {
     txtGame[i][j].setBackground(Color.PINK);
    }
 
    txtGame[i][j].setFont(new Font("Dialog", Font.CENTER_BASELINE,
      60));// 設置字體大小
    txtGame[i][j].setText(Integer.toString(cells[i][j]));
    txtGame[i][j].setEnabled(false);
    txtGame[i][j].setVisible(true);
    jpl.add(txtGame[i][j]);
    jpl.setVisible(true);
   }
 
  }
 
  final int[][] tempArray = new int[spaceNum][2];
 
  final JFrame jfm = new JFrame("選擇數字");
  // 取消JFrame title
  jfm.setUndecorated(true);
 
  // 增加JFrame拖拽功能
  final Point origin = new Point();
  jfm.addMouseListener(new MouseAdapter() {
   public void mousePressed(MouseEvent e) {
    origin.x = e.getX();
    origin.y = e.getY();
   }
  });
  jfm.addMouseMotionListener(new MouseMotionAdapter() {
   public void mouseDragged(MouseEvent e) {
    Point p = jfm.getLocation();
    jfm.setLocation(p.x + e.getX() - origin.x, p.y + e.getY()
      - origin.y);
   }
  });
 
  // 設置JFrame為半透明
  AWTUtilities.setWindowOpacity(jfm, 0.7f);
 
  final JPanel jpnl = new JPanel(new GridLayout(3, 3));
 
  jfm.setLayout(null);
  jfm.setSize(190, 200);
  jfm.setResizable(false);
  jpnl.setBounds(0, 0, 190, 120);
 
  jfm.setResizable(false);
 
  for (int i = 0; i < spaceNum; i++) {// 依據需要空白的TextField數量,隨機對TextField設置為空
 
   final int ranD1 = new Random().nextInt(9);
   final int ranD2 = new Random().nextInt(9);
   tempArray[i][0] = ranD1;
   tempArray[i][1] = ranD2;
   txtGame[ranD1][ranD2].setText("");
 
   if ((ranD1 < 3 && ranD2 < 3)
     || (ranD1 < 6 && ranD1 >= 3 && ranD2 >= 3 && ranD2 < 6)
     || (ranD1 < 9 && i >= 6 && ranD2 >= 6 && ranD2 < 9)) {
    txtGame[ranD1][ranD2].setBackground(Color.ORANGE);
 
   }
   if ((ranD1 < 6 && ranD1 >= 3 && ranD2 < 3)
     || (ranD1 < 3 && ranD2 >= 6 && ranD2 < 9)
     || (ranD1 < 9 && ranD1 >= 6 && ranD2 >= 3 && ranD2 < 6)) {
    txtGame[ranD1][ranD2].setBackground(Color.GREEN);
   }
 
   if ((ranD1 < 9 && ranD1 >= 6 && ranD2 < 3)
     || (ranD1 < 3 && ranD2 >= 3 && ranD2 < 6)
     || (ranD1 < 6 && ranD1 >= 3 && ranD2 < 9 && ranD2 >= 6)) {
    txtGame[ranD1][ranD2].setBackground(Color.PINK);
   }
 
   txtGame[ranD1][ranD2].addMouseListener(new MouseAdapter() {
 
    public void mouseClicked(MouseEvent mouseevent) {
 
     jfm.getContentPane().removeAll();// 移出了所有的組件
     jpnl.removeAll();
 
     for (int f = 0; f < 9; f++) {
 
      final Button btn = new Button((f + 1) + "");
      btn.setForeground(Color.RED);
      btn.setBackground(Color.WHITE);
      btn
        .setFont(new Font("Dialog",
          Font.CENTER_BASELINE, 30));
      btn.addMouseListener(new MouseAdapter() {
 
       @Override
       public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        txtGame[ranD1][ranD2].setText(btn.getLabel()
          + txtGame[ranD1][ranD2].getText());
 
       }
      });
 
      jpnl.add(btn);
     }
     Button btnDel = new Button(" 清 空 ");
     btnDel.setForeground(Color.WHITE);
     btnDel.setBackground(Color.RED);
     btnDel
       .setFont(new Font("Dialog", Font.CENTER_BASELINE,
         30));
     btnDel.setBounds(0, 120, 190, 50);
     btnDel.addMouseListener(new MouseAdapter() {
 
      @Override
      public void mouseClicked(MouseEvent e) {
       // TODO Auto-generated method stub
       txtGame[ranD1][ranD2].setText("");
 
      }
     });
 
     jfm.add(jpnl);
     jfm.add(btnDel);
     jfm.setVisible(true);
    }
   });
   txtGame[ranD1][ranD2].addTextListener(new TextListener() {// 對空白的TextField添加監聽,數值發生變化后進行答案對比,如果全部答對在Console打印“good”
      @Override
      public void textValueChanged(TextEvent e) {
       TextField tmp = (TextField) e.getSource();
       int count = 0;
       for (int u = 0; u < spaceNum; u++) {
        if ((txtGame[tempArray[u][0]][tempArray[u][1]]
          .getText())
          .equals(Integer
            .toString(cellAn[tempArray[u][0]][tempArray[u][1]]))) {
         count++;
        }
       }
       if (count == spaceNum) {
 
        jpl.removeAll();
        FlowLayout blt = new FlowLayout();
        jpl.setLayout(blt);
         
        if(num<=3){
         
        jpl.add(new JLabel("恭喜你過關"));
        Button btn = new Button("進入下一關");
 
        btn.addMouseListener(new MouseAdapter() {
 
         @Override
         public void mouseClicked(MouseEvent e) {
          // TODO Auto-generated method stub
          Sudoku.this.dispose();
          jfm.dispose();
          num=num+add;
          new Sudoku();
         }
        });
         
        jpl.add(btn);
        }
        else{
         jpl.add(new JLabel("恭喜 你已經完成所有關卡!"));
        }
        jpl.updateUI();
         
         
         
         
        System.out.println("good");
         
          
       }
        
        
        
      }
     });
   txtGame[ranD1][ranD2].setEnabled(true);
  }
  this.add(jpl);
  this.setVisible(true);
 }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/lideguo1979/article/details/6636431

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 青青在线视频观看 | 91制片厂制作果冻传媒123 | 99午夜 | 成年男女免费视频网站 | 九九99靖品 | 探花国产 | lubuntu网页版在线 | 香蕉久久综合 | 日本哺乳期网站xxxx | 色天天综合网色鬼综合 | 2019年国产不卡在线刷新 | 九九久久国产 | 精品在线免费观看视频 | 动态图啪啪120秒免费看 | 国产亚洲精品美女久久久 | 网红思瑞一区二区三区 | 欧美视频精品一区二区三区 | 欧美成人v视频免费看 | 91传媒制片厂果冻有限公司 | 亚洲国产精品综合久久一线 | ass天天裸妇pics | 免费在线中文字幕 | 毛片资源 | 91最新入口 | 免费岛国| www.久久99| 午夜AV国产欧美亚洲高清在线 | 亚洲美女人黄网成人女 | 出差被灌醉绝伦的上司日本 | 桃乃木香奈作品在线观看 | 国产99视频精品免视看7 | 北岛玲在线视频 | 日本在线观看a | 亚洲AVAV天堂AV在线网爱情 | 男同精品视频免费观看网站 | www.色小妹 | 欧美国产高清 | mmkk在线看片 | 无限在线观看视频大全免费高清 | 亚洲黄色天堂 | 欧美另类性xxoo |