質問編集履歴

5

2019/12/22 03:56

投稿

kubonos
kubonos

スコア6

test CHANGED
File without changes
test CHANGED
File without changes

4

2019/12/22 03:56

投稿

kubonos
kubonos

スコア6

test CHANGED
File without changes
test CHANGED
@@ -124,22 +124,6 @@
124
124
 
125
125
 
126
126
 
127
- ポケモンクイズで、ピカチュウの画像が出てきたら、ピカチュウの鳴き声が再生されるようなプログラムも作ってみたいなと思っています(著作権には配慮します)。
128
-
129
-
130
-
131
-
132
-
133
- 下にコードを書いているのですが、2週間程度独学でやっているのですが、半分以上意味が分からず書いています。
134
-
135
-
136
-
137
- 見にくいエラー付のコードで大変申し訳ございません。
138
-
139
-
140
-
141
-
142
-
143
127
 
144
128
 
145
129
 

3

誤字

2019/12/22 03:55

投稿

kubonos
kubonos

スコア6

test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,7 @@
64
64
 
65
65
 
66
66
 
67
- という挙動を作りたいです。
67
+ というような挙動を作りたいです。
68
68
 
69
69
 
70
70
 
@@ -326,7 +326,7 @@
326
326
 
327
327
  quizArray.add(tmpArray); //ここがよく分からん。どういうことなのか?配列に配列を追加とは
328
328
 
329
- //"c","","レ","ミ","ファ"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。
329
+ //"one","1"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。
330
330
 
331
331
  }
332
332
 

2

誤字

2019/12/21 18:33

投稿

kubonos
kubonos

スコア6

test CHANGED
File without changes
test CHANGED
@@ -150,7 +150,7 @@
150
150
 
151
151
  コード
152
152
 
153
- package com.vjoutatu.doremijava;
153
+ package com.test.java;
154
154
 
155
155
 
156
156
 

1

誤字

2019/12/21 18:26

投稿

kubonos
kubonos

スコア6

test CHANGED
File without changes
test CHANGED
@@ -150,7 +150,7 @@
150
150
 
151
151
  コード
152
152
 
153
- package com.te.gazouonseijava;
153
+ package com.vjoutatu.doremijava;
154
154
 
155
155
 
156
156
 
@@ -158,8 +158,6 @@
158
158
 
159
159
  import androidx.appcompat.app.AppCompatActivity;
160
160
 
161
-
162
-
163
161
  import android.content.DialogInterface;
164
162
 
165
163
  import android.content.Intent;
@@ -174,237 +172,367 @@
174
172
 
175
173
  import android.widget.TextView;
176
174
 
177
-
178
-
179
175
  import java.util.ArrayList;
180
176
 
181
- import java.util.Collections;
182
-
183
177
  import java.util.Random;
184
178
 
185
179
 
186
180
 
181
+ //波かっこ1(メイン)開始
182
+
187
183
  public class MainActivity extends AppCompatActivity {
188
184
 
189
185
 
190
186
 
191
- private TextView countLabel;
192
-
193
-
194
-
195
- private ImageView questionImage;
196
-
197
-
198
-
199
- //private TextView questionLabel;
200
-
201
- private Button answerBtn1;
202
-
203
-
204
-
205
-
206
-
207
- ArrayList<ArrayList<String>> quizArray = new ArrayList<>();
208
-
209
-
210
-
211
- String quizData[][] = {
212
-
213
- //{"画像名","正解"},
214
-
215
- //,←これ[,]が必要なんだ!!!
216
-
217
- {"c","c"},
218
-
219
- {"d","d"},
220
-
221
-
222
-
223
-
224
-
225
- };
226
-
227
-
228
-
229
- private SoundPlayer soundPlayer;
230
-
231
-
232
-
233
-
234
-
235
-
236
-
237
- @Override
238
-
239
- protected void onCreate(Bundle savedInstanceState) {
240
-
241
- super.onCreate(savedInstanceState);
242
-
243
- setContentView(R.layout.activity_main);
244
-
245
-
246
-
247
- soundPlayer = new SoundPlayer(this);
248
-
249
- questionImage = findViewById(R.id.questionImage);
250
-
251
- answerBtn1 = findViewById(R.id.answerBtn1);
252
-
253
-
254
-
255
-
256
-
257
- //quizDataからクイズ出題用のquizArrayを作成する
258
-
259
- for (int i = 0; i < quizData.length; i++) {
260
-
261
-
262
-
263
- //新しいArrayListを用意
264
-
265
- ArrayList<String> tmpArray = new ArrayList<>();
266
-
267
- //クイズデータを追加
268
-
269
- tmpArray.add(quizData[i][0]); //画像名
270
-
271
-
272
-
273
-
274
-
275
- //tmpArrayをquizArrayに追加する
276
-
277
- quizArray.add(tmpArray);
278
-
279
- }
280
-
281
-
282
-
283
- showNextQuiz();
284
-
285
-
286
-
287
- }
288
-
289
-
290
-
291
- public void showNextQuiz() {
292
-
293
- //クイズカウントラベル更新
294
-
295
- countLabel.setText("Q" + quizCount);
296
-
297
-
298
-
299
- //ランダム数字を取得
300
-
301
- Random random = new Random();
302
-
303
- int randomNum = random.nextInt(quizArray.size());
304
-
305
-
306
-
307
- //randomNumを使ってquizArrayからクイズを一つ取り出す
308
-
309
- ArrayList<String> quiz = quizArray.get(randomNum);
310
-
311
-
312
-
313
- //画像をセットする
314
-
315
- questionImage.setImageResource(
316
-
317
- getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
318
-
319
- );
320
-
321
-
322
-
323
- //正解をrightAnswerにセット
324
-
325
- rightAnswer = quiz.get(1);
326
-
327
-
328
-
329
-
330
-
331
- //このクイズをquizArrayから削除<消したけど消すしくなる
332
-
333
- quizArray.remove(randomNum);
334
-
335
-
336
-
337
- }
338
-
339
-
340
-
341
- public void checkAnswer(View view){
342
-
343
-
344
-
345
- //どのボタンが押されたか
346
-
347
- Button answerBtn = findViewById(view.getId());
348
-
349
-
350
-
351
- //ボタンのテキストを取得
352
-
353
- String btnText = answerBtn.getText().toString();
354
-
355
-
356
-
357
- String alertTitle;
358
-
359
- if (btnText.equals(rightAnswer)) {
360
-
361
- alertTitle = "せいかい!!";
362
-
363
- rightAnswerCount++;
364
-
365
-
366
-
367
- //ここ全く分からない
368
-
369
-
370
-
371
- //クイズ画像=aならsoundPlayer.playa();的な感じと思う
372
-
373
- if (questionImage == a){  //エラー出ています
374
-
375
- soundPlayer.playaSound();
376
-
377
-
378
-
379
- }else if (questionImage.equals("b.png")){
380
-
381
- soundPlayer.playbSound();
382
-
383
- }
384
-
385
-
386
-
387
-
388
-
389
-
390
-
391
- };
392
-
393
- builder.setCancelable(false);
394
-
395
- builder.show();
396
-
397
-
398
-
399
-
400
-
401
-
402
-
403
- }
404
-
405
- }
406
-
407
-
187
+ private TextView countLabel;
188
+
189
+ private ImageView questionImage; //ImageViewは絵を入れるための額縁
190
+
191
+ //private TextView questionLabel;
192
+
193
+ private Button answerBtn1;
194
+
195
+ private Button answerBtn2;
196
+
197
+ private Button answerBtn3;
198
+
199
+ private Button answerBtn4;
200
+
201
+
202
+
203
+ private String rightAnswer; //String文字型であることに注目したい
204
+
205
+ private int rightAnswerCount = 0; //初期化=定義
206
+
207
+ private int quizCount = 1; //初期化=定義
208
+
209
+ static final private int QUIZ_COUNT = 50; //全部の出題数を入れるのだ!!
210
+
211
+
212
+
213
+ ArrayList<ArrayList<String>> quizArray = new ArrayList<>(); //ああ・・・これもよく分からねえ
214
+
215
+ //ArrayList<ArrayList<String>> って普通の書き方なの?あとnewもよくわからねえ
216
+
217
+
218
+
219
+ //クイズデータ並べる
220
+
221
+ String quizData[][] = { //[][]は多次元配列というらしい
222
+
223
+ //{"画像名","正解",("選択2","選択3","選択4"},
224
+
225
+ //,←これ[,]が必要なんだ!!!
226
+
227
+ {"one","1"}, //[0][0],[0][1],...
228
+
229
+ {"two","2"}, //[1][0],[1][1],
230
+
231
+ {"three","3"},
232
+
233
+
234
+
235
+ };
236
+
237
+ //クイズデータ並べた
238
+
239
+
240
+
241
+ MySound mySound = new MySound(); // ① サウンド準備
242
+
243
+
244
+
245
+
246
+
247
+ //オーヴァーライド波かっこ(2)開始
248
+
249
+ @Override
250
+
251
+ protected void onCreate(Bundle savedInstanceState) { //よく分からない定型文
252
+
253
+ super.onCreate(savedInstanceState); //よく分からない定型文2
254
+
255
+ setContentView(R.layout.activity_main); //xmlを表示
256
+
257
+
258
+
259
+ // 効果音の準備wavだけどmp3sで定義されている。クイズデータと同じ並びで並べる
260
+
261
+ int[] mp3s = {
262
+
263
+ R.raw.a, //[0]
264
+
265
+ R.raw.b, //[1]
266
+
267
+ R.raw.c, //[2]
268
+
269
+ };
270
+
271
+ mySound.onCreate(this,mp3s); // ③ 初期化、言葉がまぎらわしいがただ定義(代入)しただけ
272
+
273
+
274
+
275
+ countLabel = findViewById(R.id.countLabel);
276
+
277
+ questionImage = findViewById(R.id.questionImage);
278
+
279
+ answerBtn1 = findViewById(R.id.answerBtn1);
280
+
281
+ answerBtn2 = findViewById(R.id.answerBtn2);
282
+
283
+ answerBtn3 = findViewById(R.id.answerBtn3);
284
+
285
+ answerBtn4 = findViewById(R.id.answerBtn4);
286
+
287
+
288
+
289
+ //quizDataからクイズ出題用のquizArray作成する
290
+
291
+ for (int i = 0; i < quizData.length; i++) {
292
+
293
+ //lengthは配列の要素の数を返す、length()は文字列の文字数を返すんだって
294
+
295
+ //多次元配列だけど、[0][0],[0][1],の最初の[0]だけ返すのか??
296
+
297
+ //新しいArrayListを用意
298
+
299
+ ArrayList<String> tmpArray = new ArrayList<>(); //要素を格納するためのリスト箱
300
+
301
+
302
+
303
+ //クイズデータ追加
304
+
305
+ tmpArray.add(quizData[i][0]); //画像名
306
+
307
+ tmpArray.add(quizData[i][1]); //正解
308
+
309
+ //tmpArray.add(quizData[i][2]); //選択2
310
+
311
+ //tmpArray.add(quizData[i][3]); //選択3
312
+
313
+ //tmpArray.add(quizData[i][4]); //選択4
314
+
315
+
316
+
317
+ //tmpArrayの追加順番は、quizData多次元配列[0][0],[0][1],[0][2],[0][3],[0][4],[1][0],[1][1],
318
+
319
+ //つまりtmpArrayは、ただの配列の[0],[1],[2]..なるのかな?
320
+
321
+ //↑は多分違うようだ。tmpArrayも、多次元配列[0][0],[0][1],[0][2]のままなんだと思う。
322
+
323
+
324
+
325
+ //tmpArrayをquizArrayに追加する
326
+
327
+ quizArray.add(tmpArray); //ここがよく分からん。どううこなの?配列に配列を追加とは
328
+
329
+ //"c","ド","レ","ミ","ファ"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。
330
+
331
+ }
332
+
333
+ //quizDataからクイズ出題用のquizArrayを作成した
334
+
335
+ showNextQuiz(); //実行showNextQuiz
336
+
337
+ //すぐ下に処理内容が書いてある
338
+
339
+
340
+
341
+ }
342
+
343
+ //オーヴァーライド波かっこ(2)とじ・・・とじていいのか??
344
+
345
+
346
+
347
+
348
+
349
+ // showNextQuiz波かっこ開始
350
+
351
+ public void showNextQuiz() {
352
+
353
+ //クイズカウントラベルを更新
354
+
355
+ countLabel.setText("Q" + quizCount);
356
+
357
+
358
+
359
+
360
+
361
+ //ランダムな数字を取得・・下の2行で1セット文章
362
+
363
+ Random rand = new Random();
364
+
365
+ int randomNum = rand.nextInt(quizArray.size()); //quizArray多次元配列の[0][0]の左の数字を指すと思う
366
+
367
+ //0~quizArrayの数-1のどこの数字を取り出す
368
+
369
+
370
+
371
+
372
+
373
+ //音声で共通に取り出せない問題がある
374
+
375
+
376
+
377
+ //randomNumを使ってquizArrayからクイズを一つ取り出す
378
+
379
+ ArrayList<String> quiz = quizArray.get(randomNum); //なぜStringになるのか??
380
+
381
+ //おそらく、["one","1"]の文字配列を呼び出しているのだろう。
382
+
383
+
384
+
385
+ //randomNumを使ってquizArrayから音を取り出せるのでは
386
+
387
+ //試しに音を鳴らしてみよう
388
+
389
+ mySound.onPlay(randomNum);
390
+
391
+ //おお。。ここに書く分には大丈夫そうです。第一問の時はなぜか鳴りませんけど・・
392
+
393
+
394
+
395
+
396
+
397
+ //画像をセットする
398
+
399
+ questionImage.setImageResource(
400
+
401
+ getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
402
+
403
+ ); //配列から画像名を取り出す時は quiz.get(0)
404
+
405
+
406
+
407
+ //正解をrightAnswerにセット
408
+
409
+ rightAnswer = quiz.get(1); //正解を取り出す時は quiz.get(1)
410
+
411
+
412
+
413
+ //このクイズをquizArrayから削除<消したいけど消すと挙動がおかしくなる
414
+
415
+ //quizArray.remove(randomNum);
416
+
417
+ //消しても大丈夫そうなので消してみた。完全なるランダムになる
418
+
419
+
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+ } //ここに}があるから、randomNumが参照できねえ!!97行付近のshowNextQuiz
430
+
431
+
432
+
433
+ // checkAnswer波かっこ開始
434
+
435
+ public void checkAnswer(View view){ //意味も分からん。他の書き方できないのかなあ・・・
436
+
437
+
438
+
439
+ //どのボタンが押されたか
440
+
441
+ Button answerBtn = findViewById(view.getId()); //意味分からん
442
+
443
+
444
+
445
+ //ボタンのテキストを取得
446
+
447
+ String btnText = answerBtn.getText().toString(); //ボタンテキストを取得
448
+
449
+
450
+
451
+ String alertTitle;
452
+
453
+ //if elseの波かっこ群開始
454
+
455
+ if (btnText.equals(rightAnswer)) {
456
+
457
+ alertTitle = "せいかい!!";
458
+
459
+ rightAnswerCount++;
460
+
461
+
462
+
463
+ //mySound.onPlay(randomNum); // ④ 再生
464
+
465
+ //mySound.onPlay(1); // 0ならcが再生
466
+
467
+ //クイズ画像=cならsoundPlayer.playc();的な感じかと思う
468
+
469
+
470
+
471
+
472
+
473
+
474
+
475
+ }else {
476
+
477
+ alertTitle = "まちがっているよ";
478
+
479
+ } //if elseの波かっこ群終了
480
+
481
+
482
+
483
+ //ダイアログを作成
484
+
485
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
486
+
487
+ builder.setTitle(alertTitle);
488
+
489
+ builder.setMessage("こたえは" + rightAnswer + "だよ");
490
+
491
+ builder.setPositiveButton("つぎへいく", new DialogInterface.OnClickListener() {
492
+
493
+ @Override
494
+
495
+ public void onClick(DialogInterface dialog, int which) {
496
+
497
+ if (quizCount == QUIZ_COUNT){
498
+
499
+ //結果画面へ移動
500
+
501
+ Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
502
+
503
+ intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount);
504
+
505
+ startActivity(intent);
506
+
507
+
508
+
509
+ }else {
510
+
511
+ quizCount++;
512
+
513
+ showNextQuiz(); //showNextQuiz実行する
514
+
515
+ } //elseとじ
516
+
517
+
518
+
519
+ } //160行付近のpublic void onClick(DialogInterface dialog, int which) とじ
520
+
521
+ }); //"つぎへいく"のsetPositeveButton とじ
522
+
523
+ builder.setCancelable(false);
524
+
525
+ builder.show();
526
+
527
+
528
+
529
+
530
+
531
+
532
+
533
+ } // checkAnswer波かっことじ
534
+
535
+ } //大きいMainとじ
408
536
 
409
537
 
410
538