У меня есть бинго-карта 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>';
Пример вывода:
Заранее благодарю за любую помощь или предложения.
Я не совсем уверен, откуда возникла ваша ошибка, и я не являюсь обычным пользователем 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;
}
Все работает так, как ожидалось. Это немного проще, чем маршрут, который вы отправляете, я думаю.