【问题标题】:Javascript Hangman Game only populating first occurrence of a repeated letter in wordJavascript Hangman Game 仅填充单词中第一次出现的重复字母
【发布时间】:2021-04-05 12:51:07
【问题描述】:

我对编程还很陌生,并且被分配了基于 Javascript 的 Hangman 游戏。到目前为止,我的游戏运行良好,但是当被猜出的单词有一个不止一次出现的字母时,我遇到了问题。例如,如果单词是 APPLE 并且我输入“P”,程序会返回 _ P _ _ _,而我应该得到 _ P P _ _。我已经尝试深入寻找答案,但到目前为止找不到任何我可以实施的东西。非常感谢任何帮助!

    // Player chooses word for other player to guess
    let word = prompt('Welcome to Hangman! Player 1, please enter a word for Player 2 to guess.').toUpperCase();
    console.log(word);
    
    let underScore = [];
    let rightWord = [];
    let wrongWord = [];
    
    let dUS = document.getElementsByClassName('underscore');
    let dRG = document.getElementsByClassName('rightGuess');
    let dWG = document.getElementsByClassName('wrongGuess');
    
    // ***
    lettersInWord = word.split('');
    // ***
    
    const maxStrikes = 6; // max number of allowed mistakes
    let strikes = 0; // number of incorrect guesses so far
    
    // Create underscores for length of word
    function createUnderscore() {
        for (let i = 0; i < word.length; i++) {
            underScore.push('_');
        }
        return underScore;
    }
    console.log(createUnderscore());
    
    dUS[0].innerHTML = underScore.join(' '); //Displays underscores in DOM
    document.getElementById('sub-btn').addEventListener('click', processGuess);
    
    // Sets initial image
    if (strikes == 0) {
        document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-0.png"
    }
    
    function processGuess(e) {
        e.preventDefault();
        let guess = document.getElementById('usr-input').value.toUpperCase();
        console.log(word.indexOf(guess));

        // If user guess is correct, 
        if (word.indexOf(guess) > -1) {
            for (var i = 0; i < word.length; i++) {
                if (word[i] === guess) {
                    rightWord.push(guess); // Adds guessed letter to rightWord Array
                    underScore[word.indexOf(guess)] = guess; // Adds correct letter?
                    dUS[0].innerHTML = underScore.join(' '); // Replaces underscore with correcct letter
                    dRG[0].innerHTML = rightWord.join(', '); // Adds correct letter to Right Guesses box
                }
            }

            // Check to see if user word matches guesses
            if (underScore.join('') == word) {
               alert('You win! The word was: ' + word);
            }
        } else {
            // Add to wrongWord array
            wrongWord.push(guess);
            console.log(wrongWord);

            dWG[0].innerHTML = wrongWord.join(', ');
            strikes++;
            console.log('Number of Strikes: ' + strikes);
        
            // Sets correct image according to number of strikes
            if (strikes == 0) {
                document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-0.png"
            } else if (strikes == 1) {
                document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-1.png"
            } else if (strikes == 2) {
                document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-2.png"
            } else if (strikes == 3) {
                document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-3.png"
            } else if (strikes == 4) {
                document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-4.png"
            } else if (strikes == 5) {
                document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-5.png"
            } else if (strikes == 6) {
                document.getElementById('pics').src = "../Project 3 - Hangman/images/strike-6.png"
            }
              
            if (strikes == maxStrikes) {
                alert('You lose. The correct word was: ' + word);
            }
        }
    }
    
    console.log(strikes);

【问题讨论】:

    标签: javascript


    【解决方案1】:

    问题出在这一行:

    underScore[word.indexOf(guess)] = guess;
    

    虽然您有一个遍历所有字符的循环,并且您有找到匹配项的索引 i,但实际上您再次搜索具有 indexOffirst 索引。因此,您将一遍又一遍地将guess 放在同一个位置。

    而只是这样做:

    underScore[i] = guess;
    

    【讨论】:

    • 你是救生员!盯着这个看了好几个小时。成功了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    相关资源
    最近更新 更多