繁体   English   中英

Javascript-Math.random改进

[英]Javascript - Math.random improvements

我目前正在开发一款小型游戏,需要返回1,2或3。

我的想法是,然后比较两个数字和更大的获胜。

我正在使用的代码是这样的:

var isMultipleOf, number1, number2, random;

random = function(number) {
  return isMultipleOf(Math.floor((Math.random() * number) + 1));
};

isMultipleOf = function(number) {
  if (number % 2 === 0) {
    return 1;
  }
  if (number % 3 === 0) {
    return 2;
  } else {
    return 3;
  }
};

number1 = random((Math.random() * 100) + 1);
number2 = random((Math.random() * 100) + 1);

console.log("number 1 is " + number1 + " and number2 is " + number2);

这段代码有效,但是如果可能的话,我想对其进行一些改进。

对于我的游戏,平局是可能的,但根据我当前的逻辑,它经常发生,我不喜欢它。 您能提出一种更好的方法来改善这一点,从而减少抽奖(相同数字)的可能性吗?

谢谢

您的代码如此之多的原因是您的发行版确实搞砸了。

 isMultipleOf = function(number) { if (number % 2 === 0) { return 1; } if (number % 3 === 0) { return 2; } else { return 3; } }; var results = [0,0,0]; for (var i=1; i<=100; i ++ ){ results[isMultipleOf(i)-1] += 1 } console.log(results) 

Chance of 1: 50
Chance of 2: 17
Chance of 3: 33

如果您想要更好的结果,则不只是使用随机并将其分为3部分。

 getNum = function(number) { if (number < .33) { return 1; } if (number < .67) { return 2; } else { return 3; } }; var results = [0,0,0]; for (var i=1; i<=100; i ++ ){ var rn = Math.random() results[getNum(rn)-1] += 1 } console.log(results) 

当前,您从1到100中选择一个随机数,选择另一个小于或等于第一个的随机数,然后如果第二个数字是2的倍数,则返回1的3的倍数,但不是2的返回2,否则返回3。

为什么不只选择1到3之间的两个随机数呢?

var rnd = Math.floor(Math.random() * 3) + 1;  // 1 2 or 3, with 1/3 probability

另一种选择是从已知池(例如彩票)中抽取每个数字,以确保没有联系。

 //start with an ordered array var nums = [1,2,3]; // fisher-yates shuffle for (var i=nums.length - 1; i > 0; i--) { var r = Math.floor(Math.random() * (i + 1)); var tmp = nums[r]; nums[r] = nums[i]; nums[i] = tmp; } // any two elements can be our drawn numbers alert("first: " + nums[0] + ", second: " + nums[1]); 

首先,您是否想抽签,或者最好是在有机会的时候再进行一次随机分组,直到有获胜的机会,或者只是再次降低抽签的机会? 最简单的方法当然是增加更多的数字,因此从统计学上讲,平局的机会更少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM