Home > イヌでもわかるJavaScript講座 お品書き
イヌでもわかるJavaScript講座 お品書き へ戻ります
イヌでもわかるJavaScript講座


Step.87 - 英単語の暗記


前回の英単語の問題をシャッフルして出題します。


Step テーマ
● とくになし

実行例





リスト


<script type="text/javascript"><!--
myQA = new Array(// 問題テーブル
"飛行機","plane",
"船","ship",
"汽車","train",
"車","car",
"自転車","bicycle",
"川","river",
"山","mountain",
"道路","road",
"家","house",
"スクリプト","script"
);
 
myNowCnt = 0;// 問題を出すテーブルカウンタ
myLastCnt = myQA.length / 2;// 問題の数
myQAno = new Array(myLastCnt);// 問題の順番テーブル
 
function myQuesInit(){// 問題テーブルのシャッフル
for (i=0; i<myLastCnt; i++) myQAno[i] = i;// 0〜myLastCnt-1を順次セット
for (i=0; i<500; i++){// 500回 myQAno の内容をシャッフルする
my1 = Math.floor( Math.random() * myLastCnt );// 0〜myLastCnt-1 を決める
my2 = Math.floor( Math.random() * myLastCnt );// 0〜myLastCnt-1 を決める
myBackup = myQAno[my1];// myQAnoのmy1番目とmy2番目の内容を入れ替える
myQAno[my1] = myQAno[my2];
myQAno[my2] = myBackup;
}
}
 
function myQues(){
if ( myNowCnt==0 ) myQuesInit();// 問題をシャッフル
myA = prompt("¥n問題 : "+myQA[myQAno[myNowCnt]*2],"");
if ( myA != null ){// キャンセルボタンでない?
if ( myA == myQA[myQAno[myNowCnt]*2+1] ){// スペル正解?
if (myNowCnt==myLastCnt-1){// 問題終わった?
myNowCnt=0;
alert("問題終了! お疲れ様でした!");
}else{// 次の問題へ
myNowCnt++;
myQues();
}
}else{// スペル間違った?
alert("はずれ! 答えは "+myQA[myQAno[myNowCnt]*2+1]+" です!");
myQues();
}
}else{ // キャンセルボタン押した
myNowCnt=0;
alert("勉強中断 お疲れ様でした!");
}
}
// --></script>
<form name="myForm">
<input type="button" value="英単語の勉強を始める" onclick="myQues()">
</form>


サンプルだけの HTMLは こちらへ

説明


[Q] Step.86 の単語問題をランダムに出題できますか? また、最後まで出題したら、終了させたいのですが。
[A] ほい


テーブルをシャッフルするのは、Step.77 のミニロト予想で使っているのをそのまま利用します。

このサンプルも、myQA テーブルに "日本語","英語", の順にひたすら単語を打ち込むだけで、すぐ使えます。おっと、最後だけカンマは、いりませんよ。

Step.86 からの、改造説明。。

myQAno テーブルを生成して、これに出題する問題のテーブル番号をセットすることにします。
myQuesInit() 関数は、 myQAno テーブルの問題の順番をランダムにセットするための初期値設定関数です。
勉強を開始するときに呼べばいいので、myNowCnt が 0 、つまり、第1問目を出題しようとしたときに、この関数を呼んで、順番をランダムにセットします。
if ( myNowCnt==0 ) myQuesInit();// 問題をシャッフル

myQuesInit() 関数は、Step.77 のコピーですので、説明はそちらを参照してくださいませ。

前回は 答えを間違えたら 再入力でしたが、今回は間違い表示して、次の問題に移しました。


参考ステップ
Step.77 ミニロトの番号を予想してみましょう 
Step.86 英単語のお勉強をいたしましょう 

Q&A


[Q] 最後に得点を出したいのですが
[A] 以下のようになります。

<script type="text/javascript"><!--
myQA = new Array(// 問題テーブル
"飛行機","plane",
"船","ship",
"汽車","train",
"車","car",
"自転車","bicycle",
"川","river",
"山","mountain",
"道路","road",
"家","house",
"スクリプト","script"
);
 
myNowCnt = 0;// 問題を出すテーブルカウンタ
myLastCnt = myQA.length / 2;// 問題の数
myQAno = new Array(myLastCnt);// 問題の順番テーブル
myHit = 0;// 正解数のカウンタ
 
function myQuesInit(){// 問題テーブルのシャッフル
for (i=0; i<myLastCnt; i++) myQAno[i] = i;// 0〜myLastCnt-1を順次セット
for (i=0; i<500; i++){// 500回 myQAno の内容をシャッフルする
my1 = Math.floor( Math.random() * myLastCnt );// 0〜myLastCnt-1 を決める
my2 = Math.floor( Math.random() * myLastCnt );// 0〜myLastCnt-1 を決める
myBackup = myQAno[my1];// myQAnoのmy1番目とmy2番目の内容を入れ替える
myQAno[my1] = myQAno[my2];
myQAno[my2] = myBackup;
}
}
 
function myQues(){
if ( myNowCnt==0 ) myQuesInit();// 問題をシャッフル
myA = prompt("¥n問題 : "+myQA[myQAno[myNowCnt]*2],"");
if ( myA != null ){// キャンセルボタンでない?
if ( myA == myQA[myQAno[myNowCnt]*2+1] ){// スペル正解?
myHit++;
}else{// スペル不正解
alert("はずれ! 答えは "+myQA[myQAno[myNowCnt]*2+1]+" です!");
}
 
if (myNowCnt==myLastCnt-1){// 問題終わった?
myScore = Math.floor(myHit*100/myLastCnt);// 得点計算
alert("問題終了です¥n¥n"
+myLastCnt+"問中"+myHit+"問正解。点数は"+myScore+"点です。");
myNowCnt=0;
myHit=0;
}else{// 次の問題へ
myNowCnt++;
myQues();
}
 
}else{// キャンセルボタン押した
myNowCnt=0;
myHit=0;
alert("勉強中断 お疲れ様でした!");
}
}
// --></script>
<form name="myForm">
<input type="button" value="英単語の勉強を始める" onclick="myQues()">
</form>



 
イヌでもわかるJavaScript講座 お品書き へ戻ります