我的石头剪刀有什么问题?

时间:2012-02-25 18:24:27

标签: javascript

我正在编写一个javascript石头剪刀应用程序,但我以前从未编写过应用程序。谁能帮我吗?对于Rock,它总是输出平局, 对于纸张,它总是输出一个损失, 对于剪刀,它总是输出一个胜利。

<script type="text/javascript"> 
var Rock;
var Paper;
var Scissors;
var choice = prompt("Specify your choice of 'Rock', 'Paper', or 'Scissors'.");
var game = [Rock, Paper, Scissors];

document.write("Rock.");
document.write("Paper..");
document.write("Scissors...");

var result = game[Math.floor(Math.random() * game.length)];

if (result === Rock) {
if (choice === "Rock") {
document.write("It's a draw! Try again.");
}
else if (choice === "Paper") {
document.write("You lose! Unlucky.");
}
else if (choice === "Scissors") {
document.write("You win! Nice.");
}}

else if (result === Paper) {
if (choice === "Rock") {
document.write("You win! Nice.");
}
else if (choice === "Paper") {
document.write("It's a draw! Try again.");
}
else if (choice === "Scissors") {
document.write("You lose! Unlucky.");
}}

else if (result === Scissors) {
if (choice === "Rock") {
document.write("You lose! Unlucky.");
}
else if (choice === "Paper") {
document.write("You win! Nice.");
}
else if (choice === "Scissors") {
document.write("It's a draw! Try again.");
}}
</script>

3 个答案:

答案 0 :(得分:4)

RockPaperScissors都是undefined,因此它们始终相等。将它们设置为任何东西,它应该可以工作。

var Rock = 'Rock';
var Paper = 'Paper';
var Scissors = 'Scissors';

答案 1 :(得分:3)

您的game数组实际上是一个包含3个相等值的数组:var Rockvar Papervar Scissors相同:它们都是未定义的,即没有值

如果你刚给每个人分配了一个值,比如说var Rock=1var Paper=2var Scissors=3,那么你的程序应该可行。话虽如此,你可能只是在这里使用字符串,你的数组应该只是["Rock", "Paper", "Scissors"]。然后,您将再次测试字符串,就像使用choice变量一样。

编辑:

只是为了好玩,这就是我在下面的评论中所说的关于数字更容易的事情:

var words = ['rock', 'paper', 'scissors'];
var played = words.indexOf( choice );
// if played is -1 here, your player typed in something other than the 3 words you accept

var result = Math.floor(Math.random() * game.length);
var outcome = ( played - result + 2 ) % 3;
var message
if ( outcome == 2 ) {
   message = "It's a draw! Try again.";
} else if ( outcome == 1 ) {
   message = "You lose! Unlucky.";
} else {
   message = "You win! Nice." );
}
document.write( message );

答案 2 :(得分:1)

简而言之,这是因为您在应用程序中混合了字符串文字和未分配的变量。修复起来相当简单:在Rock,Paper和Scissors周围加上引号,如下:

var game = ['Rock', 'Paper', 'Scissors'];

...完全摆脱变量,因为它们不需要。 )

发生了什么:

1)你声明了三个变量 - Rock,Paper和Scissors,但是没有为它们赋值,所以它们保持undefined。然后从它们的值中创建一个数组 - 本质上是一个由三个相同元素组成的数组,未定义。

2)然后你尝试生成一些随机值,但最终得到undefined,因为该数组中没有其他内容。因此,result 总是 undefined

3)然后第一次if检查成功,因为undefined(结果)严格等于undefined(Rock)。现在结果很明显:“Paper”(一个字符串)获胜,“Scissors”(再次,一个字符串)输了,'Rock'(我还提到那是一个字符串吗?)绘制。

最终修改:不要将undefined'undefined'混淆(字符串)。这些也是不同的:例如,前者是假的,而后者则不是。