Re: [請益] 求救 亂數發牌

看板PHP作者 (骨傲風清(掛網))時間17年前 (2008/05/15 00:39), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串2/5 (看更多)
這東西真的有點難度 XD 給你幾個做法! 首先你要有一個陣列姑且叫他 $cardArray[52] 或 $cardArray[4][13] 你可以使用一維,也可以使用二維 一維的陣列將 key(也就是52) 值除以13 取整數當做花色,取餘數 + 1 當點數; 二維的陣列就第一維當作花色,第二維的 key + 1 當點數。 接著你要洗牌,洗牌有兩種方法! 1.直接使用 shuffle ,不過二維陣列不適用。 而且有天你碰到 C C++ C# 你會發現,沒有 Shuffle 可以用。 (而且我相信老師也不是要你這樣寫,當然如果我這樣寫老師說 No 我會和他爭論,不過前提是你要夠了解這個東西 XD) 2.另設個變數 $tmp ,從陣列隨機取一個值出來存進 $tmp 再隨機取另一值丟進剛剛隨機值的位子,最後再把 $tmp 丟回第二個隨機值的位子。 真饒舌,總而言之像是 $tmp = $A; $A = $B; $B = $tmp; 可不可以不洗牌? 可以你也可以另取一個陣列,隨便你要叫他什麼, 叫做 $card2Array 好了 然後利用 array_rand() 去隨機取值, 可是這樣可能會取到重複的 value ,怎辦? $i = 0; while($i < 20) { $tmp = array_rand($cardArray); if(!in_array($tmp,$card2Array)) { $card2Array[$i] = $tmp; $i ++; } } 以上的方法不管是一維還是二維都可以, 只是二維陣列你可能要先用亂數決定花色再決定點數。 最後再把 $cardArray 發給四個人,怎麼發? for($i = 0 ; $i < 4 ; $i ++) { for($j = 0 ; $j < 5 ; $j ++) { echo $cardArray[$i*4 + $j]; } } 就這樣發完了! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.168.222

05/15 08:59, , 1F
精華區有array_rand可以直接取不重複的數
05/15 08:59, 1F

05/15 08:59, , 2F
$b = array_rand(range(1, 60), 25);
05/15 08:59, 2F

05/15 09:00, , 3F
這樣就是取1~60中25個不重複的數字
05/15 09:00, 3F

05/16 18:03, , 4F
謝謝所有大大幫我解答..
05/16 18:03, 4F
文章代碼(AID): #18AnMduU (PHP)
文章代碼(AID): #18AnMduU (PHP)