質問編集履歴

3

修正内容

2017/05/09 10:50

投稿

kopuf
kopuf

スコア5

test CHANGED
File without changes
test CHANGED
@@ -1,513 +1,3 @@
1
- 実現したこと
1
+ javaでゲームを作ってるのですが
2
2
 
3
- java clearボタンを押と譜面をリセットした
3
+ 分からないところがありうまく動かなかったのでが治りました
4
-
5
- 発生している問題
6
-
7
- パネルを作り直す処理を実装しましたが動かない
8
-
9
- else if (cmd.equals("clear")) {
10
-
11
- con.remove(pan1);
12
-
13
- pan1 = createGamePanel(); // パネルを作りなおす
14
-
15
- con.add(pan1);
16
-
17
- }
18
-
19
- }
20
-
21
- コード
22
-
23
-
24
-
25
- package sfv;
26
-
27
-
28
-
29
- import java.awt.BorderLayout;
30
-
31
- import java.awt.Color;
32
-
33
- import java.awt.Container;
34
-
35
- import java.awt.Font;
36
-
37
- import java.awt.Graphics;
38
-
39
- import java.awt.event.ActionEvent;
40
-
41
- import java.awt.event.ActionListener;
42
-
43
- import java.awt.event.MouseAdapter;
44
-
45
- import java.awt.event.MouseEvent;
46
-
47
-
48
-
49
- import javax.swing.BorderFactory;
50
-
51
- import javax.swing.JApplet;
52
-
53
- import javax.swing.JButton;
54
-
55
- import javax.swing.JOptionPane;
56
-
57
- import javax.swing.JPanel;
58
-
59
- import javax.swing.JTextField;
60
-
61
-
62
-
63
- public class mine extends JApplet implements ActionListener
64
-
65
- {
66
-
67
- int X, Y; //←地雷を乱数で配置したときの位置
68
-
69
- int Width, Masu , MineKazu; //←格子の幅(ピクセル)、格子の数、地雷の数
70
-
71
-
72
-
73
- int [][] Mine_Pass = new int[10][10]; //←上がりの判定用
74
-
75
- int [][] Mine_Kazu = new int[10][10]; //←敷設された地雷の数
76
-
77
- int [][] Mine_Position = new int[11][11]; //←クリックした配列の位置//変更
78
-
79
-
80
-
81
- int i, j, x, y, ix, iy, m_x, m_y, bom = 0;
82
-
83
- boolean flag = false; //←ボタンのクリックによるスタート用
84
-
85
-
86
-
87
- JPanel pan1, pan2, pan3;
88
-
89
-
90
-
91
- JButton s_btn = new JButton("start");
92
-
93
- JButton B_btn = new JButton("clear");
94
-
95
- JTextField txt = new JTextField(25);
96
-
97
- private Container con;
98
-
99
- private Object cmd;
100
-
101
-
102
-
103
- public void init()
104
-
105
- {
106
-
107
- con = getContentPane();
108
-
109
-
110
-
111
- pan2 = new JPanel();
112
-
113
- pan3 = new JPanel();
114
-
115
- con.add(pan2, BorderLayout.SOUTH);
116
-
117
- con.add(pan3, BorderLayout.NORTH);
118
-
119
-
120
-
121
- pan1 = createGamePanel();
122
-
123
- con.add(pan1);
124
-
125
-
126
-
127
- pan2.add(s_btn);
128
-
129
- s_btn.setBackground(Color.red);
130
-
131
- s_btn.addActionListener(this);
132
-
133
- pan2.setBorder(BorderFactory.createLineBorder
134
-
135
- (Color.blue));
136
-
137
- pan2.setBackground(Color.GREEN);
138
-
139
-
140
-
141
- pan3.add(B_btn);
142
-
143
- B_btn.setBackground(Color.WHITE);
144
-
145
- B_btn.addActionListener(this);
146
-
147
- pan3.setBorder(BorderFactory.createLineBorder(Color.blue));
148
-
149
- pan3.setBackground(Color.GRAY);
150
-
151
- }
152
-
153
-
154
-
155
- private JPanel createGamePanel() {
156
-
157
- JPanel pan = new JPanel();
158
-
159
- pan.addMouseListener( new MyMouseListener());
160
-
161
- pan.add(txt); //←new MyMouseListener(this)としないこと
162
-
163
- pan.setBackground(Color.WHITE);
164
-
165
- pan.setForeground(Color.red);
166
-
167
- pan.setSize(300, 450);
168
-
169
- pan.setBorder(BorderFactory.createLineBorder(Color.red));
170
-
171
- return pan;
172
-
173
- }
174
-
175
- public void actionPerformed(ActionEvent e) {
176
-
177
- cmd = e.getActionCommand();
178
-
179
- if (cmd.equals("start")) {
180
-
181
- flag = true;
182
-
183
- if (flag == true) {
184
-
185
- Graphics g = pan1.getGraphics();
186
-
187
- Masu = 8;
188
-
189
- MineKazu = 0;
190
-
191
-
192
-
193
- // 各配列の初期クリア
194
-
195
- for (iy = 0; iy <= Masu + 1; iy++) {
196
-
197
- for (ix = 0; ix <= Masu + 1; ix++) {
198
-
199
- Mine_Position[iy][ix] = 0; //←格子の0クリア
200
-
201
- Mine_Kazu[iy][ix] = 0; //←地雷数のカウント用の配列の0クリア
202
-
203
- Mine_Pass[iy][ix] = 0; //←ゲームの上がり用の配列の0クリア
204
-
205
- }
206
-
207
- }
208
-
209
-
210
-
211
- Width = 30; //←格子の幅
212
-
213
- g.setColor(Color.black);
214
-
215
-
216
-
217
- // 格子の表示
218
-
219
- for (x = Width * 2; x <= Width * 10; x += Width) {
220
-
221
- g.drawLine(x,Width*2, x, Width * 10); //←格子のY方向の線
222
-
223
- }
224
-
225
-
226
-
227
- for (y = Width * 2; y <= Width * 10; y+= Width) {
228
-
229
- g.drawLine(Width*2, y, Width * 10, y); //←格子のX方向の線
230
-
231
- }
232
-
233
- g.dispose();
234
-
235
- for (i = 1; i <= Masu * 3; i++) { // 地雷の数の設定
236
-
237
- // 地雷を乱数で配置する
238
-
239
- X = (int)(Math.random() * (Masu + 1) + 1);
240
-
241
- Y = (int)(Math.random() * (Masu + 1) + 1);
242
-
243
-
244
-
245
- if (X >= 2 && Y >= 2) {
246
-
247
- Mine_Position[Y][X] = -1; //←地雷のある所に「-1」をセット
248
-
249
- Mine_Pass[Y][X] = -1; //←地雷のある所に「-1」をセット
250
-
251
- Mine_Kazu[Y][X] = 1; //←地雷のある所に「1」をセット
252
-
253
- }
254
-
255
- }
256
-
257
- //地雷の数のカウント
258
-
259
- for (iy = 2; iy <= Masu + 1; iy++) {
260
-
261
- for (ix = 2; ix <= Masu + 1; ix++) {
262
-
263
- if (Mine_Kazu[iy][ix] == 1) { //←地雷が敷設されていれば
264
-
265
- MineKazu++;
266
-
267
- }
268
-
269
- }
270
-
271
- }
272
-
273
-
274
-
275
- txt.setBackground(Color.pink);
276
-
277
- txt.setForeground(Color.black);
278
-
279
- txt.setFont( new Font("SansSerif", Font.BOLD, 20));
280
-
281
- txt.setText(" 地雷の数は" + MineKazu + " 個です!");
282
-
283
- showStatus(" 地雷の数は" + MineKazu + " 個です!");
284
-
285
- }
286
-
287
- }
288
-
289
- else if (cmd.equals("clear")) {
290
-
291
- con.remove(pan1);
292
-
293
- pan1 = createGamePanel(); // パネルを作りなおす
294
-
295
- con.add(pan1);
296
-
297
- }
298
-
299
- }
300
-
301
-
302
-
303
- class MyMouseListener extends MouseAdapter
304
-
305
- {
306
-
307
- public void mouseClicked(MouseEvent me)
308
-
309
- {
310
-
311
- x = me.getX();
312
-
313
- y = me.getY(); //←マウスのクリック位置
314
-
315
- iy = (int)(y / Width);
316
-
317
- ix = (int)(x / Width);
318
-
319
-
320
-
321
- if (2 <= iy && iy <= Masu + 1 && 2 <= ix && ix <= Masu + 1)
322
-
323
- {
324
-
325
- Graphics g = pan1.getGraphics();
326
-
327
-
328
-
329
- g.setColor(Color.blue);
330
-
331
- g.fillRoundRect(ix * Width, iy * Width, Width, Width, 15, 15);
332
-
333
-
334
-
335
- Mine_Pass[iy][ix] = -1 ;
336
-
337
-
338
-
339
- if (Mine_Position[iy][ix] >= 0)
340
-
341
- {
342
-
343
- g.setColor(Color.white);
344
-
345
- g.setFont(new Font("SansSerif", Font.BOLD, 20));
346
-
347
-
348
-
349
- for (m_y = -1; m_y <= 1; m_y++)
350
-
351
- {
352
-
353
- for (m_x = -1; m_x <= 1; m_x++)
354
-
355
- {
356
-
357
- if (Mine_Position[iy + m_y][ ix + m_x] == -1)
358
-
359
- bom += 1;
360
-
361
- }
362
-
363
- }
364
-
365
-
366
-
367
- if (bom == 0)
368
-
369
- {
370
-
371
- //クリックした配列の数値を表示
372
-
373
- g.drawString("", ix * Width + 10, iy * Width + 20);
374
-
375
- }
376
-
377
- else
378
-
379
- {
380
-
381
- g.drawString("" + bom, ix * Width + 10, iy * Width + 20);
382
-
383
- }
384
-
385
-
386
-
387
- bom = 0;
388
-
389
-
390
-
391
- Mine_Pass[iy][ix] = -1; //←この格子は地雷なしの設定
392
-
393
-
394
-
395
- g.dispose();
396
-
397
- }
398
-
399
- else if (Mine_Position[iy][ix] == -1)
400
-
401
- {
402
-
403
- DispMine(); //←地雷のある格子をクリックしたとき、すべてを表示
404
-
405
- }
406
-
407
-
408
-
409
- //機雷をすべてパスしたかの判定
410
-
411
- for (iy = 2; iy <= Masu + 1; iy++)
412
-
413
- {
414
-
415
- for (ix = 2; ix <= Masu + 1; ix++)
416
-
417
- {
418
-
419
- if (Mine_Pass[iy][ix] != -1) //←機雷をすべてパスした
420
-
421
- {
422
-
423
- return;
424
-
425
- }
426
-
427
- }
428
-
429
- }
430
-
431
-
432
-
433
- JOptionPane.showMessageDialog(null, "おめでとうございます! 全てクリアしました !", "", JOptionPane.PLAIN_MESSAGE);
434
-
435
-
436
-
437
-
438
-
439
- }
440
-
441
- }
442
-
443
- }
444
-
445
-
446
-
447
- public void DispMine()
448
-
449
- {
450
-
451
- Graphics g = pan1.getGraphics();
452
-
453
-
454
-
455
- int iy, ix;
456
-
457
-
458
-
459
- //地雷をクリックしたときすべての地雷を表示し、
460
-
461
- //さらに、ダイアログボックスを表示して終了する
462
-
463
- for (iy = 2; iy <= Masu + 1; iy++)
464
-
465
- {
466
-
467
- for (ix = 2; ix <= Masu + 1; ix++)
468
-
469
- {
470
-
471
- if (Mine_Position[iy][ix] == -1)
472
-
473
- {
474
-
475
- //地雷をクリックしたとき、すべての地雷を表示して終了する
476
-
477
- g.setColor(Color.white);
478
-
479
- g.fillRect(ix * Width, iy * Width, Width, Width);
480
-
481
-
482
-
483
- g.setColor(Color.red);
484
-
485
- g.fillOval(ix * Width, iy * Width, Width, Width);
486
-
487
- }
488
-
489
- }
490
-
491
- }
492
-
493
- g.dispose();
494
-
495
-
496
-
497
- JOptionPane.showMessageDialog(null,"ゲームオーバー!","Over",JOptionPane.PLAIN_MESSAGE);
498
-
499
- }
500
-
501
-
502
-
503
- <code>
504
-
505
- 実行したこと
506
-
507
- 小文字大文字入力ミスがないか確認
508
-
509
- JOptionPane.showMessageDialog(null,"ゲームオーバー!","Over",JOptionPane.PLAIN_MESSAGE);
510
-
511
- を途中に入れclearボタンstartボタンが表示されるか
512
-
513
- を試しました。

2

入力内容の変更

2017/05/09 10:50

投稿

kopuf
kopuf

スコア5

test CHANGED
File without changes
test CHANGED
@@ -1,11 +1,27 @@
1
- ```java```javaでゲームを作ってるのですが
1
+ 実現したこと
2
-
2
+
3
- clearボタンを実装ころまではできのですが
3
+ java clearボタンをすと譜面をリセットし
4
+
4
-
5
+ 発生している問題
6
+
7
+ パネルを作り直す処理を実装しましたが動かない
8
+
5
- ボタンを押すと譜面がリセットされるようにしたく付け加えてみたのですが作動しませんでした。
9
+ else if (cmd.equals("clear")) {
10
+
11
+ con.remove(pan1);
12
+
13
+ pan1 = createGamePanel(); // パネルを作りなおす
14
+
15
+ con.add(pan1);
16
+
17
+ }
18
+
19
+ }
6
20
 
7
21
  コード
8
22
 
23
+
24
+
9
25
  package sfv;
10
26
 
11
27
 

1

改善内容の追加

2017/05/05 12:53

投稿

kopuf
kopuf

スコア5

test CHANGED
File without changes
test CHANGED
@@ -1,493 +1,491 @@
1
- javaでゲームを作っているのですが
1
+ ```java```javaでゲームを作っているのですが
2
2
 
3
3
  clearボタンを実装するところまではできたのですが
4
4
 
5
5
  ボタンを押すと譜面がリセットされるようにしたく付け加えてみたのですが作動しませんでした。
6
6
 
7
+ コード
8
+
9
+ package sfv;
10
+
11
+
12
+
13
+ import java.awt.BorderLayout;
14
+
15
+ import java.awt.Color;
16
+
17
+ import java.awt.Container;
18
+
19
+ import java.awt.Font;
20
+
21
+ import java.awt.Graphics;
22
+
23
+ import java.awt.event.ActionEvent;
24
+
25
+ import java.awt.event.ActionListener;
26
+
27
+ import java.awt.event.MouseAdapter;
28
+
29
+ import java.awt.event.MouseEvent;
30
+
31
+
32
+
33
+ import javax.swing.BorderFactory;
34
+
35
+ import javax.swing.JApplet;
36
+
37
+ import javax.swing.JButton;
38
+
39
+ import javax.swing.JOptionPane;
40
+
41
+ import javax.swing.JPanel;
42
+
43
+ import javax.swing.JTextField;
44
+
45
+
46
+
47
+ public class mine extends JApplet implements ActionListener
48
+
49
+ {
50
+
7
- <codeと書いたほうがいいとの指摘受けましたので書きました。>
51
+ int X, Y; //←地雷乱数で配置したとき位置
52
+
53
+ int Width, Masu , MineKazu; //←格子の幅(ピクセル)、格子の数、地雷の数
54
+
55
+
56
+
57
+ int [][] Mine_Pass = new int[10][10]; //←上がりの判定用
58
+
59
+ int [][] Mine_Kazu = new int[10][10]; //←敷設された地雷の数
60
+
61
+ int [][] Mine_Position = new int[11][11]; //←クリックした配列の位置//変更
62
+
63
+
64
+
65
+ int i, j, x, y, ix, iy, m_x, m_y, bom = 0;
66
+
67
+ boolean flag = false; //←ボタンのクリックによるスタート用
68
+
69
+
70
+
71
+ JPanel pan1, pan2, pan3;
72
+
73
+
74
+
75
+ JButton s_btn = new JButton("start");
76
+
77
+ JButton B_btn = new JButton("clear");
78
+
79
+ JTextField txt = new JTextField(25);
80
+
81
+ private Container con;
82
+
83
+ private Object cmd;
84
+
85
+
86
+
87
+ public void init()
88
+
89
+ {
90
+
91
+ con = getContentPane();
92
+
93
+
94
+
95
+ pan2 = new JPanel();
96
+
97
+ pan3 = new JPanel();
98
+
99
+ con.add(pan2, BorderLayout.SOUTH);
100
+
101
+ con.add(pan3, BorderLayout.NORTH);
102
+
103
+
104
+
105
+ pan1 = createGamePanel();
106
+
107
+ con.add(pan1);
108
+
109
+
110
+
111
+ pan2.add(s_btn);
112
+
113
+ s_btn.setBackground(Color.red);
114
+
115
+ s_btn.addActionListener(this);
116
+
117
+ pan2.setBorder(BorderFactory.createLineBorder
118
+
119
+ (Color.blue));
120
+
121
+ pan2.setBackground(Color.GREEN);
122
+
123
+
124
+
125
+ pan3.add(B_btn);
126
+
127
+ B_btn.setBackground(Color.WHITE);
128
+
129
+ B_btn.addActionListener(this);
130
+
131
+ pan3.setBorder(BorderFactory.createLineBorder(Color.blue));
132
+
133
+ pan3.setBackground(Color.GRAY);
134
+
135
+ }
136
+
137
+
138
+
139
+ private JPanel createGamePanel() {
140
+
141
+ JPanel pan = new JPanel();
142
+
143
+ pan.addMouseListener( new MyMouseListener());
144
+
145
+ pan.add(txt); //←new MyMouseListener(this)としないこと
146
+
147
+ pan.setBackground(Color.WHITE);
148
+
149
+ pan.setForeground(Color.red);
150
+
151
+ pan.setSize(300, 450);
152
+
153
+ pan.setBorder(BorderFactory.createLineBorder(Color.red));
154
+
155
+ return pan;
156
+
157
+ }
158
+
159
+ public void actionPerformed(ActionEvent e) {
160
+
161
+ cmd = e.getActionCommand();
162
+
163
+ if (cmd.equals("start")) {
164
+
165
+ flag = true;
166
+
167
+ if (flag == true) {
168
+
169
+ Graphics g = pan1.getGraphics();
170
+
171
+ Masu = 8;
172
+
173
+ MineKazu = 0;
174
+
175
+
176
+
177
+ // 各配列の初期クリア
178
+
179
+ for (iy = 0; iy <= Masu + 1; iy++) {
180
+
181
+ for (ix = 0; ix <= Masu + 1; ix++) {
182
+
183
+ Mine_Position[iy][ix] = 0; //←格子の0クリア
184
+
185
+ Mine_Kazu[iy][ix] = 0; //←地雷数のカウント用の配列の0クリア
186
+
187
+ Mine_Pass[iy][ix] = 0; //←ゲームの上がり用の配列の0クリア
188
+
189
+ }
190
+
191
+ }
192
+
193
+
194
+
195
+ Width = 30; //←格子の幅
196
+
197
+ g.setColor(Color.black);
198
+
199
+
200
+
201
+ // 格子の表示
202
+
203
+ for (x = Width * 2; x <= Width * 10; x += Width) {
204
+
205
+ g.drawLine(x,Width*2, x, Width * 10); //←格子のY方向の線
206
+
207
+ }
208
+
209
+
210
+
211
+ for (y = Width * 2; y <= Width * 10; y+= Width) {
212
+
213
+ g.drawLine(Width*2, y, Width * 10, y); //←格子のX方向の線
214
+
215
+ }
216
+
217
+ g.dispose();
218
+
219
+ for (i = 1; i <= Masu * 3; i++) { // 地雷の数の設定
220
+
221
+ // 地雷を乱数で配置する
222
+
223
+ X = (int)(Math.random() * (Masu + 1) + 1);
224
+
225
+ Y = (int)(Math.random() * (Masu + 1) + 1);
226
+
227
+
228
+
229
+ if (X >= 2 && Y >= 2) {
230
+
231
+ Mine_Position[Y][X] = -1; //←地雷のある所に「-1」をセット
232
+
233
+ Mine_Pass[Y][X] = -1; //←地雷のある所に「-1」をセット
234
+
235
+ Mine_Kazu[Y][X] = 1; //←地雷のある所に「1」をセット
236
+
237
+ }
238
+
239
+ }
240
+
241
+ //地雷の数のカウント
242
+
243
+ for (iy = 2; iy <= Masu + 1; iy++) {
244
+
245
+ for (ix = 2; ix <= Masu + 1; ix++) {
246
+
247
+ if (Mine_Kazu[iy][ix] == 1) { //←地雷が敷設されていれば
248
+
249
+ MineKazu++;
250
+
251
+ }
252
+
253
+ }
254
+
255
+ }
256
+
257
+
258
+
259
+ txt.setBackground(Color.pink);
260
+
261
+ txt.setForeground(Color.black);
262
+
263
+ txt.setFont( new Font("SansSerif", Font.BOLD, 20));
264
+
265
+ txt.setText(" 地雷の数は" + MineKazu + " 個です!");
266
+
267
+ showStatus(" 地雷の数は" + MineKazu + " 個です!");
268
+
269
+ }
270
+
271
+ }
272
+
273
+ else if (cmd.equals("clear")) {
274
+
275
+ con.remove(pan1);
276
+
277
+ pan1 = createGamePanel(); // パネルを作りなおす
278
+
279
+ con.add(pan1);
280
+
281
+ }
282
+
283
+ }
284
+
285
+
286
+
287
+ class MyMouseListener extends MouseAdapter
288
+
289
+ {
290
+
291
+ public void mouseClicked(MouseEvent me)
292
+
293
+ {
294
+
295
+ x = me.getX();
296
+
297
+ y = me.getY(); //←マウスのクリック位置
298
+
299
+ iy = (int)(y / Width);
300
+
301
+ ix = (int)(x / Width);
302
+
303
+
304
+
305
+ if (2 <= iy && iy <= Masu + 1 && 2 <= ix && ix <= Masu + 1)
306
+
307
+ {
308
+
309
+ Graphics g = pan1.getGraphics();
310
+
311
+
312
+
313
+ g.setColor(Color.blue);
314
+
315
+ g.fillRoundRect(ix * Width, iy * Width, Width, Width, 15, 15);
316
+
317
+
318
+
319
+ Mine_Pass[iy][ix] = -1 ;
320
+
321
+
322
+
323
+ if (Mine_Position[iy][ix] >= 0)
324
+
325
+ {
326
+
327
+ g.setColor(Color.white);
328
+
329
+ g.setFont(new Font("SansSerif", Font.BOLD, 20));
330
+
331
+
332
+
333
+ for (m_y = -1; m_y <= 1; m_y++)
334
+
335
+ {
336
+
337
+ for (m_x = -1; m_x <= 1; m_x++)
338
+
339
+ {
340
+
341
+ if (Mine_Position[iy + m_y][ ix + m_x] == -1)
342
+
343
+ bom += 1;
344
+
345
+ }
346
+
347
+ }
348
+
349
+
350
+
351
+ if (bom == 0)
352
+
353
+ {
354
+
355
+ //クリックした配列の数値を表示
356
+
357
+ g.drawString("", ix * Width + 10, iy * Width + 20);
358
+
359
+ }
360
+
361
+ else
362
+
363
+ {
364
+
365
+ g.drawString("" + bom, ix * Width + 10, iy * Width + 20);
366
+
367
+ }
368
+
369
+
370
+
371
+ bom = 0;
372
+
373
+
374
+
375
+ Mine_Pass[iy][ix] = -1; //←この格子は地雷なしの設定
376
+
377
+
378
+
379
+ g.dispose();
380
+
381
+ }
382
+
383
+ else if (Mine_Position[iy][ix] == -1)
384
+
385
+ {
386
+
387
+ DispMine(); //←地雷のある格子をクリックしたとき、すべてを表示
388
+
389
+ }
390
+
391
+
392
+
393
+ //機雷をすべてパスしたかの判定
394
+
395
+ for (iy = 2; iy <= Masu + 1; iy++)
396
+
397
+ {
398
+
399
+ for (ix = 2; ix <= Masu + 1; ix++)
400
+
401
+ {
402
+
403
+ if (Mine_Pass[iy][ix] != -1) //←機雷をすべてパスした
404
+
405
+ {
406
+
407
+ return;
408
+
409
+ }
410
+
411
+ }
412
+
413
+ }
414
+
415
+
416
+
417
+ JOptionPane.showMessageDialog(null, "おめでとうございます! 全てクリアしました !", "", JOptionPane.PLAIN_MESSAGE);
418
+
419
+
420
+
421
+
422
+
423
+ }
424
+
425
+ }
426
+
427
+ }
428
+
429
+
430
+
431
+ public void DispMine()
432
+
433
+ {
434
+
435
+ Graphics g = pan1.getGraphics();
436
+
437
+
438
+
439
+ int iy, ix;
440
+
441
+
442
+
443
+ //地雷をクリックしたときすべての地雷を表示し、
444
+
445
+ //さらに、ダイアログボックスを表示して終了する
446
+
447
+ for (iy = 2; iy <= Masu + 1; iy++)
448
+
449
+ {
450
+
451
+ for (ix = 2; ix <= Masu + 1; ix++)
452
+
453
+ {
454
+
455
+ if (Mine_Position[iy][ix] == -1)
456
+
457
+ {
458
+
459
+ //地雷をクリックしたとき、すべての地雷を表示して終了する
460
+
461
+ g.setColor(Color.white);
462
+
463
+ g.fillRect(ix * Width, iy * Width, Width, Width);
464
+
465
+
466
+
467
+ g.setColor(Color.red);
468
+
469
+ g.fillOval(ix * Width, iy * Width, Width, Width);
470
+
471
+ }
472
+
473
+ }
474
+
475
+ }
476
+
477
+ g.dispose();
478
+
479
+
480
+
481
+ JOptionPane.showMessageDialog(null,"ゲームオーバー!","Over",JOptionPane.PLAIN_MESSAGE);
482
+
483
+ }
484
+
485
+
8
486
 
9
487
  <code>
10
488
 
11
- package sfv;
12
-
13
-
14
-
15
- import java.awt.BorderLayout;
16
-
17
- import java.awt.Color;
18
-
19
- import java.awt.Container;
20
-
21
- import java.awt.Font;
22
-
23
- import java.awt.Graphics;
24
-
25
- import java.awt.event.ActionEvent;
26
-
27
- import java.awt.event.ActionListener;
28
-
29
- import java.awt.event.MouseAdapter;
30
-
31
- import java.awt.event.MouseEvent;
32
-
33
-
34
-
35
- import javax.swing.BorderFactory;
36
-
37
- import javax.swing.JApplet;
38
-
39
- import javax.swing.JButton;
40
-
41
- import javax.swing.JOptionPane;
42
-
43
- import javax.swing.JPanel;
44
-
45
- import javax.swing.JTextField;
46
-
47
-
48
-
49
- public class mine extends JApplet implements ActionListener
50
-
51
- {
52
-
53
- int X, Y; //←地雷を乱数で配置したときの位置
54
-
55
- int Width, Masu , MineKazu; //←格子の幅(ピクセル)、格子の数、地雷の数
56
-
57
-
58
-
59
- int [][] Mine_Pass = new int[10][10]; //←上がりの判定用
60
-
61
- int [][] Mine_Kazu = new int[10][10]; //←敷設された地雷の数
62
-
63
- int [][] Mine_Position = new int[11][11]; //←クリックした配列の位置//変更
64
-
65
-
66
-
67
- int i, j, x, y, ix, iy, m_x, m_y, bom = 0;
68
-
69
- boolean flag = false; //←ボタンのクリックによるスタート用
70
-
71
-
72
-
73
- JPanel pan1, pan2, pan3;
74
-
75
-
76
-
77
- JButton s_btn = new JButton("start");
78
-
79
- JButton B_btn = new JButton("clear");
80
-
81
- JTextField txt = new JTextField(25);
82
-
83
- private Container con;
84
-
85
- private Object cmd;
86
-
87
-
88
-
89
- public void init()
90
-
91
- {
92
-
93
- con = getContentPane();
94
-
95
-
96
-
97
- pan2 = new JPanel();
98
-
99
- pan3 = new JPanel();
100
-
101
- con.add(pan2, BorderLayout.SOUTH);
102
-
103
- con.add(pan3, BorderLayout.NORTH);
104
-
105
-
106
-
107
- pan1 = createGamePanel();
108
-
109
- con.add(pan1);
110
-
111
-
112
-
113
- pan2.add(s_btn);
114
-
115
- s_btn.setBackground(Color.red);
116
-
117
- s_btn.addActionListener(this);
118
-
119
- pan2.setBorder(BorderFactory.createLineBorder
120
-
121
- (Color.blue));
122
-
123
- pan2.setBackground(Color.GREEN);
124
-
125
-
126
-
127
- pan3.add(B_btn);
128
-
129
- B_btn.setBackground(Color.WHITE);
130
-
131
- B_btn.addActionListener(this);
132
-
133
- pan3.setBorder(BorderFactory.createLineBorder(Color.blue));
134
-
135
- pan3.setBackground(Color.GRAY);
136
-
137
- }
138
-
139
-
140
-
141
- private JPanel createGamePanel() {
142
-
143
- JPanel pan = new JPanel();
144
-
145
- pan.addMouseListener( new MyMouseListener());
146
-
147
- pan.add(txt); //←new MyMouseListener(this)としないこと
148
-
149
- pan.setBackground(Color.WHITE);
150
-
151
- pan.setForeground(Color.red);
152
-
153
- pan.setSize(300, 450);
154
-
155
- pan.setBorder(BorderFactory.createLineBorder(Color.red));
156
-
157
- return pan;
158
-
159
- }
160
-
161
- public void actionPerformed(ActionEvent e) {
162
-
163
- cmd = e.getActionCommand();
164
-
165
- if (cmd.equals("start")) {
166
-
167
- flag = true;
168
-
169
- if (flag == true) {
170
-
171
- Graphics g = pan1.getGraphics();
172
-
173
- Masu = 8;
174
-
175
- MineKazu = 0;
176
-
177
-
178
-
179
- // 各配列の初期クリア
180
-
181
- for (iy = 0; iy <= Masu + 1; iy++) {
182
-
183
- for (ix = 0; ix <= Masu + 1; ix++) {
184
-
185
- Mine_Position[iy][ix] = 0; //←格子の0クリア
186
-
187
- Mine_Kazu[iy][ix] = 0; //←地雷数のカウント用の配列の0クリア
188
-
189
- Mine_Pass[iy][ix] = 0; //←ゲームの上がり用の配列の0クリア
190
-
191
- }
192
-
193
- }
194
-
195
-
196
-
197
- Width = 30; //←格子の幅
198
-
199
- g.setColor(Color.black);
200
-
201
-
202
-
203
- // 格子の表示
204
-
205
- for (x = Width * 2; x <= Width * 10; x += Width) {
206
-
207
- g.drawLine(x,Width*2, x, Width * 10); //←格子のY方向の線
208
-
209
- }
210
-
211
-
212
-
213
- for (y = Width * 2; y <= Width * 10; y+= Width) {
214
-
215
- g.drawLine(Width*2, y, Width * 10, y); //←格子のX方向の線
216
-
217
- }
218
-
219
- g.dispose();
220
-
221
- for (i = 1; i <= Masu * 3; i++) { // 地雷の数の設定
222
-
223
- // 地雷を乱数で配置する
224
-
225
- X = (int)(Math.random() * (Masu + 1) + 1);
226
-
227
- Y = (int)(Math.random() * (Masu + 1) + 1);
228
-
229
-
230
-
231
- if (X >= 2 && Y >= 2) {
232
-
233
- Mine_Position[Y][X] = -1; //←地雷のある所に「-1」をセット
234
-
235
- Mine_Pass[Y][X] = -1; //←地雷のある所に「-1」をセット
236
-
237
- Mine_Kazu[Y][X] = 1; //←地雷のある所に「1」をセット
238
-
239
- }
240
-
241
- }
242
-
243
- //地雷の数のカウント
244
-
245
- for (iy = 2; iy <= Masu + 1; iy++) {
246
-
247
- for (ix = 2; ix <= Masu + 1; ix++) {
248
-
249
- if (Mine_Kazu[iy][ix] == 1) { //←地雷が敷設されていれば
250
-
251
- MineKazu++;
252
-
253
- }
254
-
255
- }
256
-
257
- }
258
-
259
-
260
-
261
- txt.setBackground(Color.pink);
262
-
263
- txt.setForeground(Color.black);
264
-
265
- txt.setFont( new Font("SansSerif", Font.BOLD, 20));
266
-
267
- txt.setText(" 地雷の数は" + MineKazu + " 個です!");
268
-
269
- showStatus(" 地雷の数は" + MineKazu + " 個です!");
270
-
271
- }
272
-
273
- }
274
-
275
- else if (cmd.equals("clear")) {
276
-
277
- con.remove(pan1);
278
-
279
- pan1 = createGamePanel(); // パネルを作りなおす
280
-
281
- con.add(pan1);
282
-
283
- }
284
-
285
- }
286
-
287
-
288
-
289
- class MyMouseListener extends MouseAdapter
290
-
291
- {
292
-
293
- public void mouseClicked(MouseEvent me)
294
-
295
- {
296
-
297
- x = me.getX();
298
-
299
- y = me.getY(); //←マウスのクリック位置
300
-
301
- iy = (int)(y / Width);
302
-
303
- ix = (int)(x / Width);
304
-
305
-
306
-
307
- if (2 <= iy && iy <= Masu + 1 && 2 <= ix && ix <= Masu + 1)
308
-
309
- {
310
-
311
- Graphics g = pan1.getGraphics();
312
-
313
-
314
-
315
- g.setColor(Color.blue);
316
-
317
- g.fillRoundRect(ix * Width, iy * Width, Width, Width, 15, 15);
318
-
319
-
320
-
321
- Mine_Pass[iy][ix] = -1 ;
322
-
323
-
324
-
325
- if (Mine_Position[iy][ix] >= 0)
326
-
327
- {
328
-
329
- g.setColor(Color.white);
330
-
331
- g.setFont(new Font("SansSerif", Font.BOLD, 20));
332
-
333
-
334
-
335
- for (m_y = -1; m_y <= 1; m_y++)
336
-
337
- {
338
-
339
- for (m_x = -1; m_x <= 1; m_x++)
340
-
341
- {
342
-
343
- if (Mine_Position[iy + m_y][ ix + m_x] == -1)
344
-
345
- bom += 1;
346
-
347
- }
348
-
349
- }
350
-
351
-
352
-
353
- if (bom == 0)
354
-
355
- {
356
-
357
- //クリックした配列の数値を表示
358
-
359
- g.drawString("", ix * Width + 10, iy * Width + 20);
360
-
361
- }
362
-
363
- else
364
-
365
- {
366
-
367
- g.drawString("" + bom, ix * Width + 10, iy * Width + 20);
368
-
369
- }
370
-
371
-
372
-
373
- bom = 0;
374
-
375
-
376
-
377
- Mine_Pass[iy][ix] = -1; //←この格子は地雷なしの設定
378
-
379
-
380
-
381
- g.dispose();
382
-
383
- }
384
-
385
- else if (Mine_Position[iy][ix] == -1)
386
-
387
- {
388
-
389
- DispMine(); //←地雷のある格子をクリックしたとき、すべてを表示
390
-
391
- }
392
-
393
-
394
-
395
- //機雷をすべてパスしたかの判定
396
-
397
- for (iy = 2; iy <= Masu + 1; iy++)
398
-
399
- {
400
-
401
- for (ix = 2; ix <= Masu + 1; ix++)
402
-
403
- {
404
-
405
- if (Mine_Pass[iy][ix] != -1) //←機雷をすべてパスした
406
-
407
- {
408
-
409
- return;
410
-
411
- }
412
-
413
- }
414
-
415
- }
416
-
417
-
418
-
419
- JOptionPane.showMessageDialog(null, "おめでとうございます! 全てクリアしました !", "", JOptionPane.PLAIN_MESSAGE);
420
-
421
-
422
-
423
-
424
-
425
- }
426
-
427
- }
428
-
429
- }
430
-
431
-
432
-
433
- public void DispMine()
434
-
435
- {
436
-
437
- Graphics g = pan1.getGraphics();
438
-
439
-
440
-
441
- int iy, ix;
442
-
443
-
444
-
445
- //地雷をクリックしたときすべての地雷を表示し、
446
-
447
- //さらに、ダイアログボックスを表示して終了する
448
-
449
- for (iy = 2; iy <= Masu + 1; iy++)
450
-
451
- {
452
-
453
- for (ix = 2; ix <= Masu + 1; ix++)
454
-
455
- {
456
-
457
- if (Mine_Position[iy][ix] == -1)
458
-
459
- {
460
-
461
- //地雷をクリックしたとき、すべての地雷を表示して終了する
462
-
463
- g.setColor(Color.white);
464
-
465
- g.fillRect(ix * Width, iy * Width, Width, Width);
466
-
467
-
468
-
469
- g.setColor(Color.red);
470
-
471
- g.fillOval(ix * Width, iy * Width, Width, Width);
472
-
473
- }
474
-
475
- }
476
-
477
- }
478
-
479
- g.dispose();
480
-
481
-
482
-
483
- JOptionPane.showMessageDialog(null,"ゲームオーバー!","Over",JOptionPane.PLAIN_MESSAGE);
484
-
485
- }
486
-
487
-
488
-
489
- <code>
490
-
491
489
  実行したこと
492
490
 
493
491
  小文字大文字入力ミスがないか確認