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つの数字が存在するかどうかを確認できます.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 になると次のゲームで飛び出します。

これらは私が考えることができる2つの方法であり、うまくいくと思います。どちらの方法でも大まかにいつ誰かが勝つかを制御できますが、2番目の解決策は明らかにそれを行うより正確な方法です

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 に答える