Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите с Javascript кодом (https://javascript.ru/forum/misc/70749-pomogite-s-javascript-kodom.html)

Omnia 29.09.2017 19:00

Помогите с Javascript кодом
 
Добрый вечер. Написал код игры виселица. Возникли проблемы. Если значение переменной numberAttempt поменять на > 5, то игра начинает работать некорректно. Помогите пожалуйста разобраться с чем это связано. Заранее огромное спасибо.
P.S Если неправильно оформил тему, что-то не написал, тема не отражает сути и т.д. Сообщите пожалуйста, буду признателен.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hangman!</title>
</head>
<body>
<h1>Hangman!</h1>

<script>
var pickWord = function () {
var words = ["программа", "детерминант", "обезьяна" , "кошка", "компьютер", "волна", "портрет", "корабль", "космос", "интернет", "цепочка", "дротик", "человек", "мандарин", "машина", "автобус", "автомобиль", "озарение", "идея", "страх", "ужас", "номер", "комната", "оружие", "балкон", "терраса",  "картина", "светофор", "семафор", "индейка", "курица", "фонарь", "рыба", "фотография", "строка", "огонь", "вода", "сказка", "орудие", "броня", "инновация", "пруд", "речка", "чудовище", "шапка", "нитка", "бочка", "мусор", "останки", "клавиатура", "процессор", "блок", "видеокарта", "наушники", "портфель", "банка", "мозг", "рука", "конфета"];
return words[Math.floor(Math.random() * words.length)];
};

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

return answerArray;
};

var showPlayerProgress = function (answerArray) {
alert(answerArray.join(" "));
};

var getGuess = function () {
return prompt("Угадайте букву или нажмите Отмена для выхода из игры");
};

var updateGameState = function (guess, word, answerArray) {
var appearances = 0;
for (var j = 0; j < word.length; j++) {
if (word[j] === guess) {
answerArray[j] = guess;
appearances++;
}
}

return appearances;
};

var showAnswerAndCongratulatePlayer = function (answerArray, numberAttempt) {
showPlayerProgress(answerArray);

};

var word = pickWord();
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
var numberAttempt = 5;

while (remainingLetters > 0 && numberAttempt > 0) { showPlayerProgress(answerArray); var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Пожалуйста, введите только одну букву.");
} else {
numberAttempt--;
guess = guess.toLowerCase();
var correctGuesses = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuesses;
remainingLetters--;
}
}

alert(answerArray.join(" "));

if (numberAttempt > 0) {
alert("Отлично! Было загадано слово " + word);
} else {
alert("Плохо! Вас повесили! Было загадано слово " + word);
}

showAnswerAndCongratulatePlayer(answerArray);
</script>

</body>
</html>

рони 29.09.2017 19:05

Omnia,

[HTML run]ваш код[/HTML]

Omnia 29.09.2017 19:14

рони,
благодарю.

рони 29.09.2017 19:22

Omnia,
какие правила, в чём некорректно?

рони 29.09.2017 19:26

Omnia,
может строка 65 лишняя?

Omnia 29.09.2017 19:29

рони, если выбирать одну и тужу букву определенное кол-во раз (4-6), при значение переменной numberAttempt > 5 (если кол-во попыток будет 6 и больше ), то выдаст, что якобы слово угадано ( хотя это не так).

Omnia 29.09.2017 19:32

рони,
Ого, вроде теперь все работает корректно. Огромное спасибо!

рони 29.09.2017 19:32

Omnia,
тогда введите проверку -- такая буква уже не входит в слово

рони 29.09.2017 19:38

Цитата:

Сообщение от Omnia
Ого, вроде теперь все работает корректно.

:nono:
Цитата:

Сообщение от рони
введите проверку -- такая буква уже не входит в слово


рони 29.09.2017 19:44

Omnia,
протестируйте этот вариант
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hangman!</title>
</head>
<body>
<h1>Hangman!</h1>

<script>
var pickWord = function () {
var words = ["программа", "детерминант", "обезьяна" , "кошка", "компьютер", "волна", "портрет", "корабль", "космос", "интернет", "цепочка", "дротик", "человек", "мандарин", "машина", "автобус", "автомобиль", "озарение", "идея", "страх", "ужас", "номер", "комната", "оружие", "балкон", "терраса",  "картина", "светофор", "семафор", "индейка", "курица", "фонарь", "рыба", "фотография", "строка", "огонь", "вода", "сказка", "орудие", "броня", "инновация", "пруд", "речка", "чудовище", "шапка", "нитка", "бочка", "мусор", "останки", "клавиатура", "процессор", "блок", "видеокарта", "наушники", "портфель", "банка", "мозг", "рука", "конфета"];
return words[Math.floor(Math.random() * words.length)];
};

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

return answerArray;
};

var showPlayerProgress = function (answerArray) {
alert(answerArray.join(" "));
};

var getGuess = function () {
return prompt("Угадайте букву или нажмите Отмена для выхода из игры");
};

var updateGameState = function (guess, word, answerArray) {
var appearances = 0;
for (var j = 0; j < word.length; j++) {
if (word[j] === guess && answerArray[j] !== guess) {
answerArray[j] = guess;
appearances++;
}
}

return appearances;
};

var showAnswerAndCongratulatePlayer = function (answerArray, numberAttempt) {
showPlayerProgress(answerArray);

};

var word = pickWord();
var answerArray = setupAnswerArray(word);
var remainingLetters = word.length;
var numberAttempt = 5;

while (remainingLetters > 0 && numberAttempt > 0) { showPlayerProgress(answerArray); var guess = getGuess();
if (guess === null) {
break;
} else if (guess.length !== 1) {
alert("Пожалуйста, введите только одну букву.");
} else {
guess = guess.toLowerCase();
var correctGuesses = updateGameState(guess, word, answerArray);
remainingLetters -= correctGuesses;
if(!correctGuesses) numberAttempt--;
alert("осталось " +numberAttempt+ " попыток");
}
}

alert(answerArray.join(" "));

if (numberAttempt > 0) {
alert("Отлично! Было загадано слово " + word);
} else {
alert("Плохо! Вас повесили! Было загадано слово " + word);
}

showAnswerAndCongratulatePlayer(answerArray);
</script>

</body>
</html>


Часовой пояс GMT +3, время: 03:43.