作者yuleen123 (.......................)
看板PHP
標題Re: [請益] 求救 亂數發牌
時間Thu May 15 01:33:16 2008
: $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
→ yuleen123:歐.. 其實 c 大的方法就可以了.. XD 05/15 01:43
推 cleanwind:只要能夠達成要求,運算少的情況下是沒差的 ^^ 05/15 01:46