Re: [請益] 求救 亂數發牌
看板PHP作者yuleen123 (.......................)時間17年前 (2008/05/15 01:33)推噓1(1推 0噓 1→)留言2則, 2人參與討論串3/5 (看更多)
: $i = 0;
: while($i < 20) {
: $tmp = array_rand($cardArray);
: if(!in_array($tmp,$card2Array)) {
: $card2Array[$i] = $tmp;
: $i ++;
: }
: }
這邊有個問題是
抽第一張牌每張牌被抽到的機率是 1/52
抽第二張牌時每張牌被抽到的機率變成 1/51 ( 因為少一張 )
抽第三張牌時每張被抽到的機率變成 1/50 ( 因為少兩張 )
....
我的作法是建一個對照表
$Poker_map = array( "S1", "S2", ... , "S13", "H1", "H2", ... , "H13",
"D1", "D2", ... , "D13", "C1", "C2", ... , "C13 );
共 52 張牌
抽第一張牌時產生 0 ~ 51 的亂數值對應到 $Poker_map 對照表上
$num = rand( 0, 51 );
假設抽到 15 好了, 15 對照到對照表是 H3
把抽到的牌加到已發出牌的陣列中
$deal_map[] = $Poker_map[ $num ];
之後把抽到的牌從 $Poker_map 移除掉
移除的方法有很多種
需要注意的是移除後對照表的 key 要連續
這時候 $Poker_map 裡面剩下 51 張牌
接下來抽第二張牌時產生 0 ~ 50 的亂數值
之後依照前面的方法加到已發牌的陣列中並從 $Poker_map 裡移除
重複步驟直到發完牌
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.227.171.86
→
05/15 01:43, , 1F
05/15 01:43, 1F
推
05/15 01:46, , 2F
05/15 01:46, 2F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章
7
15