我正在制作一个Hangman游戏。我正在使用indexOf()函数来检查字母是否在单词中。每个字母都有一个按钮,单击该按钮时会发生以下情况(此功能用于字母A):
function A(event) {
if (event.target.classList.contains("disabled")) {
event.preventDefault();
}
document.getElementById("A").style.opacity = "0.5";
event.target.classList.add("disabled");
score = score + 1;
document.getElementById("Score").innerHTML = score;
for (var letter = 0; letter <= randomWord.length; letter++) {
if (randomWord[letter].indexOf("a") !== -1) {
document.getElementById("letter_" + letter).innerHTML = "A";
} else {
mistakesLeft = mistakesLeft - 1;
document.getElementById("attempsLeft").innerHTML = mistakesLeft;
console.log(mistakesLeft);
if (mistakesLeft == 7) {
document.getElementById("part-1").style.display = "block";
} else if (mistakesLeft == 6) {
document.getElementById("part-2").style.display = "block";
} else if (mistakesLeft == 5) {
document.getElementById("part-3").style.display = "block";
} else if (mistakesLeft == 4) {
document.getElementById("part-4").style.display = "block";
} else if (mistakesLeft == 3) {
document.getElementById("part-5").style.display = "block";
} else if (mistakesLeft == 2) {
document.getElementById("part-6").style.display = "block";
} else if (mistakesLeft == 1) {
document.getElementById("part-7").style.display = "block";
} else {
document.getElementById("part-8").style.display = "block";
}
}
break;
}
}
出于某种原因,当我的随机单词中包含“A”并且它不是第一个字母时它不会打印到document.getElementById("letter_" + letter).innerHTML = "A";
中,而是继续进入else语句并认为没有这个词中的“A”。如果“A”是单词的第一个字母,它就会完成它的意图。我注意到问题可能是代码底部的中断(由于中断而无法到达下一个字母) - 我如何修复它以便循环继续经过第一个循环,直到它达到这个词没有减去错误的任何部分左派?
答案 0 :(得分:1)
应该是
for (var letter = 0; letter <= randomWord.length - 1; letter++) {
if (randomWord[letter] === 'a') {
...
您无需翻阅单词并同时使用indexOf
。函数indexOf为您搜索一封信。另请注意randomWord.length - 1
。
在这个问题的范围之外,我认为你不需要为所有字母都有一个单独的功能。创建一个通用函数,并在每次按钮单击时调用它,同时将相应的字母作为参数传递给它。
答案 1 :(得分:0)
而不是必须改变所有处理程序的逻辑,这是一个有点整理的版本
function letterClicked(event) {
var elem = event.target,
ch = elem.id,
reg = new RegEx(ch),
found = false;
if (elem.classList.contains("disabled")) {
return false; //you want to return early in this case
}
elem.style.opacity = "0.5";
elem.classList.add("disabled");
score = score + 1;
document.getElementById("Score").innerHTML = score;
if(!(match = reg.exec(randomWord)) {
mistakes++;
document.getElementById("part-" + mistakes).style.display = "block";
} else {
do {
document.getElementById("letter_" + match.index).innerHTML = ch;
}while (match = reg.exec(randomWord));
}
}