jsWaffleでAndroidアプリを作ろう!クイズアプリ編⑦
では、回答キャンセル機能を組み込んでいきます。
回答のキャンセル機能は以下のような感じで実装します。
droid.dialogList()でクイズを出題し、選択した回答でOKかやり直すかを選択するダイアログをdroid.dialogYesNo()を使用して質問します。
Yesの場合はtrueが、Noの場合はfalseが返ってきますので、あるパラメータにそれを格納します。
もし、パラメータがfalseの場合には上記のdroid.dialogList()での問題出題に戻って処理を繰り返します。
つまり、ループ処理を使用するわけです。
実装方法は以上のようなかたちですが、ここまで読んでもイメージのわかない方は、やりながら理解していきましょう。
今回ループに使用するのはwhile文です。そしてパラメータとして変数okを定義して使用します。
では、まず前回までのスクリプトから以下の赤い部分を削除してください。
$(function(){ var list = [ { "question":"日本一高い山は?", "selection":["父山","富士山","高山","下山"], "answer":"富士山" }, { "question":"世界一小さい国は?", "selection":["日本","アメリカ","ロシア","バチカン市国"], "answer":"バチカン市国" }, { "question":"日本の初代総理大臣は?", "selection":["森鴎外","伊藤博文","日下部陽一","坂本竜馬","斉藤一"], "answer":"伊藤博文" }, ]; list = shaffle(list); for(var i=0;i<list.length;i++){ var quiz = list[i]; var title = "第" + (i+1) + "問:" + quiz["question"]; var a = droid.dialogList(title,quiz["selection"]); if(a == quiz["answer"]){ alert("正解です。"); }else{ alert("残念!不正解です。正解は「" + quiz["answer"] + "」でした。"); }
} function shaffle(arr){ for(var i=0;i<arr.length;i++){ /* * 配列の全要素から2つを取り出し、 * その二つを入れ替える処理を配列の要素の個数回 * 繰り返すことでシャッフルする。 */ var num = Math.floor(Math.random()*arr.length); var temp = arr[num]; arr[num] = arr[i]; arr[i] = temp; } return arr; } });
そして削除した部分にこれから色々と書き加えていきます。
まず、パラメータとして使用する変数okを定義します。
var ok = false;
変数okにはまずはfalseを代入しておきます。
これは後でwhile文を使用する際、okがfalseである場合のみループさせ、途中でtrueに書き換えられたときにループを終了させるためです。
つまり、以下のような感じです。
var ok = false; while(ok==false){ //okがtrueに書き換えられない限り、この中の処理(同じクイズの出題)を繰り返す }
ここまでの全文を表示しておきましょう。
$(function(){ var list = [ { "question":"日本一高い山は?", "selection":["父山","富士山","高山","下山"], "answer":"富士山" }, { "question":"世界一小さい国は?", "selection":["日本","アメリカ","ロシア","バチカン市国"], "answer":"バチカン市国" }, { "question":"日本の初代総理大臣は?", "selection":["森鴎外","伊藤博文","日下部陽一","坂本竜馬","斉藤一"], "answer":"伊藤博文" }, ]; list = shaffle(list); for(var i=0;i<list.length;i++){ var quiz = list[i]; var title = "第" + (i+1) + "問:" + quiz["question"]; var ok = false; while(ok==false){ //ここに出題処理 } } function shaffle(arr){ for(var i=0;i<arr.length;i++){ /* * 配列の全要素から2つを取り出し、 * その二つを入れ替える処理を配列の要素の個数回 * 繰り返すことでシャッフルする。 */ var num = Math.floor(Math.random()*arr.length); var temp = arr[num]; arr[num] = arr[i]; arr[i] = temp; } return arr; } });
長くなりそうなので、while文の中身は次回にしましょう。