【问题标题】:How to solve my PHP random dice thrower?如何解决我的 PHP 随机掷骰子?
【发布时间】:2014-02-01 14:40:15
【问题描述】:

我是 PHP 新手,正在尝试编写一个 PHP 脚本,该脚本应该模仿一遍又一遍地掷骰子,直到每个数字至少掷一次。 我进行了很多尝试,包括许多不同的构建循环的方法,但总是会出现某种错误。 无论我使用什么方法,我总是在骰子的每一面都设置一个计数器,如下所示:

$rollCount1 = 0;
$rollCount2 = 0;
$rollCount3 = 0;
$rollCount4 = 0;
$rollCount5 = 0;
$rollCount6 = 0;

如果使用数组,它看起来像这样:

$diceSides = array (1,2,3,4,5,6);

这就是我的“while”循环的样子:

while ($rollCount1 > 0 && $rollCount2 > 0 && $rollCount3 > 0 && $rollCount4 > 0 && $rollCount5 > 0 && $rollCount6 > 0) {
    $roll = rand(1,6);
        if ($roll == 1) {
            echo "<div class=\"dice\">$roll</div>";
            $rollCount1 ++;
        }
        if ($roll == 2) {
            echo "<div class=\"dice\">$roll</div>";
            $rollCount2 ++;
        }
        if ($roll == 3) {
            echo "<div class=\"dice\">$roll</div>";
            $rollCount3 ++;
        }
        if ($roll == 4) {
            echo "<div class=\"dice\">$roll</div>";
            $rollCount4 ++;
        }
        if ($roll == 5) {
            echo "<div class=\"dice\">$roll</div>";
            $rollCount5 ++;
        }
        if ($roll == 6) {
            echo "<div class=\"dice\">$roll</div>";
            $rollCount6 ++;
        }
}

我对“for”循环的尝试:

for ($rollCount1 = 0, $rollCount2 = 0, $rollCount3 = 0, $rollCount4 = 0, $rollCount5 = 0, $rollCount6 = 0; $rollCount1 > 0, $rollCount2 > 0, $rollCount3 > 0, $rollCount4 > 0, $rollCount5 > 0, $rollCount6 > 0; $rollCount1++, $rollCount2++, $rollCount3++, $rollCount4++, $rollCount5++, $rollCount6++, $roll = rand(1,6), echo ("$roll") )

当我尝试“数组版本”时,我使用了

array_rand ($diceSides, $roll);

而不是

$roll = rand(1,6);

但它们都不起作用。

【问题讨论】:

  • 您到底想用for 循环做什么?它没有运行任何东西,因为第一个语句说 set $rollCount1 = 0 而第二个语句说 only loop while $rollCount1 &gt; 0。这永远不会发生,因为$rollCount10 开头。
  • 您的for 循环到底是什么?
  • 我认为第一个语句告诉代码从哪里开始,第二个语句应该循环多长时间。因此,只要所有 $roolCounts 不再为 0,它就会从 0 开始并循环,这意味着至少为 1。我看错了吗?

标签: php arrays loops random dice


【解决方案1】:

计算您在单独数组中滚动特定数字的次数,并在它不再包含任何零时退出循环:

$results = array_fill(1, 6, 0);   // Prepare counter array
do {
    $roll = rand(1,6);            // Random number
    echo "Rolled a $roll...\n";
    $results[$roll]++;            // Count the results
} while(in_array(0, $results));   // Check whether there are still unthrowns

Sample here.

【讨论】:

  • 太好了,完成了!但我没有得到 "$results = array_fill(1, 6, 0)" 命令,它到底在做什么?
  • 它从位置 1 开始用 6 个零填充数组 - 请参阅文档。
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-15
相关资源
最近更新 更多