HangMan Game-Replacing blanks w / Letters

时间:2017-04-29 21:33:45

标签: javascript

目前,我一直试图解决我在Hangman JS游戏中遇到的问题。我花了最后一周试图替换"下划线",我作为当前秘密词的占位符。我的想法是循环遍历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;    
    }
}

我的JS的片段在下面,它可能很大但是所有这些都是必要的。如果您希望查看整个代码,则链接为CodePen Link

&#13;
&#13;
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() {   }
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

查看该单词是否已完全猜到并创建具有相同信息的部分猜测的显示的一种解决方案是保留Set与尚未猜到的字母,在游戏开始时初始化unGuessed = new Set(secretWord); 由于Set&#39; delete方法如果实际删除了字母(并且因此存在),则返回true,因此可以将其用作检查是否输入了正确的字母。

随后,可以在一个地方(启动时和猜测后)改变显示,通过映射单词的字母并检查字母是否已被猜到:

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

一些模型代码:

&#13;
&#13;
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
&#13;
<div id=currentGuess></div>
<input id=guessLetter><span id=letter></span>
<div id='status'></div>
&#13;
&#13;
&#13;