2015-12-04 104 views
0

我刚刚在codecademy上完成了一个rps游戏,并且还有一些额外的任务,包括如果用户输入错误的信息会产生结果。基本上,如果你不写一个“摇滚”,“纸”或“剪刀”的输入,它会再次问你,直到你把它放在正确的一个。岩石纸,剪刀游戏

我怎么能调用userChoice变量,直到它得到正确的答案。我试过这样,但它只是问了2次,然后发布你写的任何东西。

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

if (userChoice != "rock", "paper", "scissors") { 
    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 "The result is a tie!"; 
    } 
    else if(choice1 === "rock") { 
     if (choice2 === "scissors") { 
      return "rock wins"; 
     } 
     else { 
      return "paper wins"; 
     } 
    } 
    else if(choice1 === "paper") { 
     if(choice2 === "rock") { 
      return "paper wins"; 
     } 
     else { 
      return "scissors wins"; 
     } 
    } 
    else if(choice1 === "scissors") { 
     if(choice2 === "rock") { 
      return "rock wins"; 
     } 
     else { 
      return "scissors wins";  
     } 
    } 
} 

console.log("Human: " + userChoice); 
console.log("Computer: " + computerChoice); 
compare(userChoice, computerChoice); 
+0

使用做... while循环 – Robert

+0

你可以大量简化这一点 - 我有一个小乐趣。看看这个,我已经添加了评论来解释快捷键:http://jsfiddle.net/svArtist/12nLz7nb/ –

+0

明天我会研究它,谢谢你的建议 –

回答

2

使用引用自身的函数:

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

    if (choice !== "rock" && choice !== "paper" && choice !== "scissors") { 
    return userChoice(); 
    } else { 
    return choice; 
    } 
}; 

This fiddle有整个事情的工作。

+1

是的,就像@TAGraves写道的一样。由于它在一行之后执行代码行,算法没有理由运行两次以上。而且,如果您第一次输入错误的答案,您的安全检查将会被触发,并且会再次提示用户。但是,如果他们输入另一个不正确的答案,则代码将继续。这就是为什么你需要包含上面的代码 - 它会检查条件,如果它不正确,函数将再次运行。在运行代码方面,想象一下玩棋盘游戏,每次掷出6时回退3步。这也是一样的。 – lmenus

+0

我明白这是如何起作用的,但它却没有。这最终发生:http://s23.postimg.org/e6hz8swhn/Capture.png –

+0

问题是,您没有在整个代码中更改对userChoice的引用。看看我的小提琴。请注意,在声明函数之后,我做了一个变量'var choice = userChoice();',然后在'userChoice'之前的任何位置使用'choice'。 – TAGraves

0

使用以下

do { 
    userChoice = prompt("Do you choose rock, paper or scissors?"); 
} while (userChoice != "rock", "paper", "scissors") 
+0

这个解决方案和我的一样。请注意'userChoice!=“rock”,“paper”,“scissors”'不起作用 - 您需要将它更改为与&&结合的多个语句,就像我一样。 – TAGraves