【问题标题】:How do I compare two randomly picked arrays with earlier picks?如何将两个随机选择的数组与早期选择的数组进行比较?
【发布时间】:2016-05-18 00:16:31
【问题描述】:

我正在尝试创建一个扑克版本,其中程序向每个玩家(其中 6 个)分发 2 张牌。我想出了一个程序,可以为每个玩家随机选择 1 张牌,但问题是有时,2 个玩家会得到同一张牌。我解决这个问题的尝试是根据数组中的卡片位置+循环值给每个循环一个不同的值,然后将它与早期的循环进行比较,但没有任何成功......

这是我目前“工作”的程序:

<?php

$colour = array('Heart', 'Diamonds', 'Spades', 'Clubs');
$card = array('Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King');

for($i=1; $i<=6;$i++)
{

$m = 0;
$n = 0;

$random1 = array_rand($card);
echo $card[$random1];
$m = $card[$random1];

$random2 = array_rand($colour);
echo " ". $colour[$random2];
$n = $colour[$random2];

}
?>

我应该如何继续?有没有更简单的方法来做到这一点?

【问题讨论】:

  • 尝试shuffle($arr);,然后尝试$value=array_shift($arr);。

标签: php poker


【解决方案1】:

你总是可以像一副真正的纸牌那样做,而不是两个阵列,一个阵列,包含 Ace - King 在每套花色中的所有牌

例如

$cards = array('AH', '2H', '3H', '4H', '5H', '6H', '7H', '8H', '9H',
               'TH', 'JH', 'QH', 'KH', 'AD', '2D', '3D', '4D', '5D',
               '6D', '7D', '8D', '9D', 'TD', 'JD', 'QD', 'KD', 'AC',
               '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'TC',
               'JC', 'QC', 'KC', 'AS', '2S', '3S', '4S', '5S', '6S',
               '7S', '8S', '9S', 'TS', 'JS', 'QS', 'KS');

// then the appropriately named... 

shuffle($cards);

// then "deal" the cards by looping through the array from the beginning!

$i = 0; 

for ($player = 0; $player < 6; $player ++) {
   echo "<br />Player $player : Card 1 = " . $cards[$i++];
   echo " Card 2 = " . $cards[$i++];
}

您可以有一个单独的函数将“AH”、“9S”等转换为卡片的实际名称,或者在创建数组时使用它们的显示名称实际设置它们。

【讨论】:

    【解决方案2】:
    $Cards=array();
    
    while(count($Cards)<(2*6)){    
        $colour = array('Heart', 'Diamonds', 'Spades', 'Clubs');
        $card = array('Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen');
    
        shuffle($card);
        $m = array_shift($card);
    
        shuffle($colour);
        $n = array_shift($colour);
    
        echo $card = $m."/".$n;
        $Cards[$card]=$card;
        echo '<br>';
    }
    $Cards=array_values($Cards);
    
    echo '<pre>';
    var_export($Cards);#2 unique cards for each player in array
    

    只是一种方式。

    【讨论】:

    • 除非我读错了...由于您在循环的每次迭代中初始化数组,因此可能有两次相同的卡。但是,如果您将初始化移出循环,那么您将在仅四次迭代后用完您的 $colour 数组 - 您永远不会有超过一张牌的每个花色 或 等级处理超过一次,例如一旦发出红心 A,就不会再有 A 或红心......
    猜你喜欢
    • 2014-05-15
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2018-03-24
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    相关资源
    最近更新 更多