【发布时间】:2015-05-07 01:31:47
【问题描述】:
我有一个简单的宾果游戏,从池中抽取随机数,然后检查它们是否在随机生成的 6x6 宾果卡上。
在宾果卡的第 7 列和第 7 行中,脚本计算在该行或列中找到了多少个抽奖号码。当一行或一列的数字都画完后,第 7 行或第 7 列的单元格将包含 6。当达到 6 时,就有宾果游戏了。
到目前为止,这似乎有效。我必须添加的最后一件事是导致宾果游戏的行或列中的单元格的绿色背景。见例子:
目前情况:
我还必须隐藏第 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>
如果您想查看它是如何运行的,代码应该可以在粘贴时工作。提前感谢您的任何帮助或建议!
【问题讨论】:
-
如果您想保留 foreach 循环,您可以使用计数器来计算打印的行数,而不打印最后一行。列也一样。这样你可以隐藏第 7 行和第 7 列。
标签: php arrays loops for-loop multidimensional-array