我如何将两个随机选择的阵列与之前的选择进行比较?
How do I compare two randomly picked arrays with earlier picks?
我正在尝试创建一个扑克牌版本,其中程序会向每位玩家分发 2 张牌(其中 6 张)。我想出了一个程序,可以为每个玩家随机挑选一张牌,但问题是有时,2 个玩家会得到同一张牌。我尝试解决这个问题的方法是根据数组中的卡片位置 + 循环值给每个循环一个不同的值,然后将它与之前的循环进行比较,但没有任何成功...
这是我目前的 "working" 程序:
<?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];
}
?>
我该如何继续?有更简单的方法吗?
$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
一条路。
你总是可以像一副真正的纸牌那样做它,而不是两个数组,一个数组,包含每套花色中 A-K 的所有牌
例如
$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 张牌(其中 6 张)。我想出了一个程序,可以为每个玩家随机挑选一张牌,但问题是有时,2 个玩家会得到同一张牌。我尝试解决这个问题的方法是根据数组中的卡片位置 + 循环值给每个循环一个不同的值,然后将它与之前的循环进行比较,但没有任何成功...
这是我目前的 "working" 程序:
<?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];
}
?>
我该如何继续?有更简单的方法吗?
$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
一条路。
你总是可以像一副真正的纸牌那样做它,而不是两个数组,一个数组,包含每套花色中 A-K 的所有牌
例如
$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”等翻译成卡片的实际名称,或者在创建数组时实际设置它们的显示名称。