我正在尝试建造一个带有炸弹的桌子(6x6)。我正在使用以下方法将36个区块中的10个炸弹随机化。但它每次都给我炸弹。
$i = 1;
$numbers = null;
$j = 0;
while ($j < 10)
{
$sample = rand (1,36);
if (strpos($numbers, $sample) === false)
{
$numbers = $numbers."".$sample.",";
$j++;
}
}
echo $numbers;
while ($i < 37)
{
if (strpos($numbers, $i) !== false)
{
echo '<td><button value="safe" onclick="bombcheck(this.id)"
id="'.$i.'" class="closed"></button></td>';
}
else
{
echo '<td><button value="bomb" onclick="bombcheck(this.id)"
id="'.$i.'" class="closed"></button></td>';
}
if ($i%6 == 0)
{
echo "</tr><tr>";
}
$i++;
}
答案 0 :(得分:2)
你正以错误的方式接近这一点。由于您要累积10个数字,请使用数组来保存它们。此外,由于你想从36个中选择10个(这是一个相当大的一小部分),最好的方法是:
$squares = array_fill_keys(range(1, 36), true);
$bombs = array_rand($squares, 10);
然后你可以检查方形$ x是否有一个带
的炸弹$hasBomb = in_array($x, $bombs);