You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript初学者求助:修复Hangman游戏重复猜字母的Bug

修复Hangman游戏中重复猜正确字母导致remainingLetters异常递减的Bug

你的问题出在循环更新answerArray和remainingLetters的逻辑里——现在只要猜中的字母和单词里的字符匹配,不管这个位置已经被填过(不是下划线),都会执行remainingLetters--,所以重复猜同一个正确字母时,这个数值会持续减少,破坏游戏的结束判断逻辑。

按照提示的思路,只需要在更新answerArray和递减remainingLetters之前,先判断对应位置的answerArray[j]是不是下划线(也就是这个位置还没被填对过),只有满足这个条件时才执行后续操作。

修改后的核心逻辑部分

else {
    for (var j = 0; j < word.length; j++) {
        // 新增判断:仅当该位置未被填充时才更新
        if (word[j] === guess && answerArray[j] === "_") {
            answerArray[j] = guess;
            remainingLetters--;
        }
    }
}

完整优化后的代码

<script>

// 设置最大尝试次数
var maximumTries = 10; 

// 单词数组
var words = [
    "quail",
    "chicken",
    "kookaburra",
    "parrot"
];

// 随机选择单词
var word = words[Math.floor(Math.random() * words.length)];

// 初始化答案数组
var answerArray = [];
for (var i = 0; i < word.length; i++) {
answerArray[i] = "_";
}
var remainingLetters = word.length;

// 存储所有已猜字母
var guessAll = "";

// 游戏循环
while (remainingLetters > 0 && guessAll.length < maximumTries) {
// 展示当前进度
alert(answerArray.join(" "));

// 获取玩家输入
var guess = prompt("Guess a letter, or click Cancel to stop playing.");
if (guess === null) {
    // 退出游戏
    break;
}
guessAll += guess;
guess = guess.toLowerCase();

if (guess.length !== 1) {
    alert("Please enter a single letter.");
} else {
    for (var j = 0; j < word.length; j++) {
        if (word[j] === guess && answerArray[j] === "_") {
            answerArray[j] = guess;
            remainingLetters--;
        }
    }
}
}
// 结束游戏,展示结果
alert(answerArray.join(" "));
if (remainingLetters === 0) {
    alert("Good job!  The answer was " + word);
} else {
    alert("Game over! The answer was " + word);
}

</script>

额外优化说明

  • 把while循环条件从remainingLetters >= 0改为remainingLetters > 0,因为当剩余字母数为0时,所有字母已猜中,游戏理应结束。
  • 调整了guess === null的判断顺序,避免将null存入guessAll导致尝试次数计数错误。

内容的提问来源于stack exchange,提问作者StarShining

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:45:07