Многомерный массив карт Бинго, дающий неопределенное смещение в последнем столбце

0

У меня есть бинго-карта 6x6, которая генерируется со случайными числами от 10 до 70. 7-я строка и 7-я колонка используются для подсчета обратных чисел, которые находятся на карте. Когда строка или столбец достигает 6, есть бинго.

Конечный результат, который я получаю, прав, но в процессе получения там несколько вещей идут не так.

В моей функции generateCard я создаю строки и столбцы чисел для карты. Я думаю, что проблема заключается в этой функции.

function generateCard()
{

$card = array();

    for ($row = 1; $row < 8; ++$row)
    {

        $card[$row] = array();

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

        for ($kolom = 1; $kolom < 8; ++$kolom) {

            $index = mt_rand(0,count($deck) - 1);
            $number = $deck[$index];
            $card[$row][] = $row . $number;
            unset($deck[$index]);
            $deck = array_values($deck);

        }
        //Test
        printCard($card);

        // 7th column
        $card[$row][7] = 0;
    }
    //Test
    printCard($card);

    // 7th row
    for ($kolom = 1; $kolom < 7; ++$kolom){
        $card[7][$kolom] = 0;
    }

//Test
printCard($card);
return $card;
}

Я поставил несколько функций printCard, чтобы проверить результат.

Первый тест над созданием 7-го столбца дает мне тонну неопределенных заметок 7. Я понял, что это происходит потому, что столбец не существует, но когда я пытаюсь создать это раньше, я все равно получаю уведомления.

Второй тест выше 7-й строки показывает, что 7-я строка (которая должна быть 0) заполняется цифрами. Это будет перезаписано после 0 значений. Я решил, что могу исправить это, поставив $ row <7 и $ kolom <7, но когда я это сделаю, карта не будет напечатана вообще.

Мне интересно, почему я получаю все эти неопределенные уведомления о смещении последнего столбца (даже когда я его создаю ранее), и почему я не могу использовать $ row <7 и $ column <7 в обоих циклах генерации карты чтобы не заполнить последнюю строку и столбец (7x7) значениями. Они должны быть 0 до начала игры в бинго.

Есть ли у вас какие-либо предложения?

Я думаю, что я не замечаю здесь нескольких вещей. Здесь я поставлю полный код:

mt_srand((double)microtime()*1000000);

function generateCard()
{

$card = array();

for ($row = 1; $row < 8; ++$row)
{

    $card[$row] = array();

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

    for ($kolom = 1; $kolom < 8; ++$kolom) {

        $index = mt_rand(0,count($deck) - 1);
        $number = $deck[$index];
        $card[$row][] = $row . $number;
        unset($deck[$index]);
        $deck = array_values($deck);

    }
    //Test
    printCard($card);

    // 7th column
    $card[$row][7] = 0;
}
//Test
printCard($card);

// 7th row
for ($kolom = 1; $kolom < 7; ++$kolom){
    $card[7][$kolom] = 0;
}

//Test
printCard($card);
return $card;
}


function printCard($card){ ?>
<table border="1" cellspacing="0" cellpadding="5">
    <?php for($rij = 1; $rij < 8; $rij++) { ?>
        <tr> 
            <?php for ($kolom = 1; $kolom < 8; $kolom++) { ?>
                <td<?php if (($card[$rij][7] == 6) || ($card[7][$kolom] == 6)) {  echo ' style="background-color:green"'; } ?>><?php echo $card[$rij][$kolom]; ?></td> 
            <?php } 
            } ?>
        </tr>
</table>
<?php }

$card = generateCard();

$getrokkenGetallen = array();

$deck = range(10,69);

$bingo = false;

while (!$bingo){

$index = mt_rand(0,count($deck) - 1);

$number = $deck[$index];


if(!in_array($number, $getrokkenGetallen)){

    unset($deck[$index]);

    $deck = array_values($deck);

    $getrokkenGetallen[] = $number;

    for ($row = 1; $row < 7; $row++) {
        for ($kolom = 1; $kolom < 7; $kolom++) {           
            if ($card[$row][$kolom] == $number) {

                $card[$row][7] += 1;
                $card[7][$kolom] += 1;

                if(($card[$row][7] == 6) || ($card[7][$kolom] == 6)){
                        $bingo = true;
                }
                break; 
            }  
        }
    }
}
}

echo '<h2>Bingokaart waarop BINGO is gevallen</h2>';

printCard($card);

echo '<p><strong>Getrokken getallen:</strong><br>';
foreach($getrokkenGetallen as $value)
{
    echo $value . ' ';
}
echo '</p>';


echo '<p><strong>Aantal getallen dat is getrokken:</strong> ';
echo count($getrokkenGetallen);
echo '</p>';

Пример вывода:

Изображение 174551

Заранее благодарю за любую помощь или предложения.

  • 0
    Есть ли причина, по которой строки в ваших карточках бинго всегда содержат числа в последовательных степенях по десять, а не просто набор случайных чисел? Я понимаю, что это не будет иметь большого значения для распределения чисел, это просто эстетическая вещь.
  • 0
    Да, каждая строка содержит свой диапазон чисел, начиная с 10-19, 20-29 и так далее. Это часть результата, который мне нужен, но он также делает его красивым и организованным.
Теги:
arrays
multidimensional-array
loops

1 ответ

0
Лучший ответ

Я не совсем уверен, откуда возникла ваша ошибка, и я не являюсь обычным пользователем PHP, но если я изменил функцию generateCard на это:

function generateCard(){

  $card = array();

  for ($row = 1; $row < 8; ++$row){

    $card[$row] = array();
    $deck = range($row*10, $row*10+9);
    shuffle($deck);
    for($col = 1; $col < 8; ++$col){
      if($row == 7 OR $col == 7){
        $card[$row][$col] = 0;
      }else{
        $card[$row][$col] = $deck[$col];
      }
    }
  }

  //Test
  printCard($card);
  return $card;
}

Все работает так, как ожидалось. Это немного проще, чем маршрут, который вы отправляете, я думаю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню