Игра в бинго: ячейки таблицы цветов нарисованных чисел на сгенерированной карте бинго

0

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

В 7-й колонке и 7-й строке бинго-карты скрипт подсчитывает, сколько нарисованных чисел найдено в этой строке или столбце. Когда все числа в строке или столбце будут нарисованы, ячейка в 7-й строке или столбце будет содержать 6. Когда она достигнет 6, есть бинго.

Пока это работает. Последнее, что я должен добавить, это зеленый фон для ячеек в строке или столбце, которые вызвали бинго. См. Пример:

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

Текущая ситуация:

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

Также мне нужно скрыть 7-й столбец и 7-ю строку. Они не должны отображаться на экране.

Есть ли у вас какие-либо предложения, чтобы дать цвет фона для столбца/столбца, достигшего бинго? И как я мог скрыть 7-й столбец и 7-я строка с экрана?

Мой текущий код:

<html>
<body>

<?php

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

// generate numbers for the bingo card
function generateCard()
{

$card = array();


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

        $card[$row] = array();

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

        // add 6 numbers to the row
        for ($rownumber = 0; $rownumber < 6; ++$rownumber) {
            // Random index
            $index = mt_rand(0,count($deck) - 1);

            // Random number from $deck
            $number = $deck[$index];

            // add row to random number (e.g. row 1 and number 8 = 18)
            $card[$row][] = $row . $number;

            // take out current random number so it wont be drawn again
            unset($deck[$index]);

            // Reset the index of $deck, so no unset is chosen
            $deck = array_values($deck);

        }

        // Last column
        $card[$row][] = 0;
    }

    // Last row
    for ($col = 0; $col < 6; ++$col){
        $card[7][$col] = 0;
    }


return $card;
}


$card = generateCard();

// Print card
function printCard($card){ ?>
<table border="1" cellspacing="0" cellpadding="5">

    <?php foreach ($card as $index => $rij) { ?>
        <tr> 

            <?php foreach ($rij as $columnIndex => $number) { ?>
                <td><?php echo $number ?></td>
            <?php } ?>
        </tr>
    <?php } ?>
</table>
<?php }


$getrokkenGetallen = array();

$deck = range(10,69);

$bingo = false;

// Keep drawing numbers till bingo is true
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;

    // Check if number is on the card
    for ($row = 0; $row < 7; $row++) {
        for ($rownumber = 0; $rownumber < 7; $rownumber++) {
            if(isset($card[$row][$rownumber])){
                if ($card[$row][$rownumber] == $number) {

                    // set color?

                    $card[$row][6] += 1; // Increment col
                    $card[7][$rownumber] += 1; // Increment row
                }
            }
        }
    }
}
// check if the 7th column or row contains 6 positive draws (5 for testing)
if(in_array(6, $card[$row]) || in_array(6, $card[$rownumber])){
    $bingo = true;
}
}



if($bingo){

printCard($card);


echo '<p>Drawn numbers are:<br>';
foreach($getrokkenGetallen as $value)
{
    echo $value . ' ';
}
echo '</p>';


echo '<p>Times drawn: ';
echo count($getrokkenGetallen);
echo '</p>';
} 
?>
</body>
</html>

Код должен работать, поскольку он вставлен, если вы хотите посмотреть, как он работает. Заранее благодарим за любую помощь или предложения!

  • 0
    Если вы хотите сохранить цикл foreach, вы можете использовать счетчик для подсчета напечатанных строк и не печатать последнюю строку. То же самое для столбцов. Таким образом, вы можете скрыть 7-й ряд и 7-й столбец.
Теги:
arrays
multidimensional-array
for-loop
loops

1 ответ

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

Этот код будет работать:

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

Мне пришлось изменить эту часть кода, потому что он не сделал правильной проверки для бинго:

// Keep drawing numbers till bingo is true
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;

        // Check if number is on the card
        for ($row = 0; $row < 7; $row++) {
            for ($rownumber = 0; $rownumber < 7; $rownumber++) {
                if(isset($card[$row][$rownumber])){
                    if ($card[$row][$rownumber] == $number) {

                        // set color?

                        $card[$row][6] += 1; // Increment col
                        $card[7][$rownumber] += 1; // Increment row
                        // check if the 7th column or row contains 6 positive draws (5 for testing)
                        if(($card[$row][6] == 6) || ($card[7][$rownumber] == 6)){
                            $bingo = true;
                        }   
                        break;
                    }
                }
            }
        }

    }
}

Лучшее место для проверки бинго - это то, где вы увеличиваете строку и столбец. В этот момент существует вероятность того, что строка или столбец достигнет 6.

  • 0
    Спасибо за ваш ответ, это действительно то, что я искал. Я заметил, что иногда более 2 строк / столбцов зеленого цвета одновременно. У вас есть идеи, что может вызвать это?
  • 0
    Потому что у вас есть бинго на более чем один ряд. Я проверю, если это правильно или, возможно, цифры не так.
Показать ещё 1 комментарий

Ещё вопросы

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