Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从玩家';谁的手?_Php_Arrays_Loops - Fatal编程技术网

Php 如何从玩家';谁的手?

Php 如何从玩家';谁的手?,php,arrays,loops,Php,Arrays,Loops,我试着发一手五张牌给一个玩家,然后得分。我的计分程序似乎运行得很好,但我不时会遇到重复发牌的问题。我试着用一个while循环来检查是否有重复的卡片,但这似乎有点老套。我的代码如下。请记住,我绝对是新手,所以解决方案越简单越好!非常感谢 // create suits array $suits = array("996", "997", "998", "999"); // create faces array $faces = array(); $faces[1] = "1"; $faces[2

我试着发一手五张牌给一个玩家,然后得分。我的计分程序似乎运行得很好,但我不时会遇到重复发牌的问题。我试着用一个while循环来检查是否有重复的卡片,但这似乎有点老套。我的代码如下。请记住,我绝对是新手,所以解决方案越简单越好!非常感谢

// create suits array
$suits = array("996", "997", "998", "999");

// create faces array
$faces = array();
$faces[1] = "1";
$faces[2] = "2";
$faces[3] = "3";
$faces[4] = "4";
$faces[5] = "5";
$faces[6] = "6";
$faces[7] = "7";
$faces[8] = "8";
$faces[9] = "9";
$faces[10] = "10";
$faces[11] = "11";
$faces[12] = "12";
$faces[13] = "13";

// create player's hand 
$card = array();

for ($i = 0; $i < 5; $i++)
{   
    $face_value = shuffle($faces);
    $suit_value = shuffle($suits);
    $card[$i] = $faces[$face_value].$suits[$suit_value];

    $counter = 0;
    while ($counter < 100)
    {
        if (in_array($card[$i], $card))
        {
            $face_value = shuffle($faces);
            $suit_value = shuffle($suits);
            $card[$i] = $faces[$face_value].$suits[$suit_value];
        }
        $counter++;
    }

    print ("<img src=\"../images/4/$card[$i].gif\">");

}
//创建数组
$suites=数组(“996”、“997”、“998”、“999”);
//创建面阵列
$faces=array();
$faces[1]=“1”;
$faces[2]=“2”;
$faces[3]=“3”;
$faces[4]=“4”;
$faces[5]=“5”;
$faces[6]=“6”;
$faces[7]=“7”;
$faces[8]=“8”;
$faces[9]=“9”;
$faces[10]=“10”;
$faces[11]=“11”;
$faces[12]=“12”;
$faces[13]=“13”;
//创建玩家的手牌
$card=array();
对于($i=0;$i<5;$i++)
{   
$face_value=洗牌($faces);
$suit_value=洗牌($suites);
$card[$i]=$faces[$face_值]。$SUTTES[$SUTTES_值];
$counter=0;
而($counter<100)
{
if(在_数组中($card[$i],$card))
{
$face_value=洗牌($faces);
$suit_value=洗牌($suites);
$card[$i]=$faces[$face_值]。$SUTTES[$SUTTES_值];
}
$counter++;
}
打印(“”);
}

简单地设置一个包含52个元素的数组可能更有效,每个元素对应一张卡

$cards = range(0,51);
shuffle($cards);
$hand = array();
for ($i = 0; $i < 5; $i++)
{
  $hand[$i] = $cards[$i];
}
这将防止重复


编辑:西装和军衔颠倒了。它们现在应该是正确的。

因为您说您喜欢简单,所以可以使用range()创建数组

为避免获得重复的手牌,请在分配新手牌之前检查$card数组

新代码如下所示:

// create suits array
$suits = range(996, 999);

// create faces array
$faces = range(0, 13);

// create player's hand  
$card = array();

while ( count($card) < 5 )
{   
    $face_value = shuffle($faces);
    $suit_value = shuffle($suits);
    $newcard = $faces[$face_value].$suits[$suit_value];

    if ( in_array($card, $newcard) ) {
        $card[] = $newcard;
        print ("<img src=\"../images/4/$newcard.gif\">");
    }
}
//创建数组
$suites=范围(996999);
//创建面阵列
$faces=范围(0,13);
//创建玩家的手牌
$card=array();
while(计数($card)<5)
{   
$face_value=洗牌($faces);
$suit_value=洗牌($suites);
$newcard=$faces[$faces\u value]。$suits[$suits\u value];
if(在_阵列中($card,$newcard)){
$card[]=$newcard;
打印(“”);
}
}

我肯定会创建一个包含所有52张卡的牌组,如下所示:

// create suits array
$suits = range(996, 999);

// create entire deck
$deck = range(0, 51);

shuffle($deck);

// create player's hand
for ($i = 0; $i < 5; $i++) {
    $suit_value = $suits[$deck[$i] % 4];
    $face_value = floor($deck[$i] / 4) + 1;

    print ("<img src=\"../images/4/{$face_value}{$suit_value}.gif\">");
}
//创建数组
$suites=范围(996999);
//创建整个甲板
$deck=范围(0,51);
洗牌($牌组);
//创建玩家的手牌
对于($i=0;$i<5;$i++){
$suit_value=$suits[$deck[$i]%4];
$face_值=地板($CACK[$i]/4)+1;
打印(“”);
}

删除重复项?您可以使用。顺便说一下,您可以使用
$faces=range(1,13)保存13行:)如果你能使用答案,你能接受吗?我想你的西装和等级颠倒了。为什么我会这么做。谢谢你,@briancaint这就是我要做的。创建一个虚拟牌组并将其分配给一个阵列,当与玩家交易时从阵列中弹出。
// create suits array
$suits = range(996, 999);

// create entire deck
$deck = range(0, 51);

shuffle($deck);

// create player's hand
for ($i = 0; $i < 5; $i++) {
    $suit_value = $suits[$deck[$i] % 4];
    $face_value = floor($deck[$i] / 4) + 1;

    print ("<img src=\"../images/4/{$face_value}{$suit_value}.gif\">");
}