Conway 的生命游戏 (C) - 坐标不对应于 2D 数组索引?
Conway's Game of Life (C) - Coordinates not Corresponding to 2D Array Indexing?
我正在尝试用 C 编写 Conway 的生命游戏。我已经创建了一个表示单元格的二维数组。我尝试使用坐标系来解决游戏。
我编写了一个函数来创建一个数组,该数组强制强制使用邻居坐标的所有可能组合。
然后我使用双嵌套 for 循环遍历二维单元格数组,并计算死细胞和活细胞的数量。
我有一个条件检查相邻单元格是活的、死的还是不存在的(如果游戏中的单元格位于数组的边缘或角落,则会发生这种情况)。
唯一的问题是,无论我尝试什么,我总是计算错误的活细胞和死细胞数量,这会导致后续错误的世代。
我很确定这是因为我用来跟踪单元格的坐标系统与数组不对应。 (我试图解决这个问题,但失败了)
我的问题是,访问二维数组中特定单元格的正确方法是什么,以便数组的行和列对应于 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);
}
您正在为 char *
的数组保留 space,但在函数内部使用 int **
,更改为
int **world = malloc(sizeof(int *) * rows);
for (int i =0; i < rows; i++) {
world[i] = malloc(sizeof(int) * columns);
}
我正在尝试用 C 编写 Conway 的生命游戏。我已经创建了一个表示单元格的二维数组。我尝试使用坐标系来解决游戏。
我编写了一个函数来创建一个数组,该数组强制强制使用邻居坐标的所有可能组合。
然后我使用双嵌套 for 循环遍历二维单元格数组,并计算死细胞和活细胞的数量。
我有一个条件检查相邻单元格是活的、死的还是不存在的(如果游戏中的单元格位于数组的边缘或角落,则会发生这种情况)。
唯一的问题是,无论我尝试什么,我总是计算错误的活细胞和死细胞数量,这会导致后续错误的世代。
我很确定这是因为我用来跟踪单元格的坐标系统与数组不对应。 (我试图解决这个问题,但失败了)
我的问题是,访问二维数组中特定单元格的正确方法是什么,以便数组的行和列对应于 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);
}
您正在为 char *
的数组保留 space,但在函数内部使用 int **
,更改为
int **world = malloc(sizeof(int *) * rows);
for (int i =0; i < rows; i++) {
world[i] = malloc(sizeof(int) * columns);
}