質問編集履歴
5
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
4
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
誤字
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
|
-
//"
|
165
|
+
//"one","1"は[0]で取り出せるらしい。quizArrayもまだ多次元配列[0][0],[0][1],[0][2]っぽい。
|
166
166
|
}
|
167
167
|
//quizDataからクイズ出題用のquizArrayを作成した
|
168
168
|
showNextQuiz(); //実行showNextQuiz
|
2
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -74,7 +74,7 @@
|
|
74
74
|
|
75
75
|
```ここに言語を入力
|
76
76
|
コード
|
77
|
-
package com.
|
77
|
+
package com.test.java;
|
78
78
|
|
79
79
|
import androidx.appcompat.app.AlertDialog;
|
80
80
|
import androidx.appcompat.app.AppCompatActivity;
|
1
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -74,11 +74,10 @@
|
|
74
74
|
|
75
75
|
```ここに言語を入力
|
76
76
|
コード
|
77
|
-
package com.
|
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
|
-
|
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
|
-
|
104
|
+
private int quizCount = 1; //初期化=定義
|
105
|
+
static final private int QUIZ_COUNT = 50; //全部の出題数を入れるのだ!!
|
99
106
|
|
107
|
+
ArrayList<ArrayList<String>> quizArray = new ArrayList<>(); //ああ・・・これもよく分からねえ
|
100
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
152
|
+
//クイズデータを追加
|
120
|
-
|
153
|
+
tmpArray.add(quizData[i][0]); //画像名
|
121
|
-
|
154
|
+
tmpArray.add(quizData[i][1]); //正解
|
122
|
-
|
155
|
+
//tmpArray.add(quizData[i][2]); //選択2
|
156
|
+
//tmpArray.add(quizData[i][3]); //選択3
|
157
|
+
//tmpArray.add(quizData[i][4]); //選択4
|
123
158
|
|
124
|
-
|
159
|
+
//tmpArrayの追加順番は、quizData多次元配列[0][0],[0][1],[0][2],[0][3],[0][4],[1][0],[1][1],
|
125
|
-
|
160
|
+
//つまりtmpArrayは、ただの配列の[0],[1],[2]..になるのかな?
|
126
|
-
|
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
|
-
|
172
|
+
//オーヴァーライド波かっこ(2)とじ・・・とじていいのか??
|
130
|
-
|
173
|
+
|
131
174
|
|
132
|
-
|
175
|
+
// showNextQuiz波かっこ開始
|
133
|
-
|
176
|
+
public void showNextQuiz() {
|
134
|
-
|
177
|
+
//クイズカウントラベルを更新
|
135
|
-
|
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
|
-
|
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
|
-
|
191
|
+
//おそらく、["one","1"]の文字配列を呼び出しているのだろう。
|
149
192
|
|
193
|
+
//randomNumを使ってquizArrayから音を取り出せるのでは
|
150
|
-
|
194
|
+
//試しに音を鳴らしてみよう
|
151
|
-
|
195
|
+
mySound.onPlay(randomNum);
|
152
|
-
|
196
|
+
//おお。。ここに書く分には大丈夫そうです。第一問の時はなぜか鳴りませんけど・・
|
153
197
|
|
154
|
-
//randomNumを使ってquizArrayからクイズを一つ取り出す
|
155
|
-
ArrayList<String> quiz = quizArray.get(randomNum);
|
156
198
|
|
157
|
-
|
199
|
+
//画像をセットする
|
158
|
-
|
200
|
+
questionImage.setImageResource(
|
159
|
-
|
201
|
+
getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
|
160
|
-
|
202
|
+
); //配列から画像名を取り出す時は quiz.get(0)
|
161
203
|
|
162
|
-
|
204
|
+
//正解をrightAnswerにセット
|
163
|
-
|
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
|
-
|
215
|
+
} //ここに}があるから、randomNumが参照できねえ!!97行付近のshowNextQuiz
|
178
216
|
|
179
|
-
String alertTitle;
|
180
|
-
|
217
|
+
// checkAnswer波かっこ開始
|
181
|
-
|
218
|
+
public void checkAnswer(View view){ //意味も分からん。他の書き方できないのかなあ・・・
|
182
|
-
rightAnswerCount++;
|
183
219
|
|
184
|
-
//
|
220
|
+
//どのボタンが押されたか
|
221
|
+
Button answerBtn = findViewById(view.getId()); //意味分からん
|
185
222
|
|
186
|
-
//
|
223
|
+
//ボタンのテキストを取得
|
187
|
-
|
224
|
+
String btnText = answerBtn.getText().toString(); //ボタンテキストを取得
|
188
|
-
soundPlayer.playaSound();
|
189
225
|
|
226
|
+
String alertTitle;
|
227
|
+
//if elseの波かっこ群開始
|
190
|
-
|
228
|
+
if (btnText.equals(rightAnswer)) {
|
229
|
+
alertTitle = "せいかい!!";
|
191
|
-
|
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"
|