本文實例為大家分享了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