подсказка не распознает выигрышные условия в игре палача - PullRequest
0 голосов
/ 18 марта 2020

После долгих проб и ошибок я наконец-то почти завершил свой базовый c, только для приглашения, сольный проект Hangman, но я столкнулся с проблемой. Я установил условие, для которого у меня есть переменная, чтобы узнать, сколько правильных «попаданий» в слове, и если «совпадения» соответствуют длине слова, «ВЫ ВЫИГРЫВАЕТЕ!» должен быть отображен. Тем не менее, я не могу заставить программу сделать это. Я пробовал несколько разных способов сделать это, но подсказка «угадай письмо» все еще появляется, после того, как условия победы были выполнены. Моя подсказка "Game Over" работает просто отлично, что меня смущает.

`var secretWords = ["hang", "golf", "many", "barn", "math"];
 var chosenWord = secretWords[Math.floor(Math.random()*secretWords.length)];
 var guesses = 8;
 console.log(chosenWord);
 var letters = chosenWord.length;
 var counter = 0;
 var gameOver = guesses === 0;
 console.log(guesses);
 console.log(counter);


while(guesses !== 0){
const guess = prompt("GUESS A LETTER")
let guessLowerCase = guess.toLowerCase();
let isGuessedLetterInWord = chosenWord.includes(guessLowerCase);
if (isGuessedLetterInWord) {
  alert('nice'); counter ++;

 }  if(isGuessedLetterInWord == 0)  {
alert('wrong'); guesses --;



}
else if (isGuessedLetterInWord == null){
break;
}
}


while(guesses == 0){
 alert('GAME OVER'); break;
 }

counter += chosenWord.length;
while(counter == chosenWord.length){
alert("YOU WIN!!")
}` 

1 Ответ

0 голосов
/ 18 марта 2020

Вы должны поставить счетчик в конце блока while (guesses !== 0) { - если снаружи, он не будет частью игры l oop. Вы также не можете увеличить counter безоговорочно - некоторые слова имеют более 2 одинаковых букв, например, foo, и в этом случае вы хотите, чтобы предположение o заполняло оба o с, а не только один. В духе палача, предупредите заполненные письма пользователю, чтобы они могли увидеть, что им не хватает:

var secretWords = ["hang", "golf", "many", "barn", "math"];
var chosenWord = secretWords[Math.floor(Math.random() * secretWords.length)];
let printedWord = chosenWord.replace(/./g, '-');
var guesses = 8;
console.log(chosenWord);
while (true) {
  const guess = prompt(`Guess a letter, ${guesses} remaining`);
  if (!guess) break;
  const guessLowerCase = guess.toLowerCase();
  let found = false;
  for (let i = 0; i < chosenWord.length; i++) {
    if (chosenWord[i] === guessLowerCase) {
      printedWord = printedWord.slice(0, i) + guessLowerCase + printedWord.slice(i + 1);
      found = true;
    }
  }
  alert(printedWord);
  if (!printedWord.includes('-')) {
    alert('You Win');
    break;
  }
  if (!found) guesses--;
  if (guesses === 0) {
    alert('You Lose');
    break;
  }
}
...