let wordClass = "noun"; let target = words(wordClass); let targetLen = target.length; console.log(targetLen); let body = document.getElementsByTagName("body")[0]; let clsChg = document.getElementById("clsChg"); let display = document.getElementById("display"); let word = document.getElementById("word"); let pronunc = document.getElementById("pronunc"); let ans = [document.getElementById("ans_0"), document.getElementById("ans_1"), document.getElementById("ans_2"), document.getElementById("ans_3")] let result = document.getElementById("result"); let scoreElemA = document.getElementById("scoreA"); let scoreElemB = document.getElementById("scoreB"); let corrCntElemA = document.getElementById("corrCntA"); let wrongCntElemA = document.getElementById("wrongCntA"); let corrCntElemB = document.getElementById("corrCntB"); let wrongCntElemB = document.getElementById("wrongCntB"); let perfect = document.getElementById("perfect"); let imperfect = document.getElementById("imperfect"); let replay = document.getElementById("replay"); let playAnother = document.getElementsByClassName("playAnother")[0]; let footer = document.getElementsByTagName("footer")[0]; let startSound = document.getElementById("startSound"); let corrSound = document.getElementById("corrSound"); let corrSound2 = document.getElementById("corrSound2"); let wrongSound = document.getElementById("wrongSound"); let curWordIdx; let curCorrIdx; let isClicked = [false, false, false, false]; let wordIdx; let tmpWordIdx; let wordTxt; let corrDict; let corrIdx; let wrongIdx = []; let tmpWrongIdx; let cnt = 0; let corrCnt = 0; let wrongCnt = 0; let wrongs = []; let wrongsLen; let mistakenWordIdx; let mistakenWordMeaning; let mistakenWordMeaningLen; let mistakenWordMeaningTxt; let wrongsTxt; function randElem(arr) { return arr[Math.floor(Math.random() * arr.length)]; } function setQuiz() { scoreElemA.style.display = "block"; display.style.display = "table"; result.style.display = "none"; replay.style.display = "none"; playAnother.style.display = "none"; footer.style.display = "inline"; } function removeQuiz() { display.style.display = "none"; result.style.display = "block"; replay.style.display = "block"; playAnother.style.display = "block"; footer.style.display = "none"; } function quiz() { if (cnt == 20) { removeQuiz(); cnt = 0; wrongsLen = wrongs.length; if (wrongsLen == 0) { perfect.style.display = "block"; imperfect.style.display = "none"; scoreElemA.style.display = "none"; scoreElemB.style.display = "none"; body.style.animation = "gaming 2s linear infinite"; result.style.animation = "gaming 2s linear infinite"; perfect.style.animation = "gaming 2s linear infinite"; return [null, null]; } else { perfect.style.display = "none"; imperfect.style.display = "block"; scoreElemA.style.display = "none"; scoreElemB.style.display = "block"; corrCntElemB.innerText = corrCnt; wrongCntElemB.innerText = wrongCnt; wrongsTxt = ""; for (let i = 0; i < wrongsLen; ++i) { mistakenWordIdx = wrongs[i][0]; mistakenWordMeaning = target[mistakenWordIdx]["meaning"]; mistakenWordMeaningLen = mistakenWordMeaning.length; mistakenWordMeaningTxt = "'" + mistakenWordMeaning[0] + "'"; if (mistakenWordMeaningLen != 0) { for (let i = 1; i < mistakenWordMeaningLen; ++i) { if (i == mistakenWordMeaningLen - 1) { mistakenWordMeaningTxt += " or '" + mistakenWordMeaning[i] + "'"; } else { mistakenWordMeaningTxt += ", '" + mistakenWordMeaning[i] + "'"; } } } wrongsTxt += "'" + target[mistakenWordIdx]["word"] + "'" + " is " + mistakenWordMeaningTxt + ", not '" + wrongs[i][1] + "'.
" } imperfect.innerHTML = wrongsTxt.slice(0, -4); return [null, null]; } } else { setQuiz(); tmpWordIdx = Math.floor(Math.random() * targetLen); while (tmpWordIdx == wordIdx) { tmpWordIdx = Math.floor(Math.random() * targetLen); } wordIdx = tmpWordIdx; corrIdx = Math.floor(Math.random() * 4); console.log(corrIdx); for (let i = 0; i < 4; ++i) { if (i == corrIdx) continue; tmpWrongIdx = Math.floor(Math.random() * targetLen); while (wrongIdx.includes(tmpWrongIdx) || tmpWrongIdx == wordIdx) { tmpWrongIdx = Math.floor(Math.random() * targetLen); } wrongIdx.push(tmpWrongIdx); ans[i].innerText = randElem(target[tmpWrongIdx]["meaning"]); } wrongIdx = []; corrDict = target[wordIdx] wordTxt = corrDict["word"]; if (corrDict["gender_is_distinctive"]) wordTxt += " (" + corrDict["gender"] + ")"; word.innerText = wordTxt; pronunc.innerText = "[" + corrDict["pronunc"] + "]"; ans[corrIdx].innerText = randElem(corrDict["meaning"]); cnt++; return [wordIdx, corrIdx] } } function start() { [curWordIdx, curCorrIdx] = quiz(); startSound.currentTime = 0; startSound.play(); corrCnt = 0; wrongCnt = 0; wrongs = []; isClicked = [false, false, false, false]; corrCntElemA.innerText = 0; wrongCntElemA.innerText = 0; body.style.animation = ""; result.style.animation = ""; } start(); ans[0].addEventListener("click", () => { if (curCorrIdx == 0) { if (cnt == 20) { corrSound2.play(); } else { corrSound.currentTime = 0; corrSound.play(); } corrCnt++; corrCntElemA.innerText = corrCnt; [curWordIdx, curCorrIdx] = quiz(); isClicked = [false, false, false, false]; } else { wrongSound.currentTime = 0; wrongSound.play(); if (isClicked[0]) return; wrongCnt++; wrongCntElemA.innerText = wrongCnt; isClicked[0] = true; wrongs.push([curWordIdx, ans[0].textContent]); } }) ans[1].addEventListener("click", () => { if (curCorrIdx == 1) { if (cnt == 20) { corrSound2.play(); } else { corrSound.currentTime = 0; corrSound.play(); } corrCnt++; corrCntElemA.innerText = corrCnt; [curWordIdx, curCorrIdx] = quiz(); isClicked = [false, false, false, false]; } else { wrongSound.currentTime = 0; wrongSound.play(); if (isClicked[1]) return; wrongCnt++; wrongCntElemA.innerText = wrongCnt; isClicked[1] = true; wrongs.push([curWordIdx, ans[1].textContent]); } }) ans[2].addEventListener("click", () => { if (curCorrIdx == 2) { if (cnt == 20) { corrSound2.play(); } else { corrSound.currentTime = 0; corrSound.play(); } corrCnt++; corrCntElemA.innerText = corrCnt; [curWordIdx, curCorrIdx] = quiz(); isClicked = [false, false, false, false]; } else { wrongSound.currentTime = 0; wrongSound.play(); if (isClicked[2]) return; wrongCnt++; wrongCntElemA.innerText = wrongCnt; isClicked[2] = true; wrongs.push([curWordIdx, ans[2].textContent]); } }) ans[3].addEventListener("click", () => { if (curCorrIdx == 3) { if (cnt == 20) { corrSound2.play(); } else { corrSound.currentTime = 0; corrSound.play(); } corrCnt++; corrCntElemA.innerText = corrCnt; [curWordIdx, curCorrIdx] = quiz(); isClicked = [false, false, false, false]; } else { wrongSound.currentTime = 0; wrongSound.play(); if (isClicked[3]) return; wrongCnt++; wrongCntElemA.innerText = wrongCnt; isClicked[3] = true; wrongs.push([curWordIdx, ans[3].textContent]); } }) replay.addEventListener("click", start) clsChg.addEventListener("click", () => { if (wordClass == "noun") { wordClass = "verb"; clsChg.innerText = "V"; } else { wordClass = "noun"; clsChg.innerText = "N"; } target = words(wordClass); targetLen = target.length; console.log(targetLen); cnt = 0; start(); })