【问题标题】:Conway's Game of Life's rules dont apply properly康威的生命游戏规则不适用
【发布时间】:2018-11-03 15:08:17
【问题描述】:

我目前开始学习 Java,并尝试重新创建康威的生命游戏。我的代码有点像细胞死亡和出生,但它们似乎没有遵循预期的规则。我正在使用以下两种方法来应用规则:

public boolean nextState( int row, int col )
{
    if(a[row][col]==false)                                          //dead cells
    {
        int neighbors=0;
        for(int r=row-1; r<=row+1; r++)
        {
            for(int c=col-1; c<=col+1; c++)
            {
                if(r>=0 && c>=0 && r<a.length && c<a[0].length)        //exclude edges
                {
                    if(a[r][c])
                    {
                       neighbors++;
                    }
                }
            }
        }
        if(neighbors==3)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
    else                                                            //alive cells
    {
        int neighbors=-1;
        for(int r=row-1; r<=row+1; r++)
        {
            for(int c=col-1; c<=col+1; c++)
            {
                if(r>=0 && c>=0 && r<a.length && c<a[0].length)    //exclude edges
                {
                    if(a[r][c])
                    {
                        neighbors++;
                    }
                }
            }
        }
        if(neighbors==3 || neighbors==2)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
}

public void nextGeneration()
{
    for(int r=0; r<a.length; r++)
    {
        for(int c=0; c<a[0].length; c++)
        {
            a[r][c]=nextState(r,c);
        }
    }
}

nextState 返回单元格 a[row][col] 在下一代中是死的还是活着的,这取决于它的当前状态和活着的邻居的数量。

nextGeneration 将 nextState 应用于所有单元格。

我很难理解为什么某些单元格的状态确实发生了变化,但并未以预期的方式发生变化。

【问题讨论】:

  • 欢迎来到 SO!只是一个提示,想想你将 nextState(r, c) 的结果存储在哪里,以及它如何影响对 nextState(r, c)next 调用。

标签: java multidimensional-array conways-game-of-life


【解决方案1】:

在康威的生命游戏中,单元格必须就地更新。相反,您的函数 nextGeneration 应该使用当前网格的值并将结果写入不同的网格。

【讨论】:

  • 请参阅this answer 以获取为下一代使用单独数组的工作示例。
  • 非常感谢,我发现了我的错误。现在真的很有意义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 2017-03-15
  • 1970-01-01
相关资源
最近更新 更多