问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用php做一个给出一副扑克,出去大小鬼,随机发给四个人一张牌,每一次发的牌都不一样,讲下思路,谢谢!

发布网友 发布时间:2023-07-08 18:20

我来回答

3个回答

热心网友 时间:2023-10-23 01:43

rand(1,52) 一到52代表不同的52张牌, 如产生随机数1,这对应牌的图片,1.jpg

4个人,4个数组,产生的随机数,看看是否已经保存在四个数组中,已经存在则重新产生随机数
这个是理论完全随机数的情况

其实我想应该可以这样,52/4=13张牌 可以rand(1,13) ,产生的随机数就是1到13,比对此随机数是否已经产生四次,四个数组中,这样,应该执行效率会高点,在rand(1,4)产生随机的四个花色,

在执行上一步判断是否重复值,在产生,此为穷举法,结构简单点

function getpoke($start=1,$end=52,$pokes=array())
{

//去除重复的牌
$pokes=array_unique($pokes);
//还差几张牌
$cai=$end-count($pokes);
if (count($pokes)<$end)
{
for($i=count($pokes);$i<=$cai;$i++)
{
$pokes[$i]=rand($start,$end);
}
$pokes=array_unique($pokes);
getpoke($start,$end,$pokes);
}

return $pokes;

}

生成了1-52的不重复的数组,在把这个数组分成四个小数组就可以了,实际上牌就是一次洗牌生成一个数组。
搞定,还是递归搞定,应该会有更好的方法,没测试,楼主完成了,发个最终版的

--------------------------------------------测试可用,生成无重复四个数组-------------------------------------------------------

$pokes=range(1,52);
shuffle($pokes);

$player1=$player2=$player3=$player4=array();

for($i=0;$i<13;$i++)
{
$player1[$i]=$pokes[$i];
}

for($i=13;$i<26;$i++)
{
$player2[$i-13]=$pokes[$i];
}

for($i=26;$i<39;$i++)
{
$player3[$i-26]=$pokes[$i];
}

for($i=39;$i<52;$i++)
{
$player4[$i-39]=$pokes[$i];
}
echo "<br/>player1:<br/>";
print_r($player1);

echo "<br/>player2:<br/>";
print_r($player2);

echo "<br/>player3:<br/>";
print_r($player3);
echo "<br/>player4:<br/>";
print_r($player4);

每个数组的数字在对应相应的牌的图片就行,出牌,比较大小,就是比较数字的大小

热心网友 时间:2023-10-23 01:44

//用一个数组a储存52张牌
for($i=0;$i<52;$i++){
$x=rand(0,52);
$arr[$i]=$a[$x]; //以下四行用于验证这张牌是否发过
for($j=0;$j<52;$j++){
if($arr[$j]==$a[$x]){
$i--;
}
}
//对4取余发给不同玩家
if($i%4==0)$arr1[$i]=$a[$x];
if($i%4==1)$arr2[$i]=$a[$x];
if($i%4==2)$arr3[$i]=$a[$x];
if($i%4==3)$arr4[$i]=$a[$x];

}
//大概思路就是这样,代码随手写的细节自己改吧

热心网友 时间:2023-10-23 01:44

牌就52张。可以直接写到一个数组中,array(1->"梅花1",2->"梅花2"1->"梅花1"1->"梅花1"1->"梅花1")这样在用rand取 把重复的去掉 四个人 循环四次 每次在array中取13张牌,放到一个数组中,然后在两个数组的差集 类推。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在液压原理图中各种符号的表示意义是什么? 脚臭怎么办,一脱鞋,那味道我自己都受不了? ...经电加热后表面会形成一层黑色物质,请问是什么东西?用什么化学... 宿舍老是经常出现蚂蚁,放久的书本打开全是蚂蚁,或是布柜里放久的衣服... 为什么寝室地板上会有蚂蚁? 怎么计算产值excel 青春不再伤感经典句子(《青春伤感经典短句子》) 致我们失去的青春简短说说(怀念过去的经典句子) 分享回忆过去致青春的语录集锦(回忆的句子时光感言简短) 女生为什么总想摸我的脸 用简单c语言,随机输出17张扑克牌,包括花色。大小王也要随机。 一副扑克牌一次编号100到154,使用一次循环进行洗牌,使用随机数random(x)产生0 到x-1之间的数字, C#纸牌记忆游戏怎么实现随机发牌啊 五十二张扑克牌随机发给俩个人各三张,根据点数比较大小,输出谁赢谁输,用c语言编写 从一副扑克中去掉两张王牌后 车辆外表可以喷洒酒精吗? 怎么隐藏在淘宝里面正在进行的订单? 上海沪帆汽车塑料件有限公司电话是多少? 上海华龙测试仪器有限公司电话是多少? 上海浦东川沙奇享有限有限公司有没有卫生许可证 岳阳市华容县新冠疫苗第四针在哪接种 川沙城投是川沙镇的三产公司吗 八千村位于哪个省哪个市 湖南省华容县注滋口镇安置房什么时候动工 华容县注滋口镇有二手房出售房价多少 注东村位于哪个市 TVB四大黄金配角,个个演技炸裂,却怎么也红不起来 恶魔深渊女主有几个 石家庄婚宴酒店 帮推荐一下 军队文职技能岗位 汽车发动机前面鼓包上面有个禁止手摸的地方叫什么 海底总动员英文台词 广日电梯无机房控制柜上贴什么标识 天晟海拔东方属于什么社区 橙子几月份用钾肥? 北京航空航天大学法学院如何? 北京航空航天大学法学院在哪个区 棉马甲如何清洗? 蚕丝棉背心清洗方法 简短励志小清新句子 常用建筑钢材主要有( )。 建筑工程中具体会用到哪些钢材 物理,无线电话用太空中继站吗??? 现在许多长途电话是以地球同步卫星作中继站的。打这种电话时,会感到对方的反应有些迟钝;为什么 什么是粘棉?? 棉和粘胶纤维有什么区别? 广西中医药大学赛恩斯新医药学院如何? 路飞父亲的全名 海贼王中路飞的家人的资料 路飞他老爸跟爷爷的全名分别是什么?