题目描述:
要求开发一款扑克游戏,编写一套洗牌算法,而公平地洗牌是将洗好的牌存储在一个整型数组里。
分析:
定义一个洗牌函数,函数内用$tmp数组存储1~54表示54张牌。然后对这54张牌进行循环,每次循环时,通过随机函数随机从0到剩余牌数中生成一个数返回做索引,从$tmp数组中取出这个索引对应的牌,存到洗牌后的数组$cards。取出这张牌后同时要删除该牌在$tmp数组内的位置,最后还要通过array_values()函数对$tmp数组的值重新排序,保证数组从0到当前剩余的牌数中可以根据随机生成的索引取出剩余的牌。最后得到洗好的牌都存在数组$cards中。
代码实现如下:
$card_num = 54;
function wash_card($card_num){
$cards = $tmp = [];
for($i=0;$i<$card_num;$i++){
$tmp[$i] = $i;
}
for ($i=0; $i < $card_num; $i++) {
$index = rand(0,$card_num-$i-1);
$cards[$i] = $tmp[$index];
$tmp = array_values($tmp);
}
return $cards;
}
var_dump(wash_card($card_num));
结果:
