首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生命游戏(PHP)-不理解我的输出

生命游戏(PHP)-不理解我的输出
EN

Stack Overflow用户
提问于 2011-12-13 22:41:39
回答 3查看 1.2K关注 0票数 3

所以,基本上,我一直在写这个生命游戏PHP脚本。我的输出很疯狂,我搞不懂!整个方案由一个名为$world的二维数组组成,其中每个值对应于一个可以是1或0(活着或死亡)的状态单元。每个细胞有8个邻居。计算系统下一个状态的规则如下:

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

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

代码语言:javascript
复制
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成为系统的新状态)之后,我将数组打印到屏幕上,如下所示:

代码语言:javascript
复制
for($i=0;$i<$size;$i++)
{ 
    for($j=0;$j<$size;$j++) 
    {

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-13 22:54:52

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

票数 1
EN

Stack Overflow用户

发布于 2011-12-13 22:45:28

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

票数 3
EN

Stack Overflow用户

发布于 2011-12-13 22:56:11

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8497275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档