【问题标题】:Game of Life(PHP)- not understanding my output生命游戏(PHP)- 不理解我的输出
【发布时间】:2011-12-13 22:41:39
【问题描述】:

所以,基本上,我一直在编写这个生命游戏 PHP 脚本。我的输出很古怪,我无法弄清楚! 整个方案由一个名为 $world 的二维数组组成,其中每个值对应于一个 2 状态单元格,该单元格可以是 1 或 0(活着或死去)。每个单元格有 8 个邻居。 计算系统下一个状态的规则如下:

  1. 如果您有 2-3 个活着的邻居(1 个),那么您在下一回合还活着。
  2. 否则你就死定了。

我的实现如下: (注意:$j_minus$i_plus 等指的是$j-1 等,但要考虑边缘)

for($i=0;$i<$size;$i++)
{ 
    for($j=0;$j<$size;$j++) 
    {

            if( ($world[$j_minus][$i] + $world[$j_plus][$i] + $world[$j][$i_minus] + $world[$j][$i_plus]+$world[$j_minus][$i_minus]+$world[$j_minus][$i_plus]+$world[$j_plus][$i_minus]+$world[$j_plus][$i_plus]) > 3 )
            {
                $new_world[$j][$i]=0;

            }

            else if( ($world[$j_minus][$i] + $world[$j_plus][$i] + $world[$j][$i_minus] + $world[$j][$i_plus]+$world[$j_minus][$i_minus]+$world[$j_minus][$i_plus]+$world[$j_plus][$i_minus]+$world[$j_plus][$i_plus])>= 2 )
            {
                $new_world[$j][$i]=1;

            }
            else {$new_world[$j][$i]=0;}
        }

}

应用这些规则后,使 $new_world 成为系统的新状态,我将数组打印到屏幕上:

for($i=0;$i<$size;$i++)
{ 
    for($j=0;$j<$size;$j++) 
    {

        echo $new_world[$i][$j]." ";
    }
        echo "</p>";
}

无论$world 的初始状态如何,我得到的要么是充满线条和大块的完全停滞状态,要么是 2-3 个此类状态之间的振荡。规则似乎没有正确应用!

【问题讨论】:

    标签: php rules conways-game-of-life


    【解决方案1】:

    在纸上浏览一下,看看结果如何。您应该能够在几个循环后知道它没有正确计算的地方。

    【讨论】:

      【解决方案2】:

      从纯粹的可读性的角度来看,我认为你最好这样写:

      for ($i=0; $i < $size; $i++) {
      
          for ($j = 0; $j < $size; $j++) {
      
              $liveNeighbours = $world[$j_minus][$i]
                              + $world[$j_plus][$i]
                              + $world[$j][$i_minus]
                              + $world[$j][$i_plus]
                              + $world[$j_minus][$i_minus]
                              + $world[$j_minus][$i_plus]
                              + $world[$j_plus][$i_minus]
                              + $world[$j_plus][$i_plus];
      
              if ($liveNeighbours == 2 || $liveNeighbours == 3) {
                  $new_world[$j][$i] = 1;
              } else {
                  $new_world[$j][$i] = 0;
              }
      
          }
      
      }
      

      正确地间隔代码可以极大地帮助您发现逻辑中的错误。我无法确切告诉您问题出在哪里,因为您没有向我们展示您是如何创建 $j_plus 等变量的。

      【讨论】:

        【解决方案3】:

        在您显示的代码中没有任何问题...您可以将 if 语句组合成一个但仍然是次要的细节。因此,查看并确保 $j_minus、$i_right 等值实际上是您所期望的。确保在任何时候都不是 newworld = world (它在这里看起来不像,但我们看不到它存在于你更新世界的循环中)。正如建议的那样,手工制作一个例子,你应该看到你的程序哪里出错了。最后确定这不是正确的答案……有时生活在生活的游戏中停滞不前。

        【讨论】:

        • 非常感谢大家的建议。非常感谢!
        猜你喜欢
        • 2013-11-30
        • 1970-01-01
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 2013-12-01
        • 1970-01-01
        相关资源
        最近更新 更多