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();
}

これは2つの変数に基づいて数字を生成し、各数字は賞にリンクします。明らかに、どの番号が在庫にあるかは考慮されていないため、私が持っていない賞品を配ることになり、優位に立つことはできません。

アイテムが在庫にあるかどうかを確認する簡単な方法が必要です。在庫がある場合は、獲得できる賞品のリストに追加されます。一部の賞品が(多くの場合)より頻繁に表示されるように、エッジが必要です。コード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";
}

私はまだ持っていない賞品を配っています-または、コードがストックされているかどうか、それが配られているかどうか、そしてそれが賞品を与えていないかデフォルトの賞品を与えていないかどうかを確認するために、埋め込みを追加することができます。

しかし、これは、在庫のあるコードが多いほど、与えられたくないコードが与えられる可能性が高くなることを意味します。事前定義されたオッズで完全に公平であることが本当に必要です。

ですから、それが理にかなっていることを願っていますが、それは過度に複雑な問題ではありませんが、非常に珍しい問題だと思います。

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からではなく、配列インデックス(キー)から取得できます。

一部のアイテムを選択する機会を増やしたい場合は、たとえば2回追加できます。

于 2013-03-21T12:50:19.903 に答える
0

これを行う1つの方法(アイテムがあまりない場合)は、の配列を作成し、その配列でItemID使用shuffle()することです。次に、最初の3つの要素を選択して(またはこの選択をrand()またはでランダム化してmt_rand())、表示する数値にします。このようにして、存在しないアイテムを選択できます。このアルゴリズムを変更して在庫レベルをチェックし、ItemID決定時に在庫がないか少ないかを追加しないようにすることができます(codes選択するアイテムに必要な最小在庫を定義する新しい列を使用する場合があります)。

ItemID優位に立つために、より頻繁に選択したいアイテムにいくつかの重複を追加することができます。テーブルに別の列を追加してcodes、特定のアイテムを含める回数を指定できるため、最低3つ(3つの数値に一致させるため)で、より多くItemID選択するsに大きな値を割り当てることができます。多くの場合、アルゴリズムによって。また、プレゼントしたくないアイテムには0を入れる可能性もあります。

于 2013-03-21T13:04:17.473 に答える