7

私はこれらの2つの機能を持っています:

function drawNumber($drawnNumbers){
  $unique = true;

  while ($unique == true){
      $number = mt_rand(10, 69);
      if (!in_array($number, $drawnNumbers)){
        return $number;
        $unique = false;
      }
  }
}

 fillCard();  ?>

ビンゴゲームです。カードは乱数でいっぱいになります。しかし、私はこのようにそれを得ることができません:

column column column column column column
row 10     13     16     14     16     19
row 24     26     28     29     23     21
row 36     33     39     30     31     35
row 46     48     42     45     43     47
row 59     56     51     52     58     50
row 60     65     68     62     61     67

したがって、最初の行に 10 から 19 の数字、2 番目の行に 20 から 29 などを配置したいと思います。

私はこのようにしてみました

<?php drawnNumber():    $number = mt_rand(0,9);
fillArray():  $number = $row . $number; ?>

しかし、カードには二重の数字があるため、うまくいきません。

その前に、in_array を使用して別の方法で試してみました。

<?php 
function fillCard(){
      $card = array();

    /* fill card with random numbers */
    for($i = 0, $min = 10, $max = 19; $i < 6; $i++, $min+=10, $max += 10)
    {
        for($j = 0; $j < 6; $j++)
        {
        $number =  mt_rand($min,$max) ;
    if(!in_array($number, $card){
            $card['row' . $i]['column' . $j]['number'] = $number;
            $card['row' . $i]['column' . $j]['found'] = 0;
        }
        }
    }
var_dump($card);
return $card;
}  ?>

しかし、カードにはまだ二重の乱数があります。この 2 週間で他の方法をいくつか試しましたが、うまく連携できませんでした。一方が成功すると、もう一方は失敗します。

乱数は取得できますが、カード内の一意の乱数は取得できません。誰かが私を助けてくれることを願っています。(追加情報: これはビンゴ ゲームです。つまり、 drawNumber() は「ボール」であり、描画されて配列 $DrawingNumbers に格納されます。これらは一意の乱数でもあります。fillCard() は、ビンゴ カードを埋める関数であり、 $drawNumber が $card にあるかどうかを調べます)

誰かがそれを機能させる方法を教えてくれれば、助けていただければ幸いです。多分アルゴリズムの方法で、または他のコードで?前もって感謝します。

4

3 に答える 3

0
define('NB_ROWS', 6);
define('NB_COLS', 6);

$rows = range(10, NB_ROWS * 10, 10);

$bingo = array();

foreach($rows as $rowIndex)
{
    $availNumbers = range(0, 9);
    $line = array();
    for($cellIndex = 0; $cellIndex < NB_COLS; $cellIndex++)
    {
        // pick a random value among remaining ones for current line
        $numIndex = rand(0, count($availNumbers)-1); 
        list($value) = array_splice($availNumbers, $numIndex, 1);
        $line[] = $value + $rowIndex;
    }
    $bingo[] = $line;
}

print_r($bingo);
于 2013-08-20T12:17:13.240 に答える