所以,基本上,我一直在编写这个生命游戏 PHP 脚本。我的输出很奇怪,我无法弄清楚! 整个方案由一个名为 $world 的二维数组组成,其中每个值对应一个可以为 1 或 0(存活或死亡)的 2 态单元。每个单元格有 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 个这样的状态之间振荡。规则似乎没有正确应用!
最佳答案
在纸上浏览一下,看看结果如何。您应该能够在几次循环后判断出计算不正确的地方。
关于php - 生命游戏 (PHP)- 不理解我的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8497275/