javascript - 为什么我的石头/剪刀布游戏在多个函数调用中获得相同的随机数?
问题描述
我制作了一个功能性(如果可能非常冗长)的摇滚/纸/剪刀游戏。
如果我通过一遍又一遍地调用该函数来运行游戏,那么“计算机”的选择是正确随机的,因此游戏的结果符合预期。但是,如果我一次调用该函数三次,我的猜测是“石头”、“纸”和“剪刀”,计算机的选择是随机的,但相同的选择适用于对函数的所有三个调用。
先感谢您。问题来了...
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);
解决方案
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.")
}
};
推荐阅读
- python - grep 父 pom 版本并替换为新值
- android - 仅安装了设备凭据的 Androidx.biometric 不会在具有 Android 9 及以下版本的设备上调用回调
- cognos - 如何使用 TM1py 在 Python 和 IBM TM1 OLAP 工具之间建立连接
- javascript - 修复函数中的 no-param-reassign Eslint 问题
- node.js - 机器学习过程的 Sagemaker 用户密钥和秘密
- python - 如何按 2 列分组并在熊猫中执行计数
- android - Android - 谷歌说我的代码有意图漏洞?
- arrays - VBA - 将数组转换为 For 循环
- php - 带有插入查询的Mysql MAX ID + 1增量
- python - 如何使用 Python 脚本更改连接到我的电脑的打印机的 IP