0

我正在尝试建立一个带有或不带有炸弹的桌子(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++;
    }
4

1 回答 1

2

您正在以错误的方式处理此问题。由于您要累积 10 个数字,因此请使用数组来保存它们。此外,由于您想从 36 个中选择 10 个(这是一小部分的相当大的一部分),因此最好的方法是:

$squares = array_fill_keys(range(1, 36), true);
$bombs = array_rand($squares, 10);

然后,您可以检查 square $x 是否有炸弹

$hasBomb = in_array($x, $bombs);
于 2013-04-18T09:39:15.113 回答