Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript石头剪刀布小游戏_Javascript_Html - Fatal编程技术网

Javascript石头剪刀布小游戏

Javascript石头剪刀布小游戏,javascript,html,Javascript,Html,我正在尝试一个Javascript的石头剪刀游戏。我使用3个图像作为HTML文件中的按钮。我遇到了一个问题的功能,我用它来检查一个胜利。每次我点击一个按钮,我都会得到不同的玩家选择值和电脑选择值,但只有在比较这两个值时,才会得到比较函数中的最后一个值。例如,当我单击“Rock”时,计算机将选择“Paper”-但Javascript将显示我们都选择了“剪刀”(我的比较函数中的最后一个值)。有什么建议吗 /* SET ALL VARIABLES */ //set choice variable

我正在尝试一个Javascript的石头剪刀游戏。我使用3个图像作为HTML文件中的按钮。我遇到了一个问题的功能,我用它来检查一个胜利。每次我点击一个按钮,我都会得到不同的玩家选择值和电脑选择值,但只有在比较这两个值时,才会得到比较函数中的最后一个值。例如,当我单击“Rock”时,计算机将选择“Paper”-但Javascript将显示我们都选择了“剪刀”(我的比较函数中的最后一个值)。有什么建议吗

/*  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回答并选择一个有帮助的答案。否则,如果这些答案都没有帮助,请添加您自己的答案-这可能会在将来帮助其他人。