Игра "Виселица" работает некорректно

Код почему-то принимает любой введенный символ за неверный и после этого программа закрывается.

<script>

    var words = [ "машина" ];
    var word = words[Math.floor(Math.random() * words.length)];
    var answerArray = [];
    var remainingLetters = word.length;
    var remainingTries = word.length;

    for (var i = 0; i < word.length; i++) {
        answerArray[i] = "_";
    }

// Игровой цикл

    while (remainingLetters > 0 && remainingTries > 0) {
        alert(answerArray.join(" "));

        var guess = prompt ("Угадайте букву, или нажмите Отмена для выхода из игры.");

        for (var j = 0; j < word.length; j++) {

            if (guess == guess.toUpperCase()) { 
                guess = guess.toLowerCase(); 
            }
            if (word[j] === guess) {
                answerArray[j] = guess.toLowerCase();
                remainingSymbols--;
            } 
            else if (guess == guess.toUpperCase()) { 
                guess = guess.toLowerCase(); 
            } 
            else if (guess === null) {
                break;
            }
            else if (guess !== word[j]) {
                alert ("Неверная буква");
                remainingTries--;
            }
            else if (guess.length !== 1) {
                alert("Пожалуйста, введите одиночную букву.");
            } 

        } // Конец цикла for

    } // Конец игрового цикла 

// Отображаем ответ и поздравляем игрока

    if (remainingLetters === 0) {
        alert(answerArray.join(" "));
        alert("Отлично! Было загадано слово " + "'" + word + "'");
    } else if (remainingTries === 0) {
        alert ("Ой, вы не отгадали слово " + "'" + word + "'")
    }

</script>


Ответы (1 шт):

Автор решения: Aziz Umarov

Вот так попробуйте

            var words = [ "машина" ];
            var word = words[Math.floor(Math.random() * words.length)];
            var answerArray = [];
            var remainingLetters = word.length;
            var remainingTries = word.length;

            for (var i = 0; i < word.length; i++) {
                answerArray[i] = "_";
            }

        // Игровой цикл

            while (remainingLetters > 0 && remainingTries > 0) {
                alert(answerArray.join(" "));

                var guess = prompt ("Угадайте букву, или нажмите Отмена для выхода из игры.");
                
                if (guess  != null && guess.length !== 1) {
                  alert("Пожалуйста, введите одиночную букву.");
                } else if (guess === null) {
                  break;
                } else {
                  let isMatch = false;
                  let isAlredyExist = false;
                  for (var j = 0; j < word.length; j++) {

                    if (word[j] === guess || word[j] === guess.toUpperCase() || word[j] === guess.toLowerCase() ) {
                        if (answerArray[j] !== "_") {
                           isAlredyExist = true; 
                        }
                        answerArray[j] = guess.toLowerCase();
                        isMatch = true;
                        remainingTries--;
                    }                        

                  } // Конец цикла for
                  
                  if (!isMatch) {                    
                        alert ("Неверная буква");
                        remainingTries--;
                  } else if (isAlredyExist) {
                        alert ("Буква уже была угадана"); 
                  }
                  
                }

            } // Конец игрового цикла 

        // Отображаем ответ и поздравляем игрока
        
        if (remainingLetters === 0) {
             alert(answerArray.join(" "));
             alert("Отлично! Было загадано слово " + "'" + word + "'");
        } else if (remainingTries === 0) {
          alert ("Ой, вы не отгадали слово " + "'" + word + "'");
        }
          

→ Ссылка