Я делаю упрощенную игру в бинго с PHP, заполненным случайными числами 6×6 между 10 и 70. Каждая строка находится в своем собственном диапазоне (например, 10-19, 20-29 и т. Д.)
Игра в бинго должна играть так:
Чтобы «пометить» строки и столбцы, я должен использовать 7-й столбец и 7-й ряд. Каждый cel в 7-й строке и столбце начинается с 0. Для каждого числа, найденного в строке или столбце, cel в 7-й строке и 7-м столбце получает +1. Смотрите пример ниже:
Когда, например, номер 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>';
?>
Таким образом, вы можете легко установить свою последнюю строку и последний столбец в текущей функции:
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 :(';
Других решений пока нет …