前提・実現したいこと
画像をヒントにして単語をタイピングしていくゲームを制作中です。
タイピングの正誤判定をして正しければ、次の問題に進むという形でゲームを
構成したいです。
発生している問題・エラーメッセージ
セットの画像と単語をオブジェクトに入れて定数quizSetとし、それぞれの要素を
HTMLから取得して画像と単語をJavascriptで表示し、
スタートボタンを押すと、問題(1問目)がランダムに表示され、
文字を正しくタイピングすると表示された文字が消えていくところまでは出来ました。
しかし、正解後に次の問題(2問目)に進まず、1問目がループしてしまいます。
該当のソースコード
JS
1'use strict'; 2 3{ 4 const question = document.getElementById('js-image'); 5 const target = document.getElementById('js-target'); 6 const quizSet = shuffle([ 7 {q: '../img/***.png', t:'***'}, //q:画像、t:単語 8 {q: '../img/***.png', t:'***'}, 9 {q: '../img/***.png', t:'***'}, 10 {q: '../img/***.png', t:'***'}, 11 {q: '../img/***.png', t:'***'}, 12 {q: '../img/***.png', t:'***'}, 13 ]); 14 15 let currentNum = 0; 16 let loc = 0; 17 let isPlaying = false; 18 let word = quizSet[currentNum].t; 19 let image = quizSet[currentNum].q; 20 21 function shuffle(arr) { 22 for (let i = arr.length - 1; i > 0; i--) { 23 const j = Math.floor(Math.random() * (i + 1)); 24 [arr[j], arr[i]] = [arr[i], arr[j]]; 25 } 26 return arr; 27 } 28 29 function setQuiz(){ 30 31 question.src = image; 32 target.textContent = word; 33 loc = 0; 34 35 } 36 37 document.addEventListener('click', ()=> { 38 if (isPlaying === true){ 39 return; 40 } 41 42 isPlaying = true; 43 setQuiz(); 44 }); 45 46 document.addEventListener('keydown', e => { 47 if (e.key !== word[loc]) { 48 return; 49 } 50 51 loc++; 52 target.textContent = ''.repeat(loc) + word.substring(loc); 53 54 if (loc === word.length){ 55 currentNum++; 56 setQuiz(); 57 } 58 }); 59 }
HTML
1<!DOCTYPE html> 2<html lang="ja"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <link rel="stylesheet" href="css/ress.css"> 7 <link rel="stylesheet" href="css/style.css"> 8 </head> 9 <body> 10 11 <img id="js-image"> 12 <p id="js-target">Click to Start!</p> 13 <p id="js-result"></p> 14 15 <script src="js/main.js"></script> 16 </body> 17</html>
試したこと
タイピングの文字(loc)が最後まで正しく打てれば(word.length)
配列[currentNum]を一つずつ増やしてsetQuiz()関数を呼べばいいのかなーと
思っていたのですが…色々自分でも調べてみたけど原因が分かりませんでした。
アドバイスいただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/26 23:31
2020/11/27 13:13
2020/11/27 14:20