1

我正在开发一个刮刮卡游戏,用户从我/我的商店购买刮刮卡,然后可以通过刮掉数字并匹配 3 张图片来兑换该卡以赢取奖品

就像实体刮刮卡一样,我希望预先配置好奖品,以便我知道什么时候会中奖,但显然用户不知道,这样我就可以限制奖品,所以它不是真正的随机,而是随机谁中奖的条款..

我知道我将如何设置奖品,但我需要检查数组中的每个数据值以确保没有 3 个匹配的数字,除非他们真的赢了..

到目前为止我有这个(我会整理它并很快缩短代码)

$numbers = array(
    0 => rand(0,9),
    1 => rand(0,9),
    2 => rand(0,9),
    3 => rand(0,9),
    4 => rand(0,9),
    5 => rand(0,9),
    6 => rand(0,9),
    7 => rand(0,9),
    8 => rand(0,9)
    );

它只是随机生成 9 个数字和

echo "<table>";
    $i=0;
    for($x=0;$x<3;$x++){
    echo "<tr>";
       for($y=0;$y<3;$y++){
           echo "<td>" . $numbers[$i] . "</td>";
           $i++;
       }
    echo "</tr>";
    }

将它们排序为 3x3 表

我知道有命令 in_array() 将通过数组进行排序以查找某些值,但我不想运行一个无限循环检查每个值以查看是否匹配,因为它是劳动密集型的并且也会很混乱。

我正在寻找任何人可能有的建议,这样我就可以对数组进行排序,看看是否存在任何 3 个数字,如果存在,并且他们不应该(即用户实际上没有中奖)然后一个应更改为新号码。

所以提前感谢您的帮助,我期待您的建议

卢克

** * *编辑* *

+更多信息

为了挑选获胜者,我将使用这样的数据库查询

$stock = $conn -> query("SELECT DISTINCT * FROM codes WHERE Available = 1 AND 0 = FLOOR(RAND()*Chance) ORDER BY RAND()");

每个代码都有一定的获胜机会,如果匹配,则会显示,根据赢得的代码,将显示特定的奖品

$stock = $conn -> query("SELECT DISTINCT * FROM codes WHERE Available = 1 AND Win = 1);

'Win' 将是数据库中的一个表,每次有人玩游戏时它都会下降 1

所以每个代码都会有表格 Win 当它达到 1 时它将在下一场比赛中弹出

这是我能想到的两种我认为可行的方法,这两种方法都可以让我大致控制何时以及是否有人获胜,但第二种解决方案显然是一种更准确的方法

4

1 回答 1

2

如果发生三一,但防止三一发生,如何不更改数字。

function createScratchRange()
{
    $result = array();
    $options = array_merge(range(0,9), range(0,9));

    for ($i = 0; $i < 9; $i++)
    {
        $key =  array_rand($options, 1);
        $result[] = $options[$key];
        unset($options[$key]);
    }

    return $result;
}

您可能希望能够创造赢家:

function createWinner()
{
    $winningNumber = rand(0,9);

    $result = array();
    $possibleNumbers = range(0,9);
    unset($possibleNumbers[$winningNumber]);
    $options = array_merge($possibleNumbers,$possibleNumbers);

    for ($i = 0; $i < 9; $i++)
    {
        $key =  array_rand($options, 1);
        $result[] = $options[$key];
        unset($options[$key]);
    }

    // looks random now.. but no winning numbers... Lets just stick them in there.
    $keys = array_rand($result, 3);
    foreach($keys as $key)
    {
        $result[$key] = $winningNumber;
    }

    return $result;
}

并用于测试:

var_dump(createScratchRange());  // this will never give 3 identical numbers in the array.
var_dump(createWinner());  // this will ALWAYS give 3 identical numbers, but never 2 sets of 3 identical numbers
于 2013-04-25T13:27:14.483 回答