康威的生命游戏(C) - 与二维数组索引不对应的坐标?

时间:2018-01-28 08:29:44

标签: c arrays conways-game-of-life

我正在尝试用C编写Conway的生命游戏。我创建了一个代表细胞的二维数组。我试图使用坐标系来解决游戏问题。

我编写了一个函数来创建一个暴力强制所有可能的邻居坐标组合的数组。

然后我使用双嵌套for循环遍历2d单元格数组,并计算死亡和生存相邻单元格的数量。

我有条件检查相邻单元格是否存活,死亡或不存在(如果游戏中的单元格位于数组的边缘或角落,则会发生这种情况)。

唯一的问题是,无论我尝试什么,我总是计算错误的活细胞数和死细胞数,这导致后续的错误世代。

我很确定这是因为我用来跟踪细胞的坐标系统与数组不对应。 (我试图解决这个问题,然后失败了)

我的问题是,访问2D数组中特定单元格的正确方法是什么,这样数组的行和列对应于x和y轴?

void bruteforceNeighbors(int ** coord, int i, int j){ 
array[0][0] = i-1;
array[0][1] = j-1;

array[1][0] = i-1;
array[1][1] = j;

array[2][0] = i-1;
array[2][1] = j+1;

array[3][0] = i;
array[3][1] = j-1;

array[4][0] = i;
array[4][1] = j+1;

array[5][0] = i+1;
array[5][1] = j-1;

array[6][0] = i+1;
array[6][1] = j;

array[7][0] = i+1;
array[7][1] = j+1;
} 
//world is the 2d array

char ** world = (char **)malloc(sizeof(char *)*rows);
for (int i =0;i < rows; i++){
    world[i] = (char *) malloc(sizeof(char)*columns);
}

1 个答案:

答案 0 :(得分:2)

您为char *数组保留空间,但在函数内部使用int **,请更改为

int **world = malloc(sizeof(int *) * rows);
for (int i =0; i < rows; i++) {
    world[i] = malloc(sizeof(int) * columns);
}