【问题标题】:Sorting guesses in JavaScript Hangman Game在 JavaScript Hangman Game 中对猜测进行排序
【发布时间】:2017-09-08 22:46:47
【问题描述】:

我正在为一个项目开发一个刽子手类型的游戏,并且在将错误猜测并将它们放入“错误字母”银行时遇到很多麻烦,不允许再次猜测它们。

var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
var guess; //user guess
var letters = []; //correctly guessed letters
var wrongLetters = []; //incorrectly guessed letters
var counter = 0; //counts correct letters
var lives; //counts users lives

var wordList = ["cat", "dog", "wolf", "laser", "carrol"]; //FILL LIST LATER!!

//randomly chooses a word from wordList
var word = wordList[Math.floor(Math.random() * wordList.length)];

//choosen word is replaced with
function start() {
  for (i = 0; i < word.length; i++) {
    letters[i] = "__";
  }

  document.getElementById("answer").innerHTML = letters.join(" ");
  console.log(word);
}

function checkLetter() {
  document.onkeyup = function(event) {
    guess = event.key.toLowerCase();
    for (i = 0; i < word.length; i++) {
      if (guess === word[i]) {
        letters[i] = guess;
        document.getElementById("answer").innerHTML = letters.join(" ");
      }
    }
  }
}

start();
checkLetter();
<h1>Hangman!</h1>

<p>
  <font size="+3"><span id="answer"></span></font>
</p>
<p id="counter"></p>
<p id="wrongGuesses"></p>

这是我目前所拥有的。它基本上从数组中选择一个随机单词并在字母的位置显示下划线。如果您猜对了一个字母,下划线将被替换。正如我之前所说,我现在需要它来跟踪我的错误猜测。我知道这很模糊,但任何帮助将不胜感激!

【问题讨论】:

  • 如果您有if (quess === word[i]) { } 块,请按回车键退出该功能,因为您现在有正确答案。现在在for loop 的末尾,如果您发现有一个不正确的字母,您现在可以将其添加到您的列表中。

标签: javascript arrays


【解决方案1】:

这是您的代码段,经过修改以捕捉错误的猜测。

我已将 cmets 添加到代码中,因为我已更改。

var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
var guess; //user guess
var letters = []; //correctly guessed letters
var wrongLetters = []; //incorrectly guessed letters
var counter = 0; //counts correct letters
var lives; //counts users lives

var wordList = ["cat", "dog", "wolf", "laser", "carrol"]; //FILL LIST LATER!!

//randomly chooses a word from wordList
var word = wordList[Math.floor(Math.random() * wordList.length)];

//choosen word is replaced with
function start() {
  for (i = 0; i < word.length; i++) {
    letters[i] = "__";
  }

  document.getElementById("answer").innerHTML = letters.join(" ");
  console.log(word);
}

function checkLetter() {
  document.onkeyup = function(event) {
    guess = event.key.toLowerCase();
    var found = false; //lets use bool to check if a letter was found
    for (i = 0; i < word.length; i++) {
      if (guess === word[i]) {
        letters[i] = guess;
        document.getElementById("answer").innerHTML = letters.join(" ");
        found = true;
      }
    }
    //now all letters have been checked, was any found
    if (found) return; //if yes return
    
    //wrong, lets also see if 
    //it's not already logged, if not add it
    //you could also then use  wrongLetters.length
    //for working out if gueses area all used up.
    if (wrongLetters.indexOf(guess) < 0) {
      wrongLetters.push(guess);
      document.getElementById("wrongGuesses").innerHTML = wrongLetters.join(" ");
    }
  }
}

start();
checkLetter();
<h1>Hangman!</h1>

<p>
  <font size="+3"><span id="answer"></span></font>
</p>
<p id="counter"></p>
<p id="wrongGuesses"></p>

【讨论】:

  • 非常感谢,这正是我所需要的!但是,现在如果单词中有相同字母的重复,则只显示第一个。有什么办法可以在不进行大修的情况下解决这个问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 2021-12-14
  • 2019-07-17
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
相关资源
最近更新 更多