簡體   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