teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードを少し小さく

2021/08/13 11:20

投稿

jimbe
jimbe

スコア13357

answer CHANGED
@@ -125,10 +125,10 @@
125
125
  cardList.add(new Trump(i/2+1));
126
126
  }
127
127
 
128
- setTrumps();
128
+ setCards();
129
129
  }
130
130
 
131
- void setTrumps() {
131
+ void setCards() {
132
132
  //シャッフル
133
133
  Collections.shuffle(cardList);
134
134
 
@@ -184,6 +184,7 @@
184
184
  return;
185
185
  }
186
186
 
187
+ removeMouseListener();
187
188
  Trump cardOne = (Trump)labelOne.getClientProperty(TRUMP_PROPERTY);
188
189
  if (cardTwo.getNumber() == cardOne.getNumber()) { //2枚目と1枚目が同じカード
189
190
  if (allOpen()) { //ゲームクリア?
@@ -198,23 +199,30 @@
198
199
  }
199
200
  }
200
201
 
201
- //1秒後に One,Two それぞれを非表示状態にし再表示する
202
- class InvisibleWorker extends SwingWorker<Object,Object> {
202
+ abstract class DelayWorker extends SwingWorker<Object,Object> {
203
- private JLabel labelOne, labelTwo;
203
+ private long delay;
204
- InvisibleWorker(JLabel labelOne, JLabel labelTwo) {
204
+ DelayWorker(long delay) {
205
- this.labelOne = labelOne;
205
+ this.delay = delay;
206
- this.labelTwo = labelTwo;
207
206
  }
208
207
  @Override
209
208
  public Object doInBackground() {
210
- removeMouseListener();
211
209
  try {
212
- Thread.sleep(1000);
210
+ Thread.sleep(delay);
213
211
  } catch (InterruptedException e) {
214
212
  e.printStackTrace();
215
213
  }
216
214
  return null;
217
215
  }
216
+ }
217
+
218
+ //1秒後に One,Two それぞれを非表示状態にし再表示する
219
+ class InvisibleWorker extends DelayWorker {
220
+ private JLabel labelOne, labelTwo;
221
+ InvisibleWorker(JLabel labelOne, JLabel labelTwo) {
222
+ super(1000);
223
+ this.labelOne = labelOne;
224
+ this.labelTwo = labelTwo;
225
+ }
218
226
  @Override
219
227
  protected void done() {
220
228
  labelOne.setVisible(false);
@@ -223,48 +231,31 @@
223
231
  setMouseListener();
224
232
  }
225
233
  }
226
-
227
234
  //1秒後にリスタート状態にする
228
- class RestartWorker extends SwingWorker<Object,Object> {
235
+ class RestartWorker extends DelayWorker {
229
- @Override
230
- public Object doInBackground() {
231
- removeMouseListener();
236
+ RestartWorker() {
232
- try {
233
- Thread.sleep(1000);
237
+ super(1000);
234
- } catch (InterruptedException e) {
235
- e.printStackTrace();
236
- }
237
- return null;
238
238
  }
239
239
  @Override
240
240
  protected void done() {
241
- setTrumps();
241
+ setCards();
242
242
  repaint();
243
243
  setMouseListener();
244
244
  }
245
245
  }
246
246
 
247
247
  //1秒後に One,Two それぞれを close 状態にし再表示する
248
- class RedoWorker extends SwingWorker<Object,Object> {
248
+ class RedoWorker extends DelayWorker {
249
249
  private JLabel labelOne, labelTwo;
250
250
  private Trump cardOne, cardTwo;
251
251
  RedoWorker(JLabel labelOne, Trump cardOne, JLabel labelTwo, Trump cardTwo) {
252
+ super(1000);
252
253
  this.labelOne = labelOne;
253
254
  this.cardOne = cardOne;
254
255
  this.labelTwo = labelTwo;
255
256
  this.cardTwo = cardTwo;
256
257
  }
257
258
  @Override
258
- public Object doInBackground() {
259
- removeMouseListener();
260
- try {
261
- Thread.sleep(1000);
262
- } catch (InterruptedException e) {
263
- e.printStackTrace();
264
- }
265
- return null;
266
- }
267
- @Override
268
259
  protected void done() {
269
260
  cardOne.close();
270
261
  labelOne.setIcon(cardOne.getIcon());