简体   繁体   English

Hangman游戏替换字母的空白

[英]HangMan Game-Replacing blanks w/ Letters

At this current moment I've been trying to work through an issue I've had with my Hangman JS game. 目前,我一直在尝试解决我的Hangman JS游戏遇到的问题。 I've spent the last week attempting to replace "underscores", which I have as placeholders for the current secret word. 我花了上周的时间尝试替换“下划线”,我将其作为当前秘密字词的占位符。 My idea was to loop through the correctLettersOUT, and wherever that particular letter exists in the placeholder would replace it with said letter. 我的想法是遍历正确的LettersOUT,并且在占位符中存在的任何特定字母都将替换为所述字母。 This small part of my code below is where the issue is I believe, but I have also created a function in my whole code if a new function necessary. 我认为下面是我的代码的一小部分,但我仍然在整个代码中创建了一个函数(如果需要一个新函数)。

Any advice is appreciated. 任何建议表示赞赏。

function startGame() {
    var testWord = document.getElementById("randTest").innerHTML = secretWord;
    var correctLettersOUT = "";
    document.getElementById("currentGuess").innerHTML = secretBlanks(secretWord)

    function secretBlanks(secretWord) {
        for (var i = 0; i < secretWord.length; i++) {
            correctLettersOUT += ("_ ");
        }
        return correctLettersOUT;    
    }
}

The snippet of my JS is below, it may be large but all of it is necessary. 我的JS的代码段如下,它可能很大,但所有这些都是必要的。 If you wish to view the whole code in it's entirety, the link is CodePen Link . 如果您希望完整地查看整个代码,则链接为CodePen Link

 var guessWords = ["school", "test", "quiz", "pencil", "ruler", "protractor", "teacher", "homework", "science", "math", "english", "history", "language", "elective", "bully", "grades", "recess", ]; var secretWord = guessWords[Math.floor(Math.random() * guessWords.length)]; var wrongLetters = []; var correctLetters = []; var repeatLetters = []; var guesses = Math.round((secretWord.length) + (.5 * secretWord.length)); var correctLettersOUT = ""; function startGame() { var testWord = document.getElementById("randTest").innerHTML = secretWord; var correctLettersOUT = ""; document.getElementById("currentGuess").innerHTML = secretBlanks(secretWord) function secretBlanks(secretWord) { for (var i = 0; i < secretWord.length; i++) { correctLettersOUT += ("_ "); } return correctLettersOUT; } } function correctWord() { var guessLetter = document.getElementById("guessLetter").value; document.getElementById("letter").innerHTML = guessLetter; for (var i = 0; i < secretWord.length; i++) { if (correctLetters.indexOf(guessLetter) === -1) { if (guessLetter === secretWord[i]) { console.log(guessLetter === secretWord[i]); correctLettersOUT[i] = guessLetter; correctLetters.push(guessLetter); break; }} } if (wrongLetters.indexOf(guessLetter) === -1 && correctLetters.indexOf(guessLetter) === -1) { wrongLetters.push(guessLetter); } console.log(correctLetters); //Used to see if the letters were added to the correct array** console.log(wrongLetters); wordGuess(); } function wordGuess() { if (guessLetter.value === '') { alert("You didn't guess anything."); } else if (guesses > 1) { // Counts down. guesses--; console.log('Guesses Left: ' + guesses); // Resets the input to a blank value. let guessLetter = document.getElementById('guessLetter'); guessLetter.value = ''; } else { console.log('Game Over'); } //console.log(guesses) } function replWord() { } 

One solution to see if the word has been guessed completely and create the partially guessed display with the same info, is to keep a Set with the not yet guessed letters, initialized at game start unGuessed = new Set(secretWord); 判断单词是否已被完全猜中并创建具有相同信息的部分猜想的显示的一种解决方案是保留一个尚未猜中的字母的Set ,在游戏开始时unGuessed = new Set(secretWord);初始化为unGuessed = new Set(secretWord); Since the Set 's delete method returns true if the letter was actually removed (and thus existed), it can be used as a check if a correct letter was entered. 由于Setdelete方法在字母实际被删除(并因此存在)的情况下返回true,因此可以用作检查输入的字母是否正确的方法。

Subsequently, the display can be altered in a single place (on startup and after guessing), by mapping the letters of the word and checking if the letter is already guessed: 随后,可以通过映射单词的字母并检查是否已经猜到字母,在一个地方(启动时和猜测之后)在一个位置进行更改:

function alterDisplay(){
    document.getElementById("currentGuess").innerHTML = 
        [...secretWord].map(c=>unGuessed.has(c) ? '_' : c).join(' ');    
}

Some mockup code: 一些样机代码:

 let guessWords = ["school", "test", "quiz", "pencil", "ruler", "protractor", "teacher", "homework", "science", "math", "english", "history", "language", "elective", "bully", "grades", "recess", ], secretWord, unGuessed, guesses; function startGame() { secretWord = guessWords[Math.floor(Math.random() * guessWords.length)]; guesses = Math.round(1.5 * secretWord.length); unGuessed = new Set(secretWord); setStatus(''); alterDisplay(); } function alterDisplay(){ document.getElementById("currentGuess").innerHTML = [...secretWord].map(c=>unGuessed.has(c) ? '_' : c).join(' '); } function setStatus(txt){ document.getElementById("status").innerHTML = txt; } function correctWord() { let c= guessLetter.value[0]; guessLetter.value = ''; if (!c) { setStatus("You didn't guess anything."); } else if(unGuessed.delete(c)){ alterDisplay(); if(!unGuessed.size) //if there are no unguessed letters left: the word is complete setStatus('Yep, you guessed it'); } else if(--guesses < 1){ setStatus('Game Over!'); } else setStatus('Guesses Left: ' + guesses); } startGame(); let gl = document.getElementById("guessLetter"); gl.onkeyup= correctWord; //for testing: bind to keyup gl.value = secretWord[1];correctWord(); //for testing: try the 2nd letter on startup 
 <div id=currentGuess></div> <input id=guessLetter><span id=letter></span> <div id='status'></div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM