免责声明:我对Javascript相当陌生,所以我猜测我做错了什么,或者误解了这是怎么回事。
我有两个默认值为0的变量,稍后会被一些函数更改。
var userAnswerContainer = 0;
var computerAnswerContainer = 0;
function userInput() {
userAnswerContainer = prompt("Please choose either Rock, Paper, or Scissors:").toLowerCase();
switch (userAnswerContainer) {
case "rock":
break;
case "paper":
break;
case "scissors":
break;
default:
alert(userAnswerContainer + " is not a valid answer.");
userInput();
}
}
function computerInput() {
computerAnswerContainer = Math.floor(Math.random() * 9);
if (computerAnswerContainer <= 3) {
computerAnswerContainer = "rock";
} else if (computerAnswerContainer >= 4 && computerAnswerContainer <= 6) {
computerAnswerContainer = "paper";
} else {
computerAnswerContainer = "scissors";
}
}
&#13;
在更改了这些变量后,我将它们作为单独函数的参数传递(在岩石,纸张,剪刀游戏中),但函数似乎只能看到变量的原始值。 / p>
function gameStartV2(y, c) {
userInput();
computerInput();
alert(computerAnswerContainer + " / " + userAnswerContainer);
/*Testing: Displays values of AnswerContainers applied by respective functions*/
if (c === y) {
alert("You chose " + y + ". Computer chose " + c + ". It's a tie!");
} else if (c === "rock") {
if (y === "paper") {
alert("Paper covers rock, you win!");
userScore++;
} else {
alert("Rock smashes scissors, you lose!");
computerScore++;
}
compareScore();
} else if (c === "scissors") {
if (y === "rock") {
alert("Rock smashes scissors, you win!");
userScore++;
} else {
alert("Scissors cuts paper, you lose!");
computerScore++;
}
} else if (c === "paper") {
if (y === "rock") {
alert("Paper covers rock, you lose!");
computerScore++;
} else {
alert("Scissors cuts paper, you win!");
userScore++;
}
} else {
alert("Error, please try again.");
}
compareScore();
}
gameStartV2(userAnswerContainer,computerAnswerContainer);
&#13;
如果我对参数函数内部的变量进行检查,我可以看到它们确实保留了更改函数中的值,但if / else语句仍然只看到0.发生了什么这里吗?
答案 0 :(得分:2)
您永远不会更新您的值:
function gameStartV2() {
userInput();
computerInput();
y = userAnswerContainer;
c = computerAnswerContainer;
将其更改为此,它应该按预期工作。
在您的代码中,脚本始终使用提供给函数的原始值(0
和0
)。
您甚至无需向gameStartV2
提供userAnswerContainer
和computerAnswerContainer
在下面做了一些改进,达到顶峰!
var userAnswerContainer = 0;
var computerAnswerContainer = 0;
var userScore = 0;
var computerScore = 0;
function userInput() {
var userAnswerContainer = prompt("Please choose either Rock, Paper, or Scissors:").toLowerCase(); //use var to keep it within the scope of this function.
switch (userAnswerContainer) {
case "rock":
break;
case "paper":
break;
case "scissors":
break;
default:
alert(userAnswerContainer + " is not a valid answer.");
userInput();
}
return userAnswerContainer;
}
function computerInput() {
var computerAnswerContainer = Math.floor(Math.random() * 9); //use var to keep it within the scope of this function.
if (computerAnswerContainer <= 3) {
computerAnswerContainer = "rock";
} else if (computerAnswerContainer >= 4 && computerAnswerContainer <= 6) {
computerAnswerContainer = "paper";
} else {
computerAnswerContainer = "scissors";
}
return computerAnswerContainer; //use return to set the variable to computerAnswerContainer
}
function gameStartV2() {
c = userAnswerContainer = userInput(); //set the global and c
y = computerAnswerContainer = computerInput(); //set the global and y
alert(computerAnswerContainer + " / " + userAnswerContainer);
/*Testing: Displays values of AnswerContainers applied by respective functions*/
if (c === y) {
alert("You chose " + y + ". Computer chose " + c + ". It's a tie!");
} else if (c === "rock") {
if (y === "paper") {
alert("Paper covers rock, you win!");
userScore++;
} else {
alert("Rock smashes scissors, you lose!");
computerScore++;
}
} else if (c === "scissors") {
if (y === "rock") {
alert("Rock smashes scissors, you win!");
userScore++;
} else {
alert("Scissors cuts paper, you lose!");
computerScore++;
}
} else if (c === "paper") {
if (y === "rock") {
alert("Paper covers rock, you lose!");
computerScore++;
} else {
alert("Scissors cuts paper, you win!");
userScore++;
}
} else {
alert("Error, please try again.");
}
compareScore();
}
function compareScore()
{
alert("the score is you: " + userScore + " vs. computer: " + computerScore);
}
gameStartV2(userAnswerContainer,computerAnswerContainer);
&#13;
答案 1 :(得分:1)
&#34; Y&#34;和&#34; c&#34;是传递给函数的原始值的值的副本。删除参数并只使用实际变量,或在gameStartV2函数中创建局部var副本,但在您调用修改器函数之后。
答案 2 :(得分:1)
function gameStartV2() {
var y = userInput();
var c = computerInput();
var r;
alert("Testing Check " + c + " / " + y);
/*Testing: Displays values of AnswerContainers applied by respective functions*/
if (y === c) {
alert("You chose " + y + ". Computer chose " + c + ". It's a tie!");
} else {
r = y + c;
switch (r) {
case "paperrock":
alert("Paper covers rock, you win!");
userScore++;
break;
case "paperscissors":
alert("Scissors cuts paper, you lose!");
computerScore++;
break;
case "rockpaper":
alert("Paper covers rock, you lose!");
computerScore++;
break;
case "rockscissors":
alert("Rock smashes scissors, you win!");
userScore++;
break;
case "scissorspaper":
alert("Scissors cuts paper, you win!");
userScore++;
break;
case "scissorsrock":
alert("Rock smashes scissors, you lose!");
computerScore++;
break;
default:
alert("Error, please try again.");
}
}
compareScore();
}