[英]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.