为什么我的 rock/paper/scissors 游戏会为多个函数调用获得相同的随机数?

Why is my rock/paper/scissors game getting the same random number for multiple function calls?

我已经制作了一个 rock/paper/scissors.

的功能性游戏(如果可能非常冗长的话)

如果我 运行 通过一遍又一遍地调用该函数来玩游戏,“计算机”的选择是正确随机的,因此游戏的结果是预期的。但是,如果我一次调用该函数三次,我的猜测是“石头”、“布”和“剪刀”,计算机的选择是随机的,但相同的选择会应用于对函数的所有三次调用。

提前谢谢你。问题来了...

JS:

const choices = ["rock", "paper", "scissors"];

const randChoice = Math.floor(Math.random() * choices.length);

const compChoice = choices[randChoice];

const playGame = (you, comp) => {
  if (you === "paper" && comp === "rock") {
    console.log(you + " beats " + comp + ". YOU WIN!")
  } else if (you === "rock" && comp === "paper") {
    console.log(comp + " beats " + you + ". YOU LOSE!")
  } else if (you === "rock" && comp === "scissors") {
    console.log(you + " beats " + comp + ". YOU WIN!")
  } else if (you === "scissors" && comp === "rock") {
    console.log(comp + " beats " + you + ". YOU LOSE!")
  } else if (you === "scissors" && comp === "paper") {
    console.log(you + " beats " + comp + ". YOU WIN!")
  } else if (you === "paper" && comp === "scissors") {
    console.log(comp + " beats " + you + ". YOU LOSE!")
  } else if (you === comp) {
    console.log("You both chose " + you + ". That's a draw.")
  }
};

如果我调用该函数一次,游戏就可以运行...

playGame("rock", compChoice);

如果我三次调用该函数,计算机对所有三场比赛的选择都是相同的,因此我每次都会赢、输和平,尽管顺序是随机的...

playGame("rock", compChoice);
playGame("paper", compChoice);
playGame("scissors", compChoice);

const randChoice = Math.floor(Math.random() * choices.length);

是常数,你想在每次播放之间重新计算randChoice和compChoice

randChoice 被调用一次,compChoice 被评估一次,因此当您 playGame 时,您每次都通过相同的计算机选择。

playGame应修改为每次玩游戏时执行选择:


    const choices = ["rock", "paper", "scissors"];
       
    const playGame = (you, comp) => {
      var randChoice = Math.floor(Math.random() * choices.length);
      var compChoice = choices[randChoice];
      
      if (you === "paper" && comp === "rock") {
        console.log(you + " beats " + comp + ". YOU WIN!")
      } else if (you === "rock" && comp === "paper") {
        console.log(comp + " beats " + you + ". YOU LOSE!")
      } else if (you === "rock" && comp === "scissors") {
        console.log(you + " beats " + comp + ". YOU WIN!")
      } else if (you === "scissors" && comp === "rock") {
        console.log(comp + " beats " + you + ". YOU LOSE!")
      } else if (you === "scissors" && comp === "paper") {
        console.log(you + " beats " + comp + ". YOU WIN!")
      } else if (you === "paper" && comp === "scissors") {
        console.log(comp + " beats " + you + ". YOU LOSE!")
      } else if (you === comp) {
        console.log("You both chose " + you + ". That's a draw.")
      }
    };