javascript中的子手,当字母错误时总是返回true

时间:2018-08-27 07:05:26

标签: javascript

我有一个游戏子手。但是我试图做出这样的逻辑:如果用户输入了错误的字母,那么用户将收到一条消息,提示他/她必须再次尝试。

但是现在,即使用户选择了正确的字母,用户也会收到一条消息,提示他/她必须再次尝试输入。

这是代码:

<script>
  var words = [
    "ha",
    "pe",
    "jaa"
  ];

  var word = words[Math.floor(Math.random() * words.length)];
  var answareArray = [];
  for (var i = 0; i < word.length; i++) {
    answareArray[i] = "_";
  }
  var remainingLetters = word.length;

  while (remainingLetters > 0) {
    //gaming code
    alert(answareArray.join(" "));
    //Get a gues from the user:
    var guess = prompt("Guess a letter, or click cancel to stop");
    if (guess === null) {
      break;
    } else if (guess.length !== 1) {
      alert("Please enter a single letter");
    } else {
      for (var j = 0; j < word.length; j++) {

        if (word[j] !== guess) {
          debugger;
          alert("try again");
        }

        if (word[j] === guess) {
          if (answareArray[j] !== "_") {
            alert("Letter already be guessed");
            break;
          } else {
            answareArray[j] = guess;
            remainingLetters--;
          }
        }
      }
    }
  }

  alert(answareArray.join(" "));
  alert("Good Job the answare was: " + word);
</script>

在这一部分:

if (word[j] !== guess) {
  debugger;
  alert("try again");
}

我尝试将消息返回给用户。

那我该怎么纠正?

1 个答案:

答案 0 :(得分:2)

您必须在检查所有字母后显示警报,当前正在每次迭代中显示警报。

您可以使用标志(布尔变量)来实现。

这里是一个例子:

var goodGuess = false;
for (var j = 0; j < word.length; j++) {
    if (word[j] === guess) {

        goodGuess = true;

        if (answareArray[j] !== "_") {
            alert("Letter already be guessed");
            break;
        } else {

            answareArray[j] = guess;
            remainingLetters--;
        }
    }
}

if(!goodGuess){
    alert("try again");
}

这是先将goodGuess变量设置为false,然后遍历所有字母,如果用户的猜测与任何字母相等,则将goodGuess设置为true

在循环结束时(检查所有字母之后),如果goodGuessfalse,则显示警报。