作者cleanwind (骨傲风清(挂网))
看板PHP
标题Re: [请益] 扑克牌依照花色排序
时间Tue Jul 10 00:02:08 2012
我有个问题,为什麽不去建一个 4*13 的 array 呢?
$cardArr[0][0]
.
.
.
$cardArr[0][12]
.
.
.
$cardArr[3][12]
接着发牌的方式利用两个回圈走完所有牌,
补充 XD
如果说希望 2 开始, A 结束,
可以改 index 的起始或所代表的牌。
另外更改 while 内的条件,也可以设定发牌数 < 13
更改 $playerArr 也可以设定玩家人数,
没发到的牌会是 0 ,有发到的会是玩家的编号。
$playerArr = array(0, 0, 0, 0, 0);
for($k = 0; $k < 4; $k ++) {
for($j = 0; $j < 13; $j ++) {
while($p = rand(1, 4) && $playerArr[$p] < 13) {
$playerArr[$p] ++;
$cardArr[$k][$j] = $p;
}
}
}
这样你发完牌就等於排完啦 XD
而且不管尿计算点数或是干什麽我想都不会太麻烦才是!
※ 引述《liaosankai (低温烘焙)》之铭言:
: 我试着再改写一次程式码,透过花色的单字英文字首取得的ord()值
: 刚好符合「黑桃>红心>方块>梅花」的规则,排除黑桃1的特例
: 为牌组每张牌建立排序用的权重值,并在每位玩家取得手牌之後
: 利用array_multisort()重新排序
: 当然如果能写成类别,应该会更方便使用
: ==========================
: <?php
: $skins = array("spade","heart","diamond","club");
: $icons = array(
: "spade" => "♠",
: "heart" => "♥",
: "diamond" => "♦",
: "club" => "♣"
: );
: //建立牌组
: foreach($skins as $key => $skin){
: for($no=1;$no<=13;$no++){
: //计算权重值
: if("spade" == $skin && 1 == $no) {
: $weight = ord($skin) + 14;
: } else {
: $weight = ord($skin) + $no;
: }
: //新牌张
: $cards[$weight] = array(
: //权重值
: "weight" => $weight,
: //花色名称
: "skin" => $skin,
: //花色图示
: "icon" => $icons[$skin],
: //牌号
: "no" => $no
: );
: }
: }
: //洗牌
: srand(time());
: shuffle($cards);
: //进行发牌
: $players = array("Jack","Tom","Bill");
: $num = 5;
: foreach($palyers as $key => $name){
: $flag = array();
: for($i=0;$i<$num;$i++){
: //从牌组抽一张
: $card = array_pop($cards);
: //记录权重参照
: $flag[] = $card["weight"];
: //分派给玩家
: $player[$name][] = $card;
: }
: //整理牌组(依照权重值)
: array_multisort($flag, SORT_DESC, $player[$name]);
: }
--
请协助连署 Steam 板,不管赞成或反对都很谢谢您!
战略高手 游戏, 数位, 程设
ComGame-Serv 组务 Σ战略高手服务中心
ComGame-New 组务 ◎战略高手群组连署专用看板
864 7/07 cleanwind ˇ [申请新板] Steam
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 120.101.9.24
1F:推 liaosankai:我想说让「玩家人数」和「发牌数」可以更弹性一点 07/10 01:39
2F:→ liaosankai:另外考虑原PO说的大小问题,黑桃1>黑桃K 07/10 01:41
3F:→ kerash:错字「尿」?>//< 07/10 09:07
4F:→ cleanwind:很明显是「要」 XD 07/10 10:20
※ 编辑: cleanwind 来自: 120.101.9.24 (07/10 12:57)