今現在Javascriptを用いて、タイピングゲームらしきものを作ろうとしています。
1)重複を避けたランダム処理として、指定した配列から単語を引っ張ってくる。
2)打ち終わったら、自動で次の問題に移る。
3)すでに打ち込んだ文字は何らかの印をつける(ここでは便宜上@にしています)。
色々調べてspliceなどで配列を削れるかな、とか考えましたが、どうも上の3つがうまくいきません。
ただし、正しいボタンを押すと、ポイントは加算されているので、ボタンは認識されているはずです。アドバイスいただけると助かります。
HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Typing Game</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <p id="target">word</p> <p class="info"> あなたの点数: <span id="score">0</span> 間違えた回数: <span id="miss">0</span> </p> <script src="js/main.js"></script> </body> </html>
CSS
body { padding-top: 40px; font-family: 'Courier-new', sans-serif; text-align: center; } #target { font-size: 48px; letter-spacing: 3px; } .info { color: #ccc; }
JS
'use strict'; { const words = [ 'ball', 'trip', 'summer', 'orange', ]; let word; let loc = 0; let score = 0; let miss = 0; let i, j, temp; let question; const target = document.getElementById('target'); const scoreLabel = document.getElementById('score'); const missLabel = document.getElementById('miss'); function shuffle(arr){ i = words.length; // if(i === 0){ // return arr; // } while(i > 0){ j = Math.floor(Math.random() * i); i--; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } return arr; } word = shuffle(words); question = word[i]; target.textContent = question; // function updateTarget(){ let placeholder = ''; for( let s = 0; s < loc; s++){ placeholder += '@'; } target.textContent = placeholder + word.substring(loc); ///ここをどうしたらいいかわからなくなりました。 } window.addEventListener('keyup', e => { if (e.key === question[loc]) { loc++; if(loc === question.length){ word.splice(word.length -1, 1); target.textContent = word[i]; loc = 0; } score++; scoreLabel.textContent = score; // updateTarget(); } else { miss++; missLabel.textContent = miss; } }); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/18 16:51
2019/04/18 22:56
2019/04/19 13:43