gpt4 book ai didi

c - John Conway 的生命游戏 - C 中的基本实现

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:33:31 24 4
gpt4 key购买 nike

John Conway's Game of Life - Set of Rules

  1. Any live cell with fewer than two live neighbours dies, as if caused by underpopulation.
  2. Any live cell with more than three live neighbours dies, as if by overcrowding.
  3. Any live cell with two or three live neighbours lives on to the next generation.
  4. Any dead cell with exactly three live neighbours becomes a live cell.

在过去的几个小时里,我一直致力于用 C 语言实现 John Conway 的《生命游戏》。我要做的是在 K 次连续迭代后显示板的状态。作为输入,我使用二维数组的行数 (int n) 和列数 (int m)、数组的组件(1 表示存活,0 表示死亡)和世代数 (K)。

我已经成功地使用平面方法实现了游戏。

enter image description here

平面方法是什么意思,您可以在左侧网格中看到,我们在其中检查 N、NW、S、SW 等黑框的邻居。我的算法对此工作得很好,'life' 函数看起来像这样。为此,我用零包围了两条边缘线/列。

void life(int a[100][100],int n,int m) {
//Copies the main array to a temp array so changes can be entered into a grid
//without effecting the other cells and the calculations being performed on them.
int count;
copy(a, temp, n ,m);
for(int i = 1 ; i <=n ; i++) {
for(int j = 1; j <= m; j++) {
count = 0;
count = a[i-1][j] + a[i][j-1] + a[i+1][j] + a[i][j+1] + a[i-1][j+1]
+ a[i+1][j-1] + a[i-1][j-1] + a[i+1][j+1];
//The cell dies.
if(count < 2 || count > 3)
temp[i][j] = 0;
//The cell stays the same.
if(count == 2)
temp[i][j] = a[i][j];
//The cell either stays alive, or is "born".
if(count == 3)
temp[i][j] = 1;
}
}
//Copies the completed temp array back to the main array.
copy(temp, a, n ,m);
}

但是在第二个网格上,我们注意到每个框正好有八个邻居,无论它在 map 上的位置如何。要以这种方式检查所有邻居,我应该使用环形方法。

但我无法真正理解这个概念,我的意思是我理解什么是环面,但我就是找不到一种方法来实现并在代码中编写检查函数...

话虽如此,有人可以解释一下如何思考并编写这样的方法吗?

最佳答案

在处理您不理解的问题时,通常先尝试解决一个更简单的问题会更容易。

在生命游戏中,您有一个二维网格。如果我们仅通过一维来简化事情会怎样?如果您只有一行而不是网格怎么办?您将如何处理使行的第一个和最后一个元素相邻?

关于c - John Conway 的生命游戏 - C 中的基本实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com