我正在用一个malloc'd数组实现康威的人生游戏,它是一个0和1的网格,任何地方用0
我打印一个白色背景空间表示一个"死"单元格,任何地方用1
我打印一个黑色背景空间表示一个"活"单元格.
我在更新每个周期的单元格时遇到了一些问题.我的方法是使用getState()
函数,它只判断网格条目是0
还是1
,然后相应地返回一个值.我还有一个countN()
函数,它遍历网格,计算数字——计算角、边和中心的情况.我已经用几个例子彻底测试了它们,它们按照我的预期工作,对于给定的网格坐标,它总是返回正确的状态&;活动邻居的数量.
这就是我试图做的(伪代码):
void updateGrid(int **grid, int r, int c) {
copyGrid = grid;
for (i = 0; i < r; i++)
for (j = 0; j < c; j++) {
alive->getState(grid, i, j)
neighbours->countN(grid, i, j)
if (alive) {
if (neighbour < 2 || neigbour > 3)
copyGrid[i][j] = 0;
else
copyGrid[i][j] = 1;
} else {
if (neighbour == 3)
copyGrid[i][j] = 1;
else
copyGrid[i][j] = 0;
}
}
grid = copyGrid;
printGrid(grid, r, c)
}
有一个简单的调用函数,它只是从输入文件中生成一个初始网格,清除屏幕,然后调用updateGrid()
,并在每个周期后Hibernate ,直到一定数量的周期.初始网格是我所期望的,相邻函数和活动函数返回正确的值,但网格更新不正确,输出非常扭曲.
例如,使用1和0:
Input: Expected Output: Actual Output
0 0 0 0 1 0 0 1 1
1 1 1 0 1 0 1 0 1
0 0 0 0 1 0 0 0 0
任何提示都将不胜感激!