Javascript中的岩纸剪刀游戏功能

时间:2013-12-19 00:40:12

标签: javascript

我有一个简单的Rock Paper Scissors游戏的代码,但是当我运行它时,它只是要求我输入Rock,Paper或Scissors,之后别无其他。在那之后没有警报。

var userChoice = prompt("Do you choose rock, paper or scissors?");
var computerChoice = Math.random();
if (computerChoice < 0.34) {
    computerChoice = "rock";
} else if(computerChoice <= 0.67) {
    computerChoice = "paper";
} else {
    computerChoice = "scissors";
}

var compare = function (choice1, choice2)
{
    if (choice1 === choice2)
    {
        return alert("The result is a tie!");
    }

    if (choice1 === "Rock")
    {
        if (choice2 === "Scissors")
        {
            return alert("Rock wins!");
        }
        else if (choice2 === "Paper")
        {
            return alert("Paper wins!");
        }
    }
    else if (choice1 === "Scissors")
    {
        if (choice2 === "Rock")
        {
            return alert("Rock wins!");
        }
        else if (choice2 === "Paper")
        {
            return alert("Schissors wins!");
        }
    }
};

compare(userChoice, computerChoice);

顺便说一下,我正在使用在线编辑器。

5 个答案:

答案 0 :(得分:1)

jsFiddle

不需要return

var userChoice = prompt("Do you choose rock, paper or scissors?");

var computerChoice = Math.random();
if (computerChoice < 0.34) {
    computerChoice = "rock";
} else if (computerChoice <= 0.67) {
    computerChoice = "paper";
} else {
    computerChoice = "scissors";
}

function compare(choice1, choice2) {
    if (choice1 === choice2) {
        alert("The result is a tie!");
    }

    if (choice1 === "Rock") {
        if (choice2 === "Scissors") {
            alert("Rock wins!");
        } else if (choice2 === "Paper") {
            alert("Paper wins!");
        }
    } else if (choice1 === "Scissors") {
        if (choice2 === "Rock") {
            alert("Rock wins!");
        } else if (choice2 === "Paper") {
            alert("Schissors wins!");
        }
    }
};

compare(userChoice, computerChoice);

答案 1 :(得分:1)

这里的问题是你在混合案件。您将computerChoice设置为"rock""paper""scissors",但随后在您正在执行与"Rock""Paper"的比较的功能内部,或"Scissors"

请始终使用小写字母,并在userChoice = userChoice.toLowerCase()电话后添加prompt()

答案 2 :(得分:0)

如果choice1"Rock""Scissors"完全匹配,则只会显示任何内容。

你遗漏了"Paper"。更重要的是,您忽略了用户拼写错误的可能性。

你应该有一个'其他'分支。这至少会给你一些反馈。

var compare = function (choice1, choice2)
{
    if (choice1 === choice2)
    {
        return alert("The result is a tie!");
    }

    if (choice1 === "Rock")
    {
        if (choice2 === "Scissors")
        {
            return alert("Rock wins!");
        }
        else if (choice2 === "Paper")
        {
            return alert("Paper wins!");
        }
    }
    else if (choice1 === "Scissors")
    {
        if (choice2 === "Rock")
        {
            return alert("Rock wins!");
        }
        else if (choice2 === "Paper")
        {
            return alert("Schissors wins!");
        }
    }
    alert('Unhandled combination! choice1 = ' + choice1 + ', choice2 = ' + choice2);
};

答案 3 :(得分:0)

javascript中的字符串比较区分大小写:

"rock" != "Rock"

答案 4 :(得分:0)

显而易见的错误是计算机选择都是小写的,compare函数使用岩石,纸和剪刀的标题。

我还建议您对代码进行一些改进。首先,compare函数现在正在做两件事:计算游戏结果并将其发送给用户。更好的方法是单独进行。功能应该做单一的事情:

function compare(choice1, choice2) {
    ...
        return "It's a tie";
    ...
        return "Rock wins";
    ...
}

alert(compare(...))

其次,小写用户输入。这将使其与计算机选择格式相同,并可能使您免于用户提问。

第三,检查用户输入是否为可用变体之一:

var userChoice = prompt("Do you ...?").toLowerCase();

var variants = ['rock', 'paper', 'scissors'];
if (variants.indexOf(userChoice) === -1) {
    alert("Don't cheat! Choose one of ...")
}

第四,在这个游戏中只有六个可能的选择对,所以compare函数不应该那么长。使其更简单的一种方法是明确列出所有可能的选择对:

var choicePairs = {
    'rock.rock': "It's a tie",
    'rock.paper': "Paper wins",
    'rock.scissors': "Rock wins",
    'paper.rock': "Paper wins",
    ...
}

function compare(choice1, choice2) {
    return choicePairs[choice1 + '.' + choice2];
} 

最后你可以重用variants数组来选择计算机选择:

var computerChoice = variants[Math.floor(Math.random() * variants.length))];

为了清楚起见,您可以将这个select-random-element-from-array事物存储在单独的函数中。

有一个好的编码!