andoroid Studioでクイズアプリを作っています。
【具体的にアプリに欲しい挙動】
具体的に作りたいのは、幼児用の英語の数字を覚えるアプリなのですが
問題:oneはどれ?
プレイヤー回答:1!
画面:正解!
音声"one.wav"再生:「♪ワンは1だよ♪」
↓
問題:threeはどれ?
プレイヤー回答:3!
画面:正解!
音声"three.wav"再生:「♪スリーは3だよ♪」
↓
問題:twoはどれ?
プレイヤー回答:3!
画面:不正解!
音声"two.wav"再生:「♪トゥーは2だよ♪」
↓
問題:nineはどれ?
プレイヤー回答:9!
画面:正解!
音声"nine.wav"再生:「♪ナインは9だよ♪」
↓
同じようにランダムに問題を出題
↓
結果発表!
20問中17問正解!!
という挙動をするアプリを作りたいです。
回答ボタンの配置を「1,2,3,4,5,6,7,8,9」と固定して、クイズアプリを作りたいのですが、やり方が分かりません。
【現況】
今は、ネットに載っている、四択クイズの、回答ボタンをシャッフルするやり方で作っています。
String quizData[][] = {
//{"画像名","正解","選択2","選択3","選択4"},
{"one","1","2","3","4"},
{"two","2","1","3","4"},
で、正解を最初に書き、選択肢をシャッフル
Collections.shuffle(quiz);
して並べているのですが、
答えボタンを、
1,2,3,4
と固定の順番で並べて、
oneが出てきたら、1で正解
twoが出てきたら、2で正解
と回答ボタンを完全に固定して動かすには、どのようにしたらよろしいでしょうか?
今の状態だと、回答ボタンが
4,3,1,2
1,3,2,4
2,3,4,1
などとコロコロ変わって、ただ見ずらいです。
最終的には9個の回答ボタンを実装して、問題数20個程度のクイズアプリを作りたいのですが・・。
クイズの正解を、音声で流すことをどうしてもしたくて、その条件をどのように書いていけば良いのかわからずに悩んでいます。
良いやり方をご教授願えますと幸いです。
よろしくお願いいたします。
発生している問題・エラーメッセージ
エラーメッセージは特にありません。
<ソースコードのすべて>
package com.vjoutatu.doremijava;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private TextView countLabel;
private ImageView questionImage;
//private TextView questionLabel;
private Button answerBtn1;
private Button answerBtn2;
private Button answerBtn3;
private Button answerBtn4;
private String rightAnswer;
private int rightAnswerCount = 0;
private int quizCount = 1;
static final private int QUIZ_COUNT = 2; //全部の出題数を入れるのだ!!
ArrayList<ArrayList<String>> quizArray = new ArrayList<>();
String quizData[][] = {
//{"画像名","正解","選択2","選択3","選択4"},
{"one","1","2","3","4"},
{"two","2","1","3","4"}, {"three","3","2","1","4"}, {"four","4","2","3","1"},
};
//Sound
private SoundPlayer soundPlayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
soundPlayer = new soundPlayer;
countLabel = findViewById(R.id.countLabel);
questionImage = findViewById(R.id.questionImage);
answerBtn1 = findViewById(R.id.answerBtn1);
answerBtn2 = findViewById(R.id.answerBtn2);
answerBtn3 = findViewById(R.id.answerBtn3);
answerBtn4 = findViewById(R.id.answerBtn4);
//quizDataからクイズ出題用のquizArrayを作成する
for (int i = 0; i < quizData.length; i++) {
//新しいArrayListを用意
ArrayList<String> tmpArray = new ArrayList<>();
//クイズデータを追加
tmpArray.add(quizData[i][0]); //画像名
tmpArray.add(quizData[i][1]); //正解
tmpArray.add(quizData[i][2]); //選択2
tmpArray.add(quizData[i][3]); //選択3
tmpArray.add(quizData[i][4]); //選択4
//tmpArrayをquizArrayに追加する
quizArray.add(tmpArray);
}
showNextQuiz();
}
public void showNextQuiz() {
//クイズカウントラベルを更新
countLabel.setText("Q" + quizCount);
//ランダムな数字を取得
Random random = new Random();
int randomNum = random.nextInt(quizArray.size());
//randomNumを使ってquizArrayからクイズを一つ取り出す
ArrayList<String> quiz = quizArray.get(randomNum);
//画像をセットする
questionImage.setImageResource(
getResources().getIdentifier(quiz.get(0), "drawable", getPackageName())
);
//正解をrightAnswerにセット
rightAnswer = quiz.get(1);
//クイズ配列から画像名を削除
quiz.remove(0);
//正解と選択肢3つをシャッフル
Collections.shuffle(quiz);
//回答ボタンに正解と選択肢3つをセット
answerBtn1.setText(quiz.get(0));
answerBtn2.setText(quiz.get(1));
answerBtn3.setText(quiz.get(2));
answerBtn4.setText(quiz.get(3));
//このクイズをquizArrayから削除<消したいけど消すとおかしくなる
quizArray.remove(randomNum);
}
public void checkAnswer(View view){
//どのボタンが押されたか
Button answerBtn = findViewById(view.getId());
//ボタンのテキストを取得
String btnText = answerBtn.getText().toString();
String alertTitle;
if (btnText.equals(rightAnswer)) {
alertTitle = "せいかい!!";
rightAnswerCount++;
}else {
alertTitle = "まちがっているよ";
}
//ダイアログを作成
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(alertTitle);
builder.setMessage("こたえは" + rightAnswer + "だよ");
builder.setPositiveButton("つぎへいく", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (quizCount == QUIZ_COUNT){
//結果画面へ移動
Intent intent = new Intent(getApplicationContext(), ResultActivity.class);
intent.putExtra("RIGHT_ANSWER_COUNT", rightAnswerCount);
startActivity(intent);
}else {
quizCount++;
showNextQuiz();
}
}
});
builder.setCancelable(false);
builder.show();
}
}
試したこと
本を色々読んでいるのですが、どのように条件分岐したらよいのか分かりません・・。
回答1件
あなたの回答
tips
プレビュー