【问题标题】:Rock paper, scissors game石头纸,剪刀游戏
【发布时间】:2015-12-05 07:52:40
【问题描述】:

我刚刚在 codecademy 上完成了一个 rps 游戏,还有一些额外的任务,包括在用户输入错误信息时生成结果。基本上,如果您不输入“rock”、“paper”或“scissors”,它会再次询问您,直到您输入正确的。

我怎样才能调用 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); 

【问题讨论】:

  • 你可以大大简化这个——我玩得很开心。看看这个,我加了cmets来解释快捷键:jsfiddle.net/svArtist/12nLz7nb
  • 我明天去看看,谢谢建议

标签: javascript


【解决方案1】:

使用引用自身的函数:

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 使整个工作正常。

【讨论】:

  • 是的,正如@TAGraves 所写。该算法没有理由运行超过两次,因为它逐行执行代码。而且,如果您第一次输入错误答案,您的安全检查将被触发,并且将再次提示用户。但是,如果他们输入另一个错误的答案,代码就会继续。这就是为什么您需要包含上面的代码 - 它会检查条件,如果不正确,该函数将再次运行。就运行代码而言,想象一下玩棋盘游戏,每次掷出 6 时后退 3 步。这是一样的。
  • 我明白这是如何工作的,但它确实没有。这最终会发生:s23.postimg.org/e6hz8swhn/Capture.png
  • 问题是您没有在整个代码中更改对 userChoice 的引用。看看我的小提琴。请注意,在我声明函数后,我创建了一个变量 var choice = userChoice();,然后在之前有 userChoice 的地方使用 choice。
  • 另外,确保你在条件的第一部分使用return userChoice();,而不是仅仅调用userChoice()。
  • userChoice是返回提示值的函数;它不是持有该值的变量。如果您从不调用该函数,则该函数将永远不会运行。 var choice = userChoice(); 调用该函数,然后将函数返回的任何内容存储在 choice 变量中。注意你的最后一行,compare(userChoice, computerChoice); 似乎没有做任何事情?如果你将它存储在像var result = compare(userChoice, computerChoice); 这样的变量中,那么你可以执行console.log(result) 并查看返回的比较结果。
【解决方案2】:

使用下面的

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

【讨论】:

  • 这个解决方案和我的一样有效。请注意,userChoice != "rock", "paper", "scissors" 不起作用 - 您需要像我一样将其更改为由 && 连接的多个语句。
猜你喜欢
  • 2013-12-09
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2015-05-16
  • 2017-01-17
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多