触发一个";“赢”;在一个香草JavaScript刽子手游戏中

触发一个";“赢”;在一个香草JavaScript刽子手游戏中,javascript,function,random,return,counter,Javascript,Function,Random,Return,Counter,所以我已经问了一些关于这个刽子手游戏的问题(并且得到了非常棒的答案),但是我一直被我的“记分员”绊倒。游戏几乎做了我所需要的一切,但“胜利”将不会被记录,直到一个随机键被按下后,整个字已经填写完毕 <!DOCTYPE html> <html> <head> <title>Hangman</title> </head> <body> <h1>Hangman!</h1>

所以我已经问了一些关于这个刽子手游戏的问题(并且得到了非常棒的答案),但是我一直被我的“记分员”绊倒。游戏几乎做了我所需要的一切,但“胜利”将不会被记录,直到一个随机键被按下后,整个字已经填写完毕

<!DOCTYPE html>
<html>
<head>
    <title>Hangman</title>
</head>
<body>
    <h1>Hangman!</h1>

    <p>
        <font size="+3"><span id="answer"></span></font>
    </p>
    <p>Lives: <span id="counter"></span></p>
    <p id="wrongGuesses"></p>
    <p>Wins: <span id="wins"></span></p>
    <p>Losses: <span id="losses"></span></p>


    <script type="text/javascript">

var word;

var guess;      //user guess
var letters = [];       //correctly guessed letters
var wrongLetters = [];      //incorrectly guessed letters
var counter;        //counts correct letters
var losses = 0;
var wins = 0;


document.getElementById("losses").innerHTML = losses;
document.getElementById("wins").innerHTML = wins;

var wordList = ["cat", "dog", "wolf", "laser", "apple"];        //FILL LIST LATER!!


//randomly chooses a word from the array and replaces letters with underscores
function start() {
    word = wordList[Math.floor(Math.random() * wordList.length)];
    counter = 7;
    document.getElementById("counter").innerHTML = counter;
    for (i = 0; i < word.length; i++) {
        letters[i] = "__";
    }

    document.getElementById("answer").innerHTML = letters.join(" ");
    console.log(word);

}


//checks if letter is in the word or not
function checkLetter() {
    document.onkeyup = function(event) {
        guess = event.key.toLowerCase();
        //var found = false;
        for (i = 0; i < word.length; i++) {
            if (guess === word[i]) {
                letters[i] = guess;
                document.getElementById("answer").innerHTML = letters.join(" ");
                //found = true;
            } 
        }
        //wrong letters go into the wrongLetters array and are displayed
        //if (found) return;
        if (wrongLetters.indexOf(guess) < 0) {
            wrongLetters.push(guess);
            document.getElementById("wrongGuesses").innerHTML = wrongLetters.join(" ");
            //every wrong guess subtracts one from the counter
            counter--;
            console.log(counter);
            document.getElementById("counter").innerHTML = counter;
            //when counter reaches 0 it's Game Over
            //+1 to the losses if 7 words are missed

            if (counter > 0 && letters.join("") === word) {             //THE ISSUE
                document.getElementById("wins").innerHTML = wins + 1;
                console.log(wins);
                confirm("YOU WIN! Play Again?");
                    wins++;
                    counter = 7;
                    letters = [ ];
                    wrongLetters = [ ];
                start();
            }

            else if (counter === 0) {
                document.getElementById("losses").innerHTML = losses + 1;
                console.log(losses);
                confirm("YOU LOOSE... play again?"); {
                    losses++;
                    counter = 7;
                    letters = [];
                    wrongLetters = [];
                    start();
                }
            }
        }
    }
}


start();
checkLetter();

</script>
</body>
</html>

刽子手
刽子手!

生命:

胜利:

损失:

变异词; var猜测//用户猜测 var字母=[]//猜对的字母 var错误字母=[]//猜错的字母 var计数器//计算正确的字母 风险价值损失=0; var=0; document.getElementById(“损失”).innerHTML=损失; document.getElementById(“wins”).innerHTML=wins; var wordList=[“猫”、“狗”、“狼”、“激光”、“苹果”]//请稍后填写清单!! //从数组中随机选择一个单词,并用下划线替换字母 函数start(){ word=wordList[Math.floor(Math.random()*wordList.length)]; 计数器=7; document.getElementById(“计数器”).innerHTML=计数器; for(i=0;i0&&letters.join(“”===word){//问题 document.getElementById(“wins”).innerHTML=wins+1; 控制台日志(wins); 确认(“你赢了!又玩了?”); wins++; 计数器=7; 字母=[]; 错误字母=[]; start(); } else if(计数器===0){ document.getElementById(“损失”).innerHTML=损失+1; 控制台日志(损失); 确认(“你松开了……又玩了?”){ 损失++; 计数器=7; 字母=[]; 错误字母=[]; start(); } } } } } start(); 方格字母();
这是我到目前为止所拥有的,这是一个JSFIDLE链接:
我知道主要的问题是找到了布尔和返回,但我似乎找不到一个办法来解决它。如果有人对此有任何见解,我将不胜感激,并提前向我已经为此烦恼的任何人道歉。谢谢

如果找到了字母,即使它是一个完整的单词匹配,也会返回,因此只需在条件中检查它

//wrong letters go into the wrongLetters array and are displayed
if (found && letters.join("") !== word) return;

谢谢你的建议!当我这样做时,几乎有相反的影响。。。当你猜到最后一个字母时,它会直接进入“赢”警报,而不显示该字母。这绝对是我最接近于正常工作的一次,但如果我能在获胜阶段之前/期间显示最后一个字母,那就太棒了。@michael wolfe啊,我在这里做了一些更改:DOM在成功消息显示之前没有时间更新。如果你输了,可能也是同样的问题。哇,看起来和功能都很棒!谢谢你的帮助!