[英]Making Math.random() more random?
我正在慢慢地通過JavaScript工作,並遇到了Math.random()問題。 我在MDN上讀到Math.random()總是使用當前的Date作為種子-我“相信”正在發生的事情是我的兩次Math.random()調用發生得如此之快,以至於它們返回的值基本上相同。 這是代碼,這是紙牌游戲的開始。
var cards = new Array(null);
cards[0] = new Array("Ace of Spades","ace","A","spades","black");
cards[1] = new Array("Two of Spades","two","2","spades","black");
cards[2] = new Array("Three of Spades","three","3","spades","black");
// you get the idea ... full code on the JSFiddle below
cards[51] = new Array("King of Hearts","king","K","hearts","red");
// initialize variables
var cardsInHand = 5;
// variables to make the card drawing decrement work without touching original array
var restOfDeck = new Array(null);
restOfDeck = cards;
// initialize hands as a doubly-nested Arrays
var player1Hand = new Array(null);
var player2Hand = new Array(null);
// function to randomly "draw" the cards, decrementing the deck each time
for (var k = 0; k < cardsInHand; k++) {
player1Hand[k] = restOfDeck[(Math.floor(Math.random() * restOfDeck.length))];
restOfDeck.splice(restOfDeck.indexOf(player1Hand[k]), 1);
console.log((k + 1) + ' cards to Player 1');
player2Hand[k] = restOfDeck[(Math.floor(Math.random() * restOfDeck.length))];
restOfDeck.splice(restOfDeck.indexOf(player2Hand[k]), 1);
console.log((k + 1) + ' cards to Player 2');
}
// display hand
document.write('Player 1\'s Hand\: <br />');
for (var i = 0; i < cardsInHand; i++) {
document.write(player1Hand[i][0] + "<br />");
}
document.write('<br /><br />Player 2\'s Hand\: <br />');
for (var j = 0; j < cardsInHand; j++) {
document.write(player2Hand[j][0] + "<br />");
}
發生的情況是,在十張“交易”卡中,總是有兩張“順序”卡(兩張紅心,然后三張紅心)。 總是。 我相信這與draw / decrement函數中的兩個Math.random()調用有關,但是我不確定如何進行返工。 提前致謝!
JSFiddle在這里: http : //jsfiddle.net/bjVCL/
這只是工作中的簡單概率。 你不會看到相鄰的一對的唯一情況是,如果卡值分布,使得...
因此,得到沒有相鄰值的牌的幾率是(13/13)*(11 * 13)*(9 * 13)*(7/13)*(5/13)=很小的12%
(注意:“我的統計信息有些生銹,因此我可能不太正確,但是它足夠接近,可以讓您感覺到所看到的效果。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.