3

我需要一些关于我在 PHP 中制作的脚本的帮助。目前它被设置为老虎机风格的游戏,用户可以支付一点钱并生成3个随机数字,每个数字链接到他们可以赢得的奖品。匹配 3 并赢得所述奖品。

不幸的是,因为我不会总是将每件物品作为奖品赠送,我需要一种方法来检查每个号码并确保它有库存:

$stock = $conn -> query('SELECT DISTINCT ItemID FROM codes WHERE Available = 1');

如果它有库存,请将其添加到一个算法中,该算法将随机选择 3 个数字。目前我有这样的设置:

function generate_numbers(){
global $numbers;
$numbers = array(
'0' => rand(1,2),
'1' => rand(1,2),
'2' => rand(1,2)
);
display_numbers();
}

它根据两个变量生成数字,每个数字都链接到一个奖品。显然它没有考虑到哪些号码有库存,这将导致我发放我没有的奖品,并且它不允许有优势。

我需要一种简单的方法来检查一件物品是否有货,如果有货,它会被添加到可以赢得的奖品列表中,我需要它有优势,这样一些奖品会出现(很多)比其他基于简单值的代码 X 有 0.25% 的机会出现,而 cody Y 有 50% 的机会出现。

如果我用更大范围的数字设置它:

function generate_numbers(){
global $numbers;
$numbers = array(
'0' => rand(1,100),
'1' => rand(1,100),
'2' => rand(1,100)
);
display_numbers(); }

if (($numbers[0] > 0) && ($numbers[0] < 40)){
echo "you win prize x";
else if (($numbers[0] > 40) && ($number[0] < 50)){
echo "you win prize y";
else {
echo "you win prize z";
}

我仍然要么发放我没有的奖品 - 或者我可以添加一个嵌入的 if else 来检查代码是否有库存,是否发放它,如果它不是不提供奖品或提供默认奖品.

但这将意味着我库存中的代码越多,获得它们的机会就越大,我不想这样做我真的希望它完全公平,具有预定义的赔率。

所以希望所有这些都是有道理的,这不是一个过于复杂的问题,但我认为这是一个非常不寻常的问题。

4

3 回答 3

3

扫描您的问题,我认为您需要更改您的查询

$stock = $conn -> query('SELECT DISTINCT ItemID FROM codes WHERE Available = 1 ORDER BY RAND()');

有了这个,你选择了前 3 个,你得到了 3 个随机奖品,

这是一个快速的解决方案。有机会它会更复杂让我想......

编辑

经过一些测试,我认为我明白了,

您需要在顶部添加一列,该列chance将是一个数字,然后该记录出现的机会是 N 上的 1,

额外的 where 代码是:

0 = FLOOR(RAND()*chance)

所以最终的代码是

$stock = $conn ->query(
    'SELECT DISTINCT ItemID FROM codes WHERE Available = 1 AND 0 = FLOOR(RAND()*chance) ORDER BY RAND()'
);
于 2013-03-21T12:47:28.403 回答
0

如果我理解正确,您可以从创建一系列可用奖品开始,并以查询开头。

所以数组将是:

{0 => prize1_id,
 1 => prize3_id,
 2 => prize4_id,
 // ...and so on
 }

然后您可以获取随机数,但不是来自奖品 ID,而是来自数组索引(键)。

如果您希望某些项目有更多机会被选中,例如可以添加两次。

于 2013-03-21T12:50:19.903 回答
0

你可以做到这一点的一种方法(如果你没有很多项目)是创建一个ItemIDs 数组并shuffle()在数组上使用。然后选择前三个元素(或使用 或 随机化此选择rand()mt_rand()作为您显示的数字。这样您就可以选择不存在的项目。您可以更改此算法以检查库存水平,以便它不会ItemID根据您的决定添加无库存或低库存(可能通过codes定义要选择的项目所需的最低库存的新列)。

为了获得优势,您可以ItemID为希望更频繁地选择的项目添加许多重复项。您可以在表格中添加另一列以指示您希望包含特定项目的次数,因此至少 3(以匹配三个数字)您可以为您希望被挑选更多codes的 for s 分配更大的值ItemID通常由算法决定。它还可以为您不想赠送的物品设置 0。

于 2013-03-21T13:04:17.473 回答