【发布时间】: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