簡體   English   中英

使Math.random()更隨機嗎?

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

這只是工作中的簡單概率。 不會看到相鄰的一對的唯一情況是,如果卡值分布,使得...

  • 第一張卡-可以是任何值
  • 第二張卡-必須是與前一張卡不相鄰的11個值之一(賠率11:13)
  • 第三張卡-必須是不與前兩個相鄰的9個值之一
  • 第四張卡-必須是不與前三個相鄰的7個值之一
  • 第5張卡片-必須是與前四個不相鄰的5個值之一

因此,得到沒有相鄰值的牌的幾率是(13/13)*(11 * 13)*(9 * 13)*(7/13)*(5/13)=很小的12%

(注意:“我的統計信息有些生銹,因此我可能不太正確,但是它足夠接近,可以讓您感覺到所看到的效果。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM