作者cleanwind (骨傲风清(挂网))
看板PHP
标题Re: [请益] 求救 乱数发牌
时间Thu May 15 00:39:02 2008
这东西真的有点难度 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
1F:推 jimpop:有array_rand可以直接取不重复的数 05/15 08:59
2F:→ jimpop:$b = array_rand(range(1, 60), 25); 05/15 08:59
3F:→ jimpop:这样就是取1~60中25个不重复的数字 05/15 09:00
4F:推 forwardsky:谢谢所有大大帮我解答.. 05/16 18:03