所以,基本上,我一直在编写这个 Game of Life PHP 脚本。我的输出很古怪,我无法弄清楚!整个方案由一个名为 $world 的二维数组组成,其中每个值对应于一个 2 状态单元格,该单元格可以是 1 或 0(活着或死去)。每个单元格有 8 个邻居。计算系统下一个状态的规则如下:
- 如果您有 2-3 个活着的邻居(1 个),那么您在下一回合还活着。
- 否则你就死定了。
我的实现如下:(注意:$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 个此类状态之间的振荡。规则似乎没有正确应用!