Nuevo en programación y todavía aprendiendo lo básico. Estoy tratando de evitar que un jugador envíe spam con una sola letra correcta para aumentar la puntuación. Puse un límite en el puntaje que no puede aumentar más allá de 5, ya que es una palabra de 5 letras, pero actualmente estoy perplejo, posiblemente debido a la falta de café.
Aquí está mi código en un violín, gracias de antemano. https://jsfiddle.net/JerryCoin/ngtbrd1c/1/
function checkLetter() { document.onkeyup = function (event) { guess = event.key.toLowerCase(); let found = false; for (i = 0; i < word.length; i++) { if (guess === word[i] && score < 5) { correctLetters[i] = guess; scoreBox.innerHTML = score += 1; letterSpace(); return; } } if (found) return; if (wrongLetters.indexOf(guess) < 0 && attempts > 0) { wrongLetters.push(guess); document.getElementById("used-letters-box").innerHTML = wrongLetters.join(''); attemptsBox.innerHTML = attempts -= 1; } if (attempts == 0 && score < 5) { loseGame(); } };}
La respuesta a esto depende de un par de cosas: por lo que puedo discernir, las letras correctas parecen ser una matriz de igual longitud que la cantidad de caracteres en la palabra. Suponiendo que su matriz de letras correctas se instancia con correctLetters = Array(word.length) , entonces los elementos de su matriz no están definidos hasta que la función de letra de verificación establezca letras correctas [i]. Como tal, podría agregar otra verificación en su ciclo for if (guess === word[i] && score < 5 && correctLetters[i] === undefined) //If the letter hasn't been guessed, it will be undefined
Otra estrategia que podría usar sería tener una nueva matriz de conjeturas correctas e insertar conjeturas correctas como lo hace con las conjeturas incorrectas.
const correctGuesses = []; ... if (guess === word[i] && score < 5 && !correctGuesses.includes(guess) { correctLetters[i] = guess; correctGuesses.push(guess); scoreBox.innerHTML = score += 1; letterSpace(); return; }