【问题标题】:6x6 Bingo game: When a drawn number is on the card, add +1 to the 7th column and row of the drawn number6x6 宾果游戏:当牌上有抽到的号码时,抽到的号码第 7 列第 7 行加 +1
【发布时间】:2015-05-06 15:01:56
【问题描述】:

我正在使用 PHP 制作一个简化的宾果游戏,其中填充了 10 到 70 之间的 6x6 随机数。每一行都在它自己的范围内(例如 10-19、20-29 等)

宾果游戏应该是这样玩的:

  • 卡片上填满了数字
  • 随机抽取数字
  • 如果卡片中包含抽出的号码,则该号码的行和列将标记为 +1
  • 如果一行、一列或两者都达到 6,则绘图停止并出现 Bingo(6 的行或列为绿色)。

要“标记”行和列,我应该使用第 7 列和第 7 行。第 7 行和第 7 列中的每个 cel 从 0 开始。对于在行或列中找到的每个数字,第 7 行和第 7 列中的 cel 得到 +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>';
?>

【问题讨论】:

    标签: php arrays multidimensional-array nested-loops


    【解决方案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 :(';
    

    【讨论】:

    • 这正是我想要的,谢谢。如果可以的话,我还有一个问题。我在帖子中添加了我当前的代码。您如何为达到宾果游戏的行/列提供背景颜色?所以达到 6 的每一列/行都应该变成绿色。
    猜你喜欢
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2014-04-02
    • 1970-01-01
    • 2013-08-31
    • 2023-04-03
    相关资源
    最近更新 更多