Игра Палач не будет печатать одно и то же письмо

1

У меня вопрос о моей игре. Кажется, я могу получить только одно письмо, чтобы напечатать вместо него то, что есть в одном слове. Например, "звездные войны" выглядят как "звезда".

//array of Star Wars Names
var words = ["star wars",
  "senator organa",
  "boba fett",
  "chewbacca",
  "luke skywalker",
  "darth vader",
  "lando calrissian",
  "anakin skywalker",
  "padme amidala"
];

//Declared variables
var rightLetter = [];
var wrongLetter = [];
var underScore = [];
var underScore = [];
var randomWords = Math.floor(Math.random() * words.length);
var chosenWords = words[randomWords];
var starWarsNames = document.getElementsByClassName("Star_Wars_words");
var correctGuess = document.getElementsByClassName("rightGuess");
var incorrectGuess = document.getElementsByClassName("wrongGuess");

//random word array

console.log(chosenWords);

function generateUnderscore() {
  for (i = 0; i < chosenWords.length; i++) {
    underScore.push("_");
  }
  return underScore;
}

//Game Loop
document.addEventListener("keypress", letterPressed);
//letter function
function letterPressed(event) {
  var letter = String.fromCharCode(event.keyCode);
  if (chosenWords.indexOf(letter) > -1) {
    rightLetter.push(letter);
    underScore[chosenWords.indexOf(letter)] = letter;
    starWarsNames[0].innerHTML = underScore.join(" ");
    correctGuess[0].innerHTML = rightLetter;
    if (underScore.join(" ") == chosenWords) {
      alert("The force is strong with you!");
    }
  } else {
    wrongLetter.push(letter);
    incorrectGuess[0].innerHTML = wrongLetter;
  }
}

console.log(rightLetter);
console.log(wrongLetter);
console.log(starWarsNames);
<div class="Star_Wars_words">

</div>
<div class="rightGuess">

</div>
<div class="wrongGuess">

</div>
  • 0
    Я могу получить только одну букву для печати ... Например, "звездные войны" выглядят как "звездные войны" , это явно больше, чем одна буква? Так о чем ты говоришь?
  • 1
    @MattBurland Он спрашивает: «Кажется, моя последняя строка принимает только первое вхождение определенной буквы и игнорирует последующие»
Показать ещё 5 комментариев
Теги:

1 ответ

2
Лучший ответ

В вашей функции letterPressed вы можете реорганизовать его для проверки нескольких экземпляров. Например:

var idx = 0;
idx = chosenWords.indexOf(letter, idx);
if (idx == -1) {
    wrongLetter.push(letter);
    incorrectGuess[0].innerHTML = wrongLetter;
    return;
}
while (idx > -1) {
    rightLetter.push(letter);
    underScore[idx] = letter;
    starWarsNames[0].innerHTML = underScore.join(" ");
    correctGuess[0].innerHTML = rightLetter;
    if(underScore.join(" ") == chosenWords) {
        alert("The force is strong with you!");
    }
    idx = chosenWords.indexOf(letter, ++idx);
}

Поэтому разница в том, что если письмо найдено (idx > -1), вы будете обрабатывать его так, как раньше, но затем вы обновите idx следующим индексом буквы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню