php 实现自动发牌
实现自动发牌的PHP代码
以下是一个简单的PHP实现自动发牌的代码示例,模拟一副扑克牌的洗牌和发牌过程:
<?php
// 定义扑克牌的花色和点数
$suits = ['♠', '♥', '♦', '♣'];
$values = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'];
// 创建一副完整的扑克牌
$deck = [];
foreach ($suits as $suit) {
foreach ($values as $value) {
$deck[] = $suit . $value;
}
}
// 洗牌
shuffle($deck);
// 定义发牌函数
function dealCards($deck, $players, $cardsPerPlayer) {
$hands = array_fill(0, $players, []);
for ($i = 0; $i < $cardsPerPlayer; $i++) {
for ($j = 0; $j < $players; $j++) {
if (!empty($deck)) {
$hands[$j][] = array_shift($deck);
}
}
}
return ['hands' => $hands, 'remaining' => $deck];
}
// 设置玩家数量和每人发牌数
$playerCount = 4;
$cardsPerPlayer = 5;
// 发牌
$result = dealCards($deck, $playerCount, $cardsPerPlayer);
$hands = $result['hands'];
$remainingDeck = $result['remaining'];
// 输出结果
echo "剩余牌数: " . count($remainingDeck) . "\n\n";
foreach ($hands as $index => $hand) {
echo "玩家 " . ($index + 1) . " 的牌: " . implode(', ', $hand) . "\n";
}
?>
代码说明
-
创建扑克牌:代码首先定义了扑克牌的四种花色和13个点数,然后通过双重循环生成一副完整的52张扑克牌。
-
洗牌:使用PHP内置的
shuffle()函数随机打乱数组顺序,实现洗牌效果。
-
发牌函数:
dealCards函数接受三个参数:洗好的牌堆、玩家数量和每位玩家发牌数。函数返回一个包含玩家手牌和剩余牌堆的数组。 -
发牌逻辑:发牌采用轮转方式,每位玩家依次获得一张牌,直到每位玩家都获得指定数量的牌。

-
输出结果:代码最后输出每位玩家的手牌和剩余牌堆中的牌数。
扩展功能
如果需要更复杂的功能,可以考虑以下改进:
// 添加大小王
$deck[] = '小王';
$deck[] = '大王';
// 自定义洗牌算法
function customShuffle(&$array) {
$count = count($array);
for ($i = $count - 1; $i > 0; $i--) {
$j = mt_rand(0, $i);
[$array[$i], $array[$j]] = [$array[$j], $array[$i]];
}
}
// 按特定规则排序手牌
function sortHand($hand) {
$order = ['2'=>1, '3'=>2, '4'=>3, '5'=>4, '6'=>5, '7'=>6, '8'=>7,
'9'=>8, '10'=>9, 'J'=>10, 'Q'=>11, 'K'=>12, 'A'=>13];
usort($hand, function($a, $b) use ($order) {
$aVal = $order[substr($a, 1)] ?? 14; // 小王和大王排最后
$bVal = $order[substr($b, 1)] ?? 14;
return $aVal - $bVal;
});
return $hand;
}
这段代码提供了完整的扑克牌发牌功能,可以根据实际需求进行调整和扩展。






