5. 正解・不正解を判定する

はじめに

前回クイズを表示することができたので、今回はクイズの正解・不正解を判定してみましょう。

正解・不正解の判定は解答ボタンが押されたときに呼ばれる checkAnswer 関数を使います。

ダイアログを使ってクイズの答えも表示してみましょう。

image1

 

正解・不正解を判定する

1. クイズの出題数を設定する

まずはクイズを何問出題するかを決めます。

3~5行目を追加してください。

ここではクイズを5問出題するように設定しました。

出題したクイズは quizData リストから削除するので、出題数はリストの要素数を超えない範囲に設定してください。

 

 

2. checkAnswer関数

checkAnswer 関数にコードを追加します。

 

必要な import

ダイアログを使うために以下の import が追加されます。

import com.google.android.material.dialog.MaterialAlertDialogBuilder

 

3・4行目:どの解答ボタンが押されたかを取得

val answerBtn: Button = findViewById(view.id)
val btnText = answerBtn.text.toString()

押された解答ボタンを見つけて、そのボタンのテキストを取得しています。

 

8~13行目:正解・不正解の判定

8行目では解答ボタンのテキストと rightAnswer が一致するかで正解・不正解を判定しています。

if (btnText == rightAnswer) {
  alertTitle = "正解!"
  rightAnswerCount++
} else {
  alertTitle = "不正解…"
}

正解の場合は、このあと作成するダイアログのタイトルを「正解!」として、正解数をカウントする rightAnswerCount に1を加算します。

不正解の場合は、ダイアログのタイトルを「不正解…」とするだけです。

 

16行目~:ダイアログを表示する

16行目からはダイアログを作成しています。

まずはタイトル・メッセージ・OKボタンを追加します。

image2

 

19~21行目は OK ボタンが押された時に checkQuizCount 関数を呼び出す設定をしています。

22行目の setCancelable はダイアログの外側をタップしたときにダイアログを閉じるかどうかを指定しています。

false にしているので OK ボタンを押さないとダイアログを閉じることはできません。

ダイアログの表示には DialogFragment を使うべきですが、このクイズでは画面を固定すると想定していること、より簡単に実装することを理由にここでは使用していません。あとで DialogFragment を使ったコードに変更します。

 

 

3. checkQuizCount 関数

ダイアログの OK ボタンが押されたら呼ばれる checkQuizCount 関数に以下のコードを書きます。

最初に設定した出題数 QUIZ_COUNT と quizCount が同じになったら結果画面に移動します。

QUIZ_COUNT に達していない場合は quizCount に1を足して、再び showNextQuiz メソッドを呼ぶことで、クイズを続けて出題できるようになります。

 

 

4. countLabel の更新

最後に「Q1」と表示している countLabel を更新しましょう。

showNextQuiz 関数に3行目を追加します。

 

クイズ画面を作成した時に strings.xml に

<string name="count_label">Q%d</string>

と書きました。

getString メソッドを使って strings.xml に定義したこの文字列を取得して、第2引数に %d の部分に入れる数値を指定しています。

 

 

5. アプリを実行する

エミュレータでアプリを実行してみて下さい。

正解・不正解の判定が正しく行われ、クイズが連続して出題されるでしょうか?

もし上手く動かない場合は下にサンプルコードを貼ってあるのでご確認ください。

 

次に行うこと

これでメインのクイズ機能は完成です!

次回からは結果画面を作成していきましょう。

 

ここまでのコード

 

 

完了して次のステップへ  
コメント

0 コメント