Игра в бинго 6×6: Когда на карте есть нарисованный номер, добавьте +1 к 7-му столбцу и строке нарисованного номера.

Я делаю упрощенную игру в бинго с PHP, заполненным случайными числами 6×6 между 10 и 70. Каждая строка находится в своем собственном диапазоне (например, 10-19, 20-29 и т. Д.)

Игра в бинго должна играть так:

  • Карта заполняется цифрами
  • Числа рисуются случайным образом
  • Если карта содержит нарисованный номер, строка и столбец этого номера помечаются +1
  • Если строка, столбец или оба достигают 6, рисование останавливается, и появляется Бинго (строка или столбец с 6 — зеленым).

Готовая игра в бинго

Чтобы «пометить» строки и столбцы, я должен использовать 7-й столбец и 7-й ряд. Каждый cel в 7-й строке и столбце начинается с 0. Для каждого числа, найденного в строке или столбце, cel в 7-й строке и 7-м столбце получает +1. Смотрите пример ниже:

Нет нарисованных номеров

Когда, например, номер 18 нарисован:

Когда № 18 нарисован

Текущий код, который я использую для создания карты:

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

for ($rownumber = 0; $rownumber < 6; ++$rownumber) {
$index = mt_rand(0,count($deck) - 1);

$number = $deck[$index];

$card[$row][] = $row . $number;

unset($deck[$index]);

$deck = array_values($deck);

}
}

return $card;}

Что я не могу понять, так это как я могу добавить этот 7-й столбец и 7-й ряд в массив, а затем, когда число на карте нарисовано, добавить +1 к этой конкретной строке / столбцу?

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

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

РЕДАКТИРОВАТЬ:

<?php
mt_srand((double)microtime()*1000000);

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);for ($rownumber = 0; $rownumber < 6; ++$rownumber) {

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

}

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

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

// Kaart vullen
$card = generateCard();

// Print the card
function printCard($card){ ?>
<table border="1" cellspacing="0" cellpadding="5">
<!-- row -->
<?php foreach ($card as $index => $rij) { ?>
<tr>
<!-- add 6 numbers to row -->
<?php foreach ($rij as $columnIndex => $number) { ?>
<td><?php echo $number ?></td>
<?php } ?>
</tr>
<?php } ?>
</table>
<?php }$getrokkenGetallen = array();

$deck = range(10,69);

$bingo = false;

// Draw numbers while there is no bingo
while (!$bingo){
//for($i = 0; $i < 60; $i++ ){

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

$number = $deck[$index];

// Check if random number is in drawn numbers
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 < 6; $row++) {
for ($rownumber = 1; $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(5, $card[$row]) || in_array(5, $card[$rownumber])){
$bingo = true;
echo 'bingo';
}
}

// While developing
echo printCard($card);

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

1

Решение

Таким образом, вы можете легко установить свою последнюю строку и последний столбец в текущей функции:

for ($row = 1; $row < 7; ++$row)
{
$card[$row] = array();

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

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

Чтобы проверить, существует ли номер, вам придется снова проанализировать вашу карту, и если вы найдете номер, вы будете в основном на столбце и строке, которые хотите увеличить:

$tab = generateCard();

$number = 18;

function checkNumber($number, &$tab) {
for ($col = 0; $col < 6; $col++) {
for ($row = 1; $row < 7; $row++) {
if ($tab[$col][$row] == $number) {
// Set color to green however your want
$tab[$col][8] += 1; // Increment col
$tab[7][$row] += 1; // Increment row
return true;
}
}
}
return false;
}

$numberWasFound = checkNumber($number, $tab);

echo $numberWasFound ? 'Yes !' : 'No :(';
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]