【发布时间】:2019-08-08 12:07:51
【问题描述】:
所以我正在构建一个石头、纸、剪刀游戏。我想让 math.random() 给我一个随机结果,我将其与用户选择的结果进行比较。
它主要是有效的。我什至认为它在一段时间内完全有效,但我在某些时候失去了随机性。
为了尝试它,我输入了一个固定的“用户”选项,并使用 setInterval(myfunction, 20) 运行代码几百次。他们总是不平衡的胜利,而且总是有相同的结果:
如果我用 playerPick = 1 运行它,计算机总是获胜。
如果我使用 playerPick = 2 或 3 运行它,用户总是获胜。
任何人都可以看到我犯错的地方吗?
//Global variable and constants.
const ROCK = 1;
const PAPER = 2;
const SCISSORS = 3;
//This is the game.
function whoWins(){
const playerPick = 2; //for debugging, it can be 1, 2, or 3.
const computer = computerPick();
if (playerPick == computer){
return draw();
} else if (playerPick == 1 && computer == 2){
return lose();
} else if (playerPick == 2 && computer == 3){
return lose();
} else if (playerPick == 3 && computer == 1){
return lose();
} else {
return win();
}
}
//These are the inputs for the game.
rockButton.addEventListener('click', () => {
playerPick = ROCK;
return whoWins()});
paperButton.addEventListener('click', () => {
playerPick = PAPER;
return whoWins()});
scissorsButton.addEventListener('click', () => {
playerPick = SCISSORS;
return whoWins()});
function computerPick() {
let computerChoice = '';
const getRandom = Math.random;
if (getRandom() >= 2/3) {
computerChoice = ROCK;
} else if (getRandom() >= 1/3){
computerChoice = PAPER;
} else {
computerChoice = SCISSORS;
}
return computerChoice;
}
我对这一切都很陌生,但仍然不是随机的。
【问题讨论】:
-
您在
const getRandom = Math.random;上使用方法 Math.random 您必须实际调用该方法 (Math.random()),通过省略括号,您只是在使用方法引用而不是实际生成随机数号码。 -
一个错误...您为每台计算机调用两次
getRandom()- 但是,这并不能解释结果的“总是”部分 -
我会考虑将
getRandom()乘以 100 并处理整数值(例如 > 66、> 33)。分数和计算机可能很棘手。 -
@Joe - 嗯? 1/3 和 2/3 并不棘手
-
@LukasBach 他们稍后会使用
getRandom()调用该函数 - 但可能不需要在一个 if-else 语句中多次调用它
标签: javascript