生成随机数组

数码萤火虫

快速了解自己。这是我第一次用PHP编写代码。我拥有计算机信息系统学位,在大学(大约15年前)学习过C ++,VB,Cobol和Java,但从那时起就没有真正使用过它。我学到了一些东西后,又回到了我的脑海。

我正在尝试模拟用于随机纸牌游戏的随机纸牌的打开。最终结果将打印出4页。每页将列出12个卡号,以及卡上的所有信息。

这是我打算做的事情:

第一步:从不同范围生成180个随机数。每个数字代表游戏中的一张牌。

  • 范围1 = 35-74(116个数字)
  • 范围2 = 75-106(46个数字)
  • 范围3 = 107-134(16个数字,无重复)
  • 范围4 = 135-142(2个数字,无重复)

第二步:提取180个数字并将其分解为90对。

第三步:从90对中将其分解为4组,每组6对。

第四步:从4对6对中,列出每个号码的卡信息,并制作4个可打印页面,每对1页。

我已经创建了180个随机数。我仍在努力获取唯一编号。我试过为我需要的数字创建数组,但是它们都不起作用。这是我拥有的最后一个工作代码,它将生成我需要的180个数字,但是,需要固定范围3和4以不允许重复。

我目前对此编码的方式,它只是在屏幕上显示数字。我应该将它们存储在数组中吗?我只是完全以错误的方式处理吗?

<?php

// generate 116 common cards
echo "Commons: " . '<br />';
for ($commonfeed = 0; $commonfeed < 116; $commonfeed++) {
echo mt_rand(35, 74). '<br />';
}

// generate 46 uncommon cards
echo "Uncommons: " . '<br />';
for ($uncommonfeed = 0; $uncommonfeed < 46; $uncommonfeed++) {
echo mt_rand(75, 106). '<br />';
}

// generate 16 rare cards
echo "Rares: " . '<br />';
for ($rarefeed = 0; $rarefeed < 16; $rarefeed++) {
echo mt_rand(107, 134). '<br />';
}

// generate 2 super rare cards
echo "Super Rares: " . '<br />';
for ($superrarefeed = 0; $superrarefeed < 2; $superrarefeed++) {
echo mt_rand(135, 142). '<br />';
}

?>
蜂鸟

您可以尝试以下解决方案:

$cards = array();
// get cards per range

for($i = 0; $i < 116; $i++) {
    // range 1:
    $cards[] = mt_rand(35, 74); 
    // for the fun, let's also do range 2:
    if($i < 46) {
        $cards[] = mt_rand(75, 106);
    }
}

// range 3: (and range 4)
$rare = array();
$superrare = array();
for ($i = 107; $i <= 134; $i++) {
    $rare[] = $i;
    // range 4:
    if ($i <= 114) {
        $superrare[] = $i + 28;
    }
}
shuffle($rare);
shuffle($superrare); // not the best choice of randomness (check: http://stackoverflow.com/questions/5694319/how-random-is-phps-shuffle-function)

$cards = array_merge($cards, array_slice($rare, 0, 16));
$cards = array_merge($cards, array_slice($superrare, 0, 2));

// shuffle everything one more time since cards have been added randomly 
// to the deck
shuffle($cards);

// now when we have everything in $cards - 180 of random cards, we can
//    pack them
$pack1 = array_slice($cards, 0, 90);
$pack2 = array_slice($cards, 90, 90);

// always picking first n cards because they are all shuffled
$player1Drafted = array_slice($pack1, 0, 48);
$player2Drafted = array_slice($pack2, 0, 48);

// print it all
print_r(array('Player1' => $player1Drafted, 
              'Player2' => $player2Drafted));

最后,我不能完全确定我猜想起草过程还可以,但是在我看来,随机化是最大的问题,我已经解决了。再说一次,如果您认为改组还不够好,可以采取不同的方法,但这是另一回事了;)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章