首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pure JS hangman中防止重复字母输入的问题

在pure JS hangman中防止重复字母输入的问题
EN

Stack Overflow用户
提问于 2020-01-15 07:50:43
回答 1查看 200关注 0票数 1

因此,我正在编写一个绞刑者风格的游戏,这是学习如何使用JS时的习惯。我让它工作得很好,但我似乎找不出如何正确地识别和防止重复的错误猜测。例如:如果您按"f“,但它不在单词中,则显示并递减一次剩余分数,如果您再次按"f”,则忽略输入。到目前为止,这是我的代码。我在函数中有我现有的代码,但它目前没有做任何事情。任何建议都是值得感谢的。

代码语言:javascript
复制
 // words to guess will be selected from here
var wordSelectionArray = [
    "adventure", "bandit", "battleaxe", "battlefield", "beholder", "bugbear", "castle", "catapult", "cleric", "dragon", "dungeon",
    "fairy", "fireball", "giant", "goblin", "knight", "magic", "monster", "necromancer", "owlbear", "paladin", "potion", "quarterstaff",
    "sorcerer", "spells", "sword", "vampire", "warlock", "wizard", "zombie"]
    //variable to hold the randomly selected word
    var selectedWord = "";
    //variable to store number of blanks
    var blanks = 0;
    //var to hold the split out array of the randomly selected word. 
    var letters = [];
    //var to store blanks with the correct word
    var blankAndCorrect = [];
    //var to hold the incorrect letter guesses when input by the user.
    var wrongGuess = [];
    // start the game with a score of zero
    var wins = 0;
    var losses = 0;
    //variable to hold number of guesses remaining
    var guessesRemaining = 12;
    //array for guessed letters
    var alreadyGuessedLetters = [];
    //variable to hold the background music
    var myMusic = document.getElementById("background-music");

function game() {
    selectedWord = wordSelectionArray[Math.floor(Math.random() * wordSelectionArray.length)];
    letters = selectedWord.split("");
    blanks = selectedWord.length;
    for (var i = 0; i < blanks; i++) {
        blankAndCorrect.push("_");
    } 
    document.getElementById("current-word").innerHTML = " " + blankAndCorrect.join("  ");
    myMusic.play();
    // console.log(selectedWord);
    // console.log(letters);
    // console.log(blanks);
    // console.log(blankAndCorrect);
};

//function to start the game over
function reset() {
    guessesRemaining = 12;
    wrongGuess = [];
    blankAndCorrect = [];
    game();
};

//check and compare function
function checkInput(letter) {
    letterInWord = false;
    for (var i = 0; i < blanks; i++) {
        if (selectedWord[i] == letter) {
            letterInWord = true;
        }
    } if (letterInWord) {
        for (var i = 0; i < blanks; i++) {
            if (selectedWord[i] == letter) {
                blankAndCorrect[i] = letter;
            }
        }
    } if (letterInWord) {
        for (var i = 0; i < alreadyGuessedLetters.length; i++) {
            if (selectedWord[i] !== letter) {
                alreadyGuessedLetters[i] = letter;
                return;
            }
        }
    } else {
        wrongGuess.push(letter);
        alreadyGuessedLetters.push(letter);
        guessesRemaining--;
        console.log(alreadyGuessedLetters);
    }
};

//function to check wins/losses
function completeGame () {
    if (letters.toString() == blankAndCorrect.toString()) {
        wins++;
        document.getElementById("correct-answer-message").innerHTML = "Great Job! " + selectedWord.toLocaleUpperCase() + "  was the word!" ;
        reset();
        document.getElementById("wins").innerHTML = " " + wins;
    } else if (guessesRemaining === 0) {
        losses++;
        reset();
        document.getElementById("losses").innerHTML = " " + losses;
    }
    document.getElementById("current-word").innerHTML = " " + blankAndCorrect.join(" ");
    document.getElementById("guesses-remaining").innerHTML = " " + guessesRemaining;
};

game();

document.onkeyup = function (event) {
    var guesses = String.fromCharCode(event.keyCode).toLowerCase();
    checkInput(guesses);
    completeGame();
    // console.log(guesses);
    document.getElementById("letters-guessed").innerHTML = " " + wrongGuess.join(" ");
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-15 08:07:34

看看我是如何忽略checkInput中的重复项的。

代码语言:javascript
复制
// words to guess will be selected from here
var wordSelectionArray = [
    "adventure", "bandit", "battleaxe", "battlefield", "beholder", "bugbear", "castle", "catapult", "cleric", "dragon", "dungeon",
    "fairy", "fireball", "giant", "goblin", "knight", "magic", "monster", "necromancer", "owlbear", "paladin", "potion", "quarterstaff",
    "sorcerer", "spells", "sword", "vampire", "warlock", "wizard", "zombie"]
    //variable to hold the randomly selected word
    var selectedWord = "";
    //variable to store number of blanks
    var blanks = 0;
    //var to hold the split out array of the randomly selected word. 
    var letters = [];
    //var to store blanks with the correct word
    var blankAndCorrect = [];
    //var to hold the incorrect letter guesses when input by the user.
    var wrongGuess = [];
    // start the game with a score of zero
    var wins = 0;
    var losses = 0;
    //variable to hold number of guesses remaining
    var guessesRemaining = 12;
    //array for guessed letters
    var alreadyGuessedLetters = [];
    //variable to hold the background music
    var myMusic = document.getElementById("background-music");

function game() {
    selectedWord = wordSelectionArray[Math.floor(Math.random() * wordSelectionArray.length)];
    letters = selectedWord.split("");
    blanks = selectedWord.length;
    for (var i = 0; i < blanks; i++) {
        blankAndCorrect.push("_");
    } 
    document.getElementById("current-word").innerHTML = " " + blankAndCorrect.join("  ");
    // myMusic.play();
    // console.log(selectedWord);
    // console.log(letters);
    // console.log(blanks);
    // console.log(blankAndCorrect);
};

//function to start the game over
function reset() {
    guessesRemaining = 12;
    wrongGuess = [];
    blankAndCorrect = [];
    game();
};

//check and compare function
function checkInput(letter) {
    if (wrongGuess.includes(letter)) { // <--- HERE
      // do anything else you wanna do
      return;
    }
    letterInWord = false;
    for (var i = 0; i < blanks; i++) {
        if (selectedWord[i] == letter) {
            letterInWord = true;
        }
    } if (letterInWord) {
        for (var i = 0; i < blanks; i++) {
            if (selectedWord[i] == letter) {
                blankAndCorrect[i] = letter;
            }
        }
    } if (letterInWord) {
        for (var i = 0; i < alreadyGuessedLetters.length; i++) {
            if (selectedWord[i] !== letter) {
                alreadyGuessedLetters[i] = letter;
                return;
            }
        }
    } else {
        wrongGuess.push(letter);
        alreadyGuessedLetters.push(letter);
        guessesRemaining--;
        console.log(alreadyGuessedLetters);
    }
};

//function to check wins/losses
function completeGame () {
    if (letters.toString() == blankAndCorrect.toString()) {
        wins++;
        document.getElementById("correct-answer-message").innerHTML = "Great Job! " + selectedWord.toLocaleUpperCase() + "  was the word!" ;
        reset();
        document.getElementById("wins").innerHTML = " " + wins;
    } else if (guessesRemaining === 0) {
        losses++;
        reset();
        document.getElementById("losses").innerHTML = " " + losses;
    }
    document.getElementById("current-word").innerHTML = " " + blankAndCorrect.join(" ");
    document.getElementById("guesses-remaining").innerHTML = " " + guessesRemaining;
};

game();

document.onkeyup = function (event) {
    var guesses = String.fromCharCode(event.keyCode).toLowerCase();
    checkInput(guesses);
    completeGame();
    // console.log(guesses);
    document.getElementById("letters-guessed").innerHTML = " " + wrongGuess.join(" ");
}
代码语言:javascript
复制
<div id="current-word"></div>
<div id="guesses-remaining"></div>
<div id="letters-guessed"></div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59743403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档