Javascript石头剪刀布小游戏
我正在尝试一个Javascript的石头剪刀游戏。我使用3个图像作为HTML文件中的按钮。我遇到了一个问题的功能,我用它来检查一个胜利。每次我点击一个按钮,我都会得到不同的玩家选择值和电脑选择值,但只有在比较这两个值时,才会得到比较函数中的最后一个值。例如,当我单击“Rock”时,计算机将选择“Paper”-但Javascript将显示我们都选择了“剪刀”(我的比较函数中的最后一个值)。有什么建议吗Javascript石头剪刀布小游戏,javascript,html,Javascript,Html,我正在尝试一个Javascript的石头剪刀游戏。我使用3个图像作为HTML文件中的按钮。我遇到了一个问题的功能,我用它来检查一个胜利。每次我点击一个按钮,我都会得到不同的玩家选择值和电脑选择值,但只有在比较这两个值时,才会得到比较函数中的最后一个值。例如,当我单击“Rock”时,计算机将选择“Paper”-但Javascript将显示我们都选择了“剪刀”(我的比较函数中的最后一个值)。有什么建议吗 /* SET ALL VARIABLES */ //set choice variable
/* SET ALL VARIABLES */
//set choice variables
var p1Choice;
var p2Choice;
var cChoice;
//set the rock image to act as a button
function rockSelected (p1Choice) {
p1Choice = "R";
alert (p1Choice);
}
//set the paper image to act as a button
function paperSelected (p1Choice) {
p1Choice = "P";
alert (p1Choice);
}
//set the scissor image to act as a button
function scissorSelected (p1Choice) {
p1Choice = "S";
alert (p1Choice);
}
function cpuSelect (cChoice) {
cChoice = Math.random();
if (cChoice <= 0.33) {
cChoice = "R"
alert (cChoice)}
else if (cChoice >= 0.34 && cChoice <= 0.66)
{cChoice = "P";
alert (cChoice);}
else
{cChoice = "S";
alert (cChoice);}
}
//check user imput against computer selection
function compare (p1Choice, cChoice) {
if (p1Choice == "R") {
if (cChoice == "R") {
alert ("player chose rock, cpu chose rock - it was a tie");
return "it was a tie";
}
else if (cChoice == "P") {
alert ("player chose rock, cpu chose paper - Paper wins!");
return "paper wins";
}
else {
alert ("player chose rock, cpu chose scissors - rock wins");
return "rock wins";
}
}
else if (p1Choice == "P") {
if (cChoice == "R") {
alert ("player chose paper, cpu chose rock - paper wins");
return "paper wins";
} else if (cChoice == "P") {
alert ("player chose paper, cpu chose paper - it was a tie");
return "it was a tie";
} else {
alert ("player chose paper, cpu chose scissors -scissors wins");
return "scissors wins";
}
}
else {
if (cChoice == "R") {
alert ("player chose scissors, cpu chose rock - rock wins");
return "rock wins";
} else if (cChoice == "P") {
alert ("player chose scissors, cpu chose paper - scissors wins");
return "scissors wins";
} else {
alert ("player chose scissors, cpu chose scissors - it was a tie");
return "it was a tie";
}
}
}
/*设置所有变量*/
//设置选择变量
风险价值选择;
var选择;
变量选择;
//将岩石图像设置为按钮
已选择功能(p1Choice){
p1Choice=“R”;
警惕(p1选择);
}
//将纸张图像设置为按钮
已选择功能(p1选项){
p1Choice=“P”;
警惕(p1选择);
}
//将剪刀图像设置为按钮
已选择功能剪刀(p1选项){
p1Choice=“S”;
警惕(p1选择);
}
功能cpuSelect(选择){
cChoice=Math.random();
如果(cChoice=0.34&&cChoice你可以通过做一个小循环赋值来做一些非常简单的事情:
var choices = {
rock: {},
paper: {},
scissors: {}
};
choices['rock'].beats = choices['scissors'];
choices['paper'].beats = choices['rock'];
choices['scissors'].beats = choices['paper'];
var playerChoice = choices['rock'];
var cpuChoice = choices['paper'];
if(playerChoice.beats === cpuChoice) {
//winner!
} else if(playerChoice === cpuChoice) {
//tie
} else {
//loser
}
问题是,全局变量p1Choice
和ccchoice
从未通过rockSelected
、paperSelected
、scissorSelected
和cpuSelect
方法进行设置。其背后的原因是这些函数定义具有与glob同名的参数所有变量。所以实际发生的是,你只是在改变局部变量的值,这不是你的意图
例如,在rockSelected
方法中,由于函数定义包括p1Choice
参数,表达式p1Choice=“R”
仅设置局部变量,而未定义全局变量
现在,当您调用compare
方法时,它将始终返回相同的值,因为您的全局变量仍然未定义
要解决此问题,您只需删除rockSelected
、paperSelected
、scissorSelected
、和cpuSelect
方法的参数。这样就可以设置全局变量,从而使compare
方法正常工作。例如rockSelected
方法应如下所示:
function rockSelected() {
p1Choice = "R";
alert (p1Choice);
}
您还必须去掉compare
方法中的两个参数,以便它也使用全局变量
另外,如果您感兴趣,这个bug称为“变量阴影”你可以得到一些关于它的基本信息。基本上,这里要学到的经验是了解变量名的作用域。我修改了你的代码,以坚持问题的原始目的。问题是你没有使用你创建的函数。我删除了你做的3个函数作为我的mage按钮,因为它们没有引用任何HTML,您也没有提供任何HTML以及未使用的变量。我相信您可以修改代码以提高效率。这是您修改代码的一个工作示例
function cpuSelect () {
cChoice = Math.random();
if (cChoice <= 0.33) {
cChoice = "R";
alert ("CPU Selected Rock");
return cChoice;
}
else if (cChoice >= 0.34 && cChoice <= 0.66)
{cChoice = "P";
alert ("CPU Selected Paper");
return cChoice;
}
else
{cChoice = "S";
alert ("CPU Selected Scissors");
return cChoice;
}
}
//check user imput against computer selection
function compare (p1Choice) {
cChoice = cpuSelect();
if (p1Choice == "R") {
if (cChoice == "R") {
alert ("player chose rock, cpu chose rock - it was a tie");
return "it was a tie";
}
else if (cChoice == "P") {
alert ("player chose rock, cpu chose paper - Paper wins!");
return "paper wins";
}
else {
alert ("player chose rock, cpu chose scissors - rock wins");
return "rock wins";
}
}
else if (p1Choice == "P") {
if (cChoice == "R") {
alert ("player chose paper, cpu chose rock - paper wins");
return "paper wins";
} else if (cChoice == "P") {
alert ("player chose paper, cpu chose paper - it was a tie");
return "it was a tie";
} else {
alert ("player chose paper, cpu chose scissors -scissors wins");
return "scissors wins";
}
}
else {
if (cChoice == "R") {
alert ("player chose scissors, cpu chose rock - rock wins");
return "rock wins";
} else if (cChoice == "P") {
alert ("player chose scissors, cpu chose paper - scissors wins");
return "scissors wins";
} else {
alert ("player chose scissors, cpu chose scissors - it was a tie");
return "it was a tie";
}
}
}
compare("R");
函数cpuSelect(){
cChoice=Math.random();
如果(cChoice=0.34&&cChoice您是否调用过compare()
?旁注上的可能重复,则您的代码格式不正确(并且完全不一致)。您应该遵循样式指南,例如,我在HTML文件中的按钮上调用了比较函数。感谢大家的回答。通过删除每个函数传递的参数,我能够使其正常工作。很抱歉,我省略了HTML代码……我正试图简化我的问题。太好了,请确保向上投票l回答并选择一个有帮助的答案。否则,如果这些答案都没有帮助,请添加您自己的答案-这可能会在将来帮助其他人。