所以,基本上,我一直在写这个生命游戏PHP脚本。我的输出很糟糕,我无法理解! 整个方案由一个名为$ world的二维数组组成,其中每个值对应一个2状态单元,可以是1或0(活着或死亡)。每个小区有8个邻居。 计算系统下一个状态的规则如下:
我的实施如下:
(注意:$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个这样的状态之间的振荡。规则似乎没有正确应用!
答案 0 :(得分:3)
在纸上走过去看看它是如何发展的。您应该能够在几个循环之后判断它没有正确计算。
答案 1 :(得分:3)
从纯粹的可读性角度来看,我认为你最好这样写:
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
等变量。
答案 2 :(得分:1)
在代码中你没有看到任何错误...你可以将if语句组合成一个但仍然很小的细节。因此,请查看并确保$ j_minus,$ i_right等值实际上是您所期望的。确保在任何时候都不是newworld = world(它在这里看起来不像,但我们无法看到它存在于你更新世界的循环)。正如建议手动编写一个示例,您应该看到您的程序出错的地方。最后确保这不是正确的答案......有时候生活游戏中的生活停滞不前。