首页 > 解决方案 > 为什么我的石头/剪刀布游戏在多个函数调用中获得相同的随机数?

问题描述

我制作了一个功能性(如果可能非常冗长)的摇滚/纸/剪刀游戏。

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

先感谢您。问题来了...

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);

标签: javascriptfunctionmathrandomconsole

解决方案


randChoice is called once, compChoice is evaluated once based on that, so when you playGame, you're passing the same computer choice each time.

playGame should be modified to perform the choice each time the game is played:


    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.")
      }
    };


推荐阅读