JavaScript~クイズゲーム2~

JavaScriptのクイズゲームを作ってます。
今回は、以前の話の
3、コードの解説
4、わからなかったところ、調べたところ

まず、コードです

3、コードの解説
最初は
Fisher-Yates アルゴリズムについてです
これは、配列の順番をランダムに変更させる関数です。
理論上もっとも高速で、確率が偏らないものみたいです

次にアクションから順に説明していきます。
・クイズスタートボタンをクリックしたら、ゲームが始まります(198行目)

・randomNotInclude()が読み込まれ、その中身は

function randomNotInclude() {
for (let k = min; k <= max; k++) {
while (true) {
let tmp = intRandom(min, max);
if (!randoms.includes(tmp)) {
randoms.push(tmp);
break;
}
}
console.log(randoms);
}
}
となっています。
この関数は、ランダム数字を表示する際に、重複しないような関数です。
ランダムに表示したとき、数字が重複しないように変数minで最小範囲、変数maxで最大範囲を決めています。
その後、for文でminがmaxより大きくなるまでの間、
さらに、

while (true) {
let tmp = intRandom(min, max);
if (!randoms.includes(tmp)) {
randoms.push(tmp);
break;
}
}
while文で、
trueの間、intRandom(min,max)関数を実行し、変数tmpに代入しています。
もし、配列変数randomsにtmpと同じ文字が入れば、randoms.push(tmp)で配列から同じ数字を削除して、while文を抜けます。

関数intRamdom(min,max)についてですが
min以上max以下の整数値の乱数を返します。

この段階で、配列randomsには、重複しないmin以上max以下の乱数が格納されています。

・quizStart()の中身は

function quizStart() {
console.log(“正解” + molecule);
console.log(“問題の数” + denominator);
counter();
random = randoms[count];
questionScreen.textContent=question[random];
console.log(random);
console.log(question[random]);
screenWrite(random);
}
となっています
クイズスタートが読み込まれると
counter()が読み込まれます

・counter()の中身としては
counter()が読み込まれるたびに、count変数を+1しています。
一旦if文の解説は後回しにします。(後半で)

この1ずつ増やしていったcount変数を重複していないrandom数字が格納されている配列の一つずつを呼び出すのに使用します。
random = randoms[count]

これでquestionScreen.textContent = question[random]で
問題をランダムに表示することができるようになりました。

・screenWrite(random)ですが変数randomの値を引数として使い
関数の中は、switch文を使用してます。
簡単に解説すると
先ほどのrandom数字を問題の配列questionと結び付けることで、randomが0のときはquestion[0]より
問題文は “現在の内閣総理大臣は?”,となります。
randomが0のときは、switch文のnumにも0が入っているので、
case 0、つまり questionArray = president.shuffle();
が読み込まれます。
配列presidentは問題文の “現在の内閣総理大臣は?”,の答えなので、それをshuffle関数をつかって、回答をバラバラにして、ラジオボタンに表示しています。
これをすることで、毎回同じ、問題の順番で表示されないということです。

・次に、次の問題にをクリックした時のことですが…
基本的には、コードに書いてある通りです。笑

ラジオボタンをクリックした時の値が、else if文の中身と一致していれば、変数molecule,denominatorを+1していきます。
一致していなければ、denominatorの+1をして、変数countが+1されていき、変数maxを超えたら、ゲームを終了し(”textdeleat()”)、結果を表示します(”result()”)

4、調べたところ
inclueds():特定の要素が配列に含まれているかどうかを true または false で返します。与えられた要素が見つかるかどうかを計算するために、 SameValueZero (ゼロの同値) アルゴリズムを使用します。
リファレンス:MDN

以上です

もりけん塾
もりけん先生ブログ

コメント