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

質問編集履歴

5

2019/12/22 03:56

投稿

kubonos
kubonos

スコア6

title CHANGED
File without changes
body CHANGED
File without changes

4

2019/12/22 03:56

投稿

kubonos
kubonos

スコア6

title CHANGED
File without changes
body CHANGED
@@ -61,17 +61,9 @@
61
61
  ランダムに表示された画像がf.pngであったら、f.wavを再生する、というコードを書きたいです。
62
62
 
63
63
 
64
- ポケモンクイズで、ピカチュウの画像が出てきたら、ピカチュウの鳴き声が再生されるようなプログラムも作ってみたいなと思っています(著作権には配慮します)。
65
64
 
66
65
 
67
- 下にコードを書いているのですが、2週間程度独学でやっているのですが、半分以上意味が分からず書いています。
68
66
 
69
- 見にくいエラー付のコードで大変申し訳ございません。
70
-
71
-
72
-
73
-
74
-
75
67
  ```ここに言語を入力
76
68
  コード
77
69
  package com.test.java;

3

誤字

2019/12/22 03:55

投稿

kubonos
kubonos

スコア6

title CHANGED
File without changes
body CHANGED
@@ -31,7 +31,7 @@
31
31
  3、音声p.wavが再生される。
32
32
 
33
33
 
34
- という挙動を作りたいです。
34
+ というような挙動を作りたいです。
35
35
 
36
36
  <試していること>
37
37
 
@@ -162,7 +162,7 @@
162
162
 
163
163
  //tmpArrayをquizArrayに追加する
164
164
  quizArray.add(tmpArray); //ここがよく分からん。どういうことなのか?配列に配列を追加とは
165
- //"c","","レ","ミ","ファ"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。
165
+ //"one","1"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。
166
166
  }
167
167
  //quizDataからクイズ出題用のquizArrayを作成した
168
168
  showNextQuiz(); //実行showNextQuiz

2

誤字

2019/12/21 18:33

投稿

kubonos
kubonos

スコア6

title CHANGED
File without changes
body CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
  ```ここに言語を入力
76
76
  コード
77
- package com.vjoutatu.doremijava;
77
+ package com.test.java;
78
78
 
79
79
  import androidx.appcompat.app.AlertDialog;
80
80
  import androidx.appcompat.app.AppCompatActivity;

1

誤字

2019/12/21 18:26

投稿

kubonos
kubonos

スコア6

title CHANGED
File without changes
body CHANGED
@@ -74,11 +74,10 @@
74
74
 
75
75
  ```ここに言語を入力
76
76
  コード
77
- package com.te.gazouonseijava;
77
+ package com.vjoutatu.doremijava;
78
78
 
79
79
  import androidx.appcompat.app.AlertDialog;
80
80
  import androidx.appcompat.app.AppCompatActivity;
81
-
82
81
  import android.content.DialogInterface;
83
82
  import android.content.Intent;
84
83
  import android.os.Bundle;
@@ -86,123 +85,188 @@
86
85
  import android.widget.Button;
87
86
  import android.widget.ImageView;
88
87
  import android.widget.TextView;
89
-
90
88
  import java.util.ArrayList;
91
- import java.util.Collections;
92
89
  import java.util.Random;
93
90
 
91
+ //波かっこ1(メイン)開始
94
92
  public class MainActivity extends AppCompatActivity {
95
93
 
96
- private TextView countLabel;
94
+ private TextView countLabel;
95
+ private ImageView questionImage; //ImageViewは絵を入れるための額縁
96
+ //private TextView questionLabel;
97
+ private Button answerBtn1;
98
+ private Button answerBtn2;
99
+ private Button answerBtn3;
100
+ private Button answerBtn4;
97
101
 
102
+ private String rightAnswer; //String文字型であることに注目したい
103
+ private int rightAnswerCount = 0; //初期化=定義
98
- private ImageView questionImage;
104
+ private int quizCount = 1; //初期化=定義
105
+ static final private int QUIZ_COUNT = 50; //全部の出題数を入れるのだ!!
99
106
 
107
+ ArrayList<ArrayList<String>> quizArray = new ArrayList<>(); //ああ・・・これもよく分からねえ
100
- //private TextView questionLabel;
108
+ //ArrayList<ArrayList<String>> って普通の書き方なの?あとnewもよくわからねえ
101
- private Button answerBtn1;
102
109
 
110
+ //クイズデータ並べる
111
+ String quizData[][] = { //[][]は多次元配列というらしい
112
+ //{"画像名","正解",("選択2","選択3","選択4"},
113
+ //,←これ[,]が必要なんだ!!!
114
+ {"one","1"}, //[0][0],[0][1],...
115
+ {"two","2"}, //[1][0],[1][1],
116
+ {"three","3"},
103
117
 
118
+ };
104
- ArrayList<ArrayList<String>> quizArray = new ArrayList<>();
119
+ //クイズデータ並べた
105
120
 
106
- String quizData[][] = {
107
- //{"画像名","正解"},
121
+ MySound mySound = new MySound(); // ① サウンド準備
108
- //,←これ[,]が必要なんだ!!!
109
- {"c","c"},
110
- {"d","d"},
111
122
 
112
123
 
124
+ //オーヴァーライド波かっこ(2)開始
113
- };
125
+ @Override
126
+ protected void onCreate(Bundle savedInstanceState) { //よく分からない定型文
127
+ super.onCreate(savedInstanceState); //よく分からない定型文2
128
+ setContentView(R.layout.activity_main); //xmlを表示
114
129
 
130
+ // ② 効果音の準備wavだけどmp3sで定義されている。クイズデータと同じ並びで並べる
131
+ int[] mp3s = {
115
- private SoundPlayer soundPlayer;
132
+ R.raw.a, //[0]
133
+ R.raw.b, //[1]
134
+ R.raw.c, //[2]
135
+ };
136
+ mySound.onCreate(this,mp3s); // ③ 初期化、言葉がまぎらわしいがただ定義(代入)しただけ
116
137
 
138
+ countLabel = findViewById(R.id.countLabel);
139
+ questionImage = findViewById(R.id.questionImage);
140
+ answerBtn1 = findViewById(R.id.answerBtn1);
141
+ answerBtn2 = findViewById(R.id.answerBtn2);
142
+ answerBtn3 = findViewById(R.id.answerBtn3);
143
+ answerBtn4 = findViewById(R.id.answerBtn4);
117
144
 
145
+ //quizDataからクイズ出題用のquizArrayを作成する
146
+ for (int i = 0; i < quizData.length; i++) {
147
+ //lengthは配列の要素の数を返す、length()は文字列の文字数を返すんだって
148
+ //多次元配列だけど、[0][0],[0][1],の最初の[0]だけ返すのかな??
149
+ //新しいArrayListを用意
150
+ ArrayList<String> tmpArray = new ArrayList<>(); //要素を格納するためのリスト箱
118
151
 
119
- @Override
152
+ //クイズデータを追加
120
- protected void onCreate(Bundle savedInstanceState) {
153
+ tmpArray.add(quizData[i][0]); //画像名
121
- super.onCreate(savedInstanceState);
154
+ tmpArray.add(quizData[i][1]); //正解
122
- setContentView(R.layout.activity_main);
155
+ //tmpArray.add(quizData[i][2]); //選択2
156
+ //tmpArray.add(quizData[i][3]); //選択3
157
+ //tmpArray.add(quizData[i][4]); //選択4
123
158
 
124
- soundPlayer = new SoundPlayer(this);
159
+ //tmpArrayの追加順番は、quizData多次元配列[0][0],[0][1],[0][2],[0][3],[0][4],[1][0],[1][1],
125
- questionImage = findViewById(R.id.questionImage);
160
+ //つまりtmpArrayは、ただの配列の[0],[1],[2]..になるのかな?
126
- answerBtn1 = findViewById(R.id.answerBtn1);
161
+ //↑は多分違うようだ。tmpArrayも、多次元配列[0][0],[0][1],[0][2]のままなんだと思う。
127
162
 
163
+ //tmpArrayをquizArrayに追加する
164
+ quizArray.add(tmpArray); //ここがよく分からん。どういうことなのか?配列に配列を追加とは
165
+ //"c","ド","レ","ミ","ファ"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。
166
+ }
167
+ //quizDataからクイズ出題用のquizArrayを作成した
168
+ showNextQuiz(); //実行showNextQuiz
169
+ //すぐ下に処理内容が書いてある
128
170
 
171
+ }
129
- //quizDataからクズ出題用quizArrayを作成する
172
+ //オーヴァーラド波かっこ(2)とじ・・・とじていいか??
130
- for (int i = 0; i < quizData.length; i++) {
173
+
131
174
 
132
- //新しいArrayListを用意
175
+ // showNextQuiz波かっこ開始
133
- ArrayList<String> tmpArray = new ArrayList<>();
176
+ public void showNextQuiz() {
134
- //クイズデータ追加
177
+ //クイズカウントラベル更新
135
- tmpArray.add(quizData[i][0]); //画像名
178
+ countLabel.setText("Q" + quizCount);
136
179
 
137
180
 
181
+ //ランダムな数字を取得・・下の2行で1セット文章
182
+ Random rand = new Random();
183
+ int randomNum = rand.nextInt(quizArray.size()); //quizArray多次元配列の[0][0]の左の数字を指すと思う
138
- //tmpArrayをquizArrayに追加
184
+ //0~quizArrayの数-1のどこかの数字を取り出
139
- quizArray.add(tmpArray);
140
- }
141
185
 
142
- showNextQuiz();
143
186
 
144
- }
187
+ //音声で共通に取り出せない問題がある
145
188
 
146
- public void showNextQuiz() {
147
- //クイズカウントラベル更新
189
+ //randomNumを使ってquizArrayからクイズを一つ取り出す
190
+ ArrayList<String> quiz = quizArray.get(randomNum); //なぜStringになるのか??
148
- countLabel.setText("Q" + quizCount);
191
+ //おそらく、["one","1"]の文字配列を呼び出しているのだろう。
149
192
 
193
+ //randomNumを使ってquizArrayから音を取り出せるのでは
150
- //ランダムな数字取得
194
+ //試しに音鳴らしてみよう
151
- Random random = new Random();
195
+ mySound.onPlay(randomNum);
152
- int randomNum = random.nextInt(quizArray.size());
196
+ //おお。。ここに書く分には大丈夫そうです。第一問の時はなぜか鳴りませんけど・・
153
197
 
154
- //randomNumを使ってquizArrayからクイズを一つ取り出す
155
- ArrayList<String> quiz = quizArray.get(randomNum);
156
198
 
157
- //画像をセットする
199
+ //画像をセットする
158
- questionImage.setImageResource(
200
+ questionImage.setImageResource(
159
- getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
201
+ getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
160
- );
202
+ ); //配列から画像名を取り出す時は quiz.get(0)
161
203
 
162
- //正解をrightAnswerにセット
204
+ //正解をrightAnswerにセット
163
- rightAnswer = quiz.get(1);
205
+ rightAnswer = quiz.get(1); //正解を取り出す時は quiz.get(1)
164
206
 
207
+ //このクイズをquizArrayから削除<消したいけど消すと挙動がおかしくなる
208
+ //quizArray.remove(randomNum);
209
+ //消しても大丈夫そうなので消してみた。完全なるランダムになる
165
210
 
166
- //このクイズをquizArrayから削除<消したいけど消すとおかしくなる
167
- quizArray.remove(randomNum);
168
211
 
169
- }
170
212
 
171
- public void checkAnswer(View view){
172
213
 
173
- //どのボタンが押されたか
174
- Button answerBtn = findViewById(view.getId());
175
214
 
176
- //ボタンのテキストを取得
177
- String btnText = answerBtn.getText().toString();
215
+ } //ここに}があるから、randomNumが参照できねえ!!97行付近のshowNextQuiz
178
216
 
179
- String alertTitle;
180
- if (btnText.equals(rightAnswer)) {
217
+ // checkAnswer波かっこ開始
181
- alertTitle = "せいかい!!";
218
+ public void checkAnswer(View view){ //意味も分らん。他の書き方できなのかなあ・・・
182
- rightAnswerCount++;
183
219
 
184
- //ここ全く分らない
220
+ //どのボタンが押された
221
+ Button answerBtn = findViewById(view.getId()); //意味分からん
185
222
 
186
- //クイズ画像=aならsoundPlayer.playa();的な感じかと思う
223
+ //ボタンのテキストを取得
187
- if (questionImage == a){  //エラー出ています
224
+ String btnText = answerBtn.getText().toString(); //ボタンテキストを取得
188
- soundPlayer.playaSound();
189
225
 
226
+ String alertTitle;
227
+ //if elseの波かっこ群開始
190
- }else if (questionImage.equals("b.png")){
228
+ if (btnText.equals(rightAnswer)) {
229
+ alertTitle = "せいかい!!";
191
- soundPlayer.playbSound();
230
+ rightAnswerCount++;
192
- }
193
231
 
232
+ //mySound.onPlay(randomNum); // ④ 再生
233
+ //mySound.onPlay(1); // 0ならcが再生
234
+ //クイズ画像=cならsoundPlayer.playc();的な感じかと思う
194
235
 
195
236
 
196
- };
197
- builder.setCancelable(false);
198
- builder.show();
199
237
 
238
+ }else {
239
+ alertTitle = "まちがっているよ";
240
+ } //if elseの波かっこ群終了
200
241
 
242
+ //ダイアログを作成
243
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
244
+ builder.setTitle(alertTitle);
245
+ builder.setMessage("こたえは" + rightAnswer + "だよ");
246
+ builder.setPositiveButton("つぎへいく", new DialogInterface.OnClickListener() {
247
+ @Override
248
+ public void onClick(DialogInterface dialog, int which) {
249
+ if (quizCount == QUIZ_COUNT){
250
+ //結果画面へ移動
251
+ Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
252
+ intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount);
253
+ startActivity(intent);
201
254
 
202
- }
255
+ }else {
256
+ quizCount++;
257
+ showNextQuiz(); //showNextQuiz実行する
203
- }
258
+ } //elseとじ
204
259
 
260
+ } //160行付近のpublic void onClick(DialogInterface dialog, int which) とじ
261
+ }); //"つぎへいく"のsetPositeveButton とじ
262
+ builder.setCancelable(false);
263
+ builder.show();
205
264
 
265
+
266
+
267
+ } // checkAnswer波かっことじ
268
+ } //大きいMainとじ
269
+
206
270
  <?xml version="1.0" encoding="utf-8"?>
207
271
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
208
272
  xmlns:app="http://schemas.android.com/apk/res-auto"