#javascript #function #loops
#javascript #функция #циклы
Вопрос:
Я создаю простую игру «Камень, ножницы, бумага» на JavaScript, но я продолжаю сталкиваться с ошибкой, когда при вызове функции она продолжает возвращать, что это не так. Любая помощь будет оценена! Я уверен, что я просто вставляю не в то место или неправильно передаю переменные. Или я пытался перемещать его, и я пытался не передавать в него переменные, но он продолжает выдавать мне тот же код ошибки.
var playGame = function() {
var playerChoice = window.prompt("Choose your weapon! Enter r for Rock, p for paper, or s for Scissors.");
console.log(playerChoice)
switch (playerChoice) {
case "r":
console.log("Player chooses Rock!");
break;
case "p":
console.log("Player chooses Paper!");
break;
case "s":
console.log("Player chooses Scissors!");
break;
default:
window.alert("You did not pick a valid option. Try again.");
playGame();
break;
};
var randomNum = Math.floor(Math.random() * 3 1);
console.log(randomNum);
var compChoice = "";
switch (randomNum) {
case 1:
compChoice = "r";
console.log(compChoice);
break;
case 2:
compChoice = "p";
console.log(compChoice);
break;
case 3:
compChoice = "s"
console.log(compChoice);
break;
};
contest(playerChoice, compChoice);
};
var playConfirm = window.confirm("Would you like to play Rock, Paper, Scissors?");
if (playConfirm) {
playGame();
} else {
alert("Ok, maybe next time. Have a nice day!");
}
var contest = function(pChoice, cChoice) {
// for () {
switch (pChoice, cChoice) {
case (pChoice === cChoice):
window.alert("It's a tie!");
// playAgain();
break;
case (pChoice = "r") amp;amp; (cChoice = "p"):
window.alert("I won! Paper covers rock!");
// playAgain();
break;
case (pChoice = "r") amp;amp; (cChoice = "s"):
window.alert("You won! Rock crushes scissors!");
// playAgain();
break;
case (pChoice = "p") amp;amp; (cChoice = "r"):
window.alert("You won! Paper covers rock!");
// playAgain();
break;
case (pChoice = "p") amp;amp; (cChoice = "s"):
window.alert("I won! Scissors cuts paper!");
// playAgain();
break;
case (pChoice = "s") amp;amp; (cChoice = "r"):
window.alert("I won! Rock crushes scissors!");
// playAgain();
break;
case (pChoice = "s") amp;amp; (cChoice = "p"):
window.alert("You won! Scissors cuts paper!");
// playAgain();
break;
}
};
Комментарии:
1. Где возникает ошибка?
2. Вы получаете ошибку, потому что вы вызываете
playGame
(который вызываетcontest
) до того, как функция была назначенаcontest
.
Ответ №1:
Это потому, что вы использовали contest
функцию перед определением.
Если вы переместите определение contest
функции перед использованием, оно будет работать.
var contest = function (pChoice, cChoice) {
// for () {
switch (pChoice, cChoice) {
case (pChoice === cChoice):
window.alert("It's a tie!");
// playAgain();
break;
case (pChoice = "r") amp;amp; (cChoice = "p"):
window.alert("I won! Paper covers rock!");
// playAgain();
break;
case (pChoice = "r") amp;amp; (cChoice = "s"):
window.alert("You won! Rock crushes scissors!");
// playAgain();
break;
case (pChoice = "p") amp;amp; (cChoice = "r"):
window.alert("You won! Paper covers rock!");
// playAgain();
break;
case (pChoice = "p") amp;amp; (cChoice = "s"):
window.alert("I won! Scissors cuts paper!");
// playAgain();
break;
case (pChoice = "s") amp;amp; (cChoice = "r"):
window.alert("I won! Rock crushes scissors!");
// playAgain();
break;
case (pChoice = "s") amp;amp; (cChoice = "p"):
window.alert("You won! Scissors cuts paper!");
// playAgain();
break;
}
};
var playGame = function() {
var playerChoice = window.prompt("Choose your weapon! Enter r for Rock, p for paper, or s for Scissors.");
console.log(playerChoice)
switch (playerChoice) {
case "r":
console.log("Player chooses Rock!");
break;
case "p":
console.log("Player chooses Paper!");
break;
case "s":
console.log("Player chooses Scissors!");
break;
default:
window.alert("You did not pick a valid option. Try again.");
playGame();
break;
};
var randomNum = Math.floor(Math.random() * 3 1);
console.log(randomNum);
var compChoice = "";
switch (randomNum) {
case 1:
compChoice = "r";
console.log(compChoice);
break;
case 2:
compChoice = "p";
console.log(compChoice);
break;
case 3:
compChoice = "s"
console.log(compChoice);
break;
};
contest(playerChoice, compChoice);
};
var playConfirm = window.confirm("Would you like to play Rock, Paper, Scissors?");
if (playConfirm) {
playGame();
} else {
alert("Ok, maybe next time. Have a nice day!");
}
Комментарии:
1. Я добавил свой ответ внизу, который также работает. Итак, зачем перемещать
window.confirm
исправленное, интересно?2. Это зависит от точки вызова функции. Когда вы ставите
playConfirm
вышеcontest
, пока пользователь не введет запрос,contest
часть определения не будет вызвана. Поэтому он будет неопределенным и не сможет быть вызван. Но после того, как вы переместилиplayConfirm
раздел «Конкурс», это означает, что после запуска определения конкурсаprompt
будет показано. Таким образом, функция будет существовать.3. @4156: Ваш ответ точно такой же, как этот. Вы не просто переместили
window.confirm
, вы также переместилиplayGame()
вызов функции. Перемещение этих строк «вниз» и перемещениеcontext
объявления «наверх» дают тот же результат.
Ответ №2:
По какой-то причине перемещение
var playConfirm = window.confirm("Would you like to play Rock, Paper, Scissors?");
if (playConfirm) {
playGame();
} else {
alert("Ok, maybe next time. Have a nice day!");
}
в нижней части исправлено, может быть, это как-то связано с тем, как он вызывает функции?