所以,基本上,我一直在写这个生命游戏PHP脚本。我的输出很疯狂,我搞不懂!整个方案由一个名为$world的二维数组组成,其中每个值对应于一个可以是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这样的状态。规则似乎没有得到正确的应用!
发布于 2011-12-13 22:54:52
在代码中你显示什么都没有问题..。您可以将if语句合并成一个但仍然较小的细节。因此,查看并确保$j_minus、$i_right等值实际上是您所期望的。确保在任何时候都不是newworld = world (这里看起来不是那样,但我们看不到它所处的循环,您可以在其中更新世界)。正如建议的那样,手工编写一个示例,您应该知道您的程序哪里出错了。最后确保这不是正确的答案..。有时,生活在生命的游戏中停滞不前。
发布于 2011-12-13 22:45:28
在纸上浏览一下,看看结果如何。您应该能够在几个循环之后判断出它没有正确计算的地方。
发布于 2011-12-13 22:56:11
从纯粹可读性的角度来看,我认为您最好这样写:
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等变量。
https://stackoverflow.com/questions/8497275
复制相似问题