Php 如何从玩家';谁的手?
我试着发一手五张牌给一个玩家,然后得分。我的计分程序似乎运行得很好,但我不时会遇到重复发牌的问题。我试着用一个while循环来检查是否有重复的卡片,但这似乎有点老套。我的代码如下。请记住,我绝对是新手,所以解决方案越简单越好!非常感谢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
// 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\">");
}