Почему моя функция не работает без ошибок? - PullRequest
1 голос
/ 21 октября 2019

Я следую учебному пособию по Javascript, в котором я должен увидеть игру палача, использующую только функции, я близок к концу, но не могу понять это ... По какой-то причине моя функция не зацикливаетсяв частности, мой быстрый массаж не может быть получен по моей первой букве / вводу, после этого я не могу больше получать быстрый массаж ... потому что это должно, это цикл для реализованного ... Я знаю, что это другая основная проблема,но я просто не могу пройти через это. Если бы кто-то просто взглянул на это, было бы неплохо ...

Я попытался использовать "console.log" и поместить его внутри оператора "if" и внутри "for", чтобы увидеть,цикл работает, цикл работает, но мое приглашение не зацикливается / не повторяется ... И я не знаю, почему ...: (*

var updateGameState = function (guess, word, answerArray) {
// Update answerArray and return a number showing how many
// times the guess appears in the word so remainingLetters
// can be updated


    for (var j = 0; j < word.length; j++) {
            if (word[j] === guess && answerArray[j] !== word[j]) {
                answerArray[j] = guess;
                remainingLetters--;

                };

    }; getGuess();
        console.log(answerArray);   


};

var remainingLetters = word.length;
var correctGuesses = updateGameState(guess, word, answerArray);

Сейчас я хочу, чтобы мое сообщение-подсказка сохраняловыскакивает так долго, что я могу вводить свои письма / догадки ...

---- внизу находится файл .js и html ....----

var pickWord = function(random) {
  // Return a random word
  return random[Math.floor(Math.random() * random.length)];

};

var word = pickWord(["fakultet", "zirafa", "trava", "labelo"]);
console.log(word);

var setupAnswerArray = function(word) {
  // Return the answer array
  var answerArray = [];
  for (i = 0; i < word.length; i++) {
    answerArray[i] = "_";
  }
  console.log(answerArray);
  return answerArray;
};
var answerArray = setupAnswerArray(word);

var showPlayerProgress = function(answerArray) {
  // Use alert to show the player their progress
  return alert(answerArray.join(" "));

};
showPlayerProgress(answerArray);

var getGuess = function() {
  // Use prompt to get a guess
  return (prompt("Guess a letter, or click Cancel to stop playing " + answerArray)).toLowerCase();
};
var guess = getGuess();
console.log(guess);

//               HERE IS THE PROBLEM
///*******************************************************
var updateGameState = function(guess, word, answerArray) {
  // Update answerArray and return a number showing how many
  // times the guess appears in the word so remainingLetters
  // can be updated
  for (var j = 0; j < word.length; j++) {
    if (word[j] === guess && answerArray[j] !== word[j]) {
      answerArray[j] = guess;
      remainingLetters--;
    };
  };
  getGuess();
  console.log(answerArray);
};

var remainingLetters = word.length;
var correctGuesses = updateGameState(guess, word, answerArray);
//*********************************************************


/* - code from the book

var showAnswerAndCongratulatePlayer = function (answerArray) {
// Use alert to show the answer and congratulate the player
};

var word = pickWord();
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
while (remainingLetters > 0) {
showPlayerProgress(answerArray);
var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Please enter a single letter.");
} else {
var correctGuesses = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuesses;
}
}
showAnswerAndCongratulatePlayer(answerArray);


*/
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Section 2: JavaScript Language Basics</title>
</head>

<body>
  <h1>Section 2: JavaScript Language Basics</h1>
</body>

<script src="script.js"></script>

</html>

1 Ответ

1 голос
/ 21 октября 2019

Вам нужно циклически повторять, пока количество оставшихся букв не станет равным 0. Сейчас вы запрашиваете предположение, обновляете состояние один раз, а затем запрашиваете еще одно предположение и останавливаетесь.

Это можетимеет смысл инкапсулировать процесс запроса догадки, а затем обновить состояние в другую функцию. Затем вы можете продолжать вызывать эту функцию, пока пользователь не победит. Я также переместил все вызовы функций и т. Д. (Т.е. часть кода) в один блок, чтобы было понятно. Когда он был разбит на части среди различных функций, было трудно следить за ходом программы.

Демонстрация:

var pickWord = function(random) {
  // Return a random word
  return random[Math.floor(Math.random() * random.length)];
};

var setupAnswerArray = function(word) {
  // Return the answer array
  var answerArray = [];
  for (i = 0; i < word.length; i++) {
    answerArray[i] = "_";
  }
  console.log(answerArray);
  return answerArray;
};

var getGuess = function() {
  // Use prompt to get a guess
  return (prompt("Guess a letter, or click Cancel to stop playing " + answerArray)).toLowerCase();
};

var updateGameState = function(guess, word, answerArray) {
  // Update answerArray and return a number showing how many
  // times the guess appears in the word so remainingLetters
  // can be updated
  for (var j = 0; j < word.length; j++) {
    if (word[j] === guess && answerArray[j] !== word[j]) {
      answerArray[j] = guess;
      remainingLetters--;
    };
  };
  console.log(answerArray);
};

function play() {
  var guess = getGuess();
  console.log(guess);
  updateGameState(guess, word, answerArray);
}

var word = pickWord(["fakultet", "zirafa", "trava", "labelo"]);
console.log(word);
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
while (remainingLetters > 0) {
  play();
}

alert("You win - congratulations");
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>Section 2: JavaScript Language Basics</title>
</head>

<body>
  <h1>Section 2: JavaScript Language Basics</h1>
</body>

<script src="script.js"></script>

</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...