检查邻居在 C 中的生命游戏娱乐中的状态
Check status of neighbors in recreation of Game of Life in C
我有一个任务要用 C 重新创建 Conway 的生命游戏。在下面的代码中,我试图检查二维数组中给定坐标的邻居的状态是 DEAD 还是 ALIVE:
int checkNeighbor(int i, int j, cell field[i][j]) {
int sum=0;
if(canGoUp(i) && canGoLeft(j) && (field[i-1][j-1].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && (field[i-1][j].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && canGoRight(j) && (field[i-1][j+1].current == ALIVE)) {
sum++;
}
if(canGoRight(j) && (field[i][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoRight(j) && (field[i+1][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && (field[i+1][j].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoLeft(j) && (field[i+1][j-1].current == ALIVE)) {
sum++;
}
if(canGoLeft(j) && (field[i][j-1].current == ALIVE)) {
sum++;
}
return sum;
}
名为"canGoUP"或"canGoDown"等的函数通过检查坐标是否靠近二维数组的边缘来防止段错误。现在,由于某种原因,代码无法完美运行。我得到了一些邻居的迹象,但它几乎从来没有告诉我正确的数量。有没有更好的方法来解决这个问题?还是我只是错过了代码中的某些内容?
这个函数错误判断field
矩阵有多大。它认为 field
有 i
行和 j
列。然而,这是不正确的。它可能有更多的行数和列数。
例如,如果您使用 i==0
和 j==0
调用此函数,则该调用的数组声明为 cell field[0][0]
,即无效的空数组。
您需要将实际尺寸作为附加参数传入,并将其用于数组大小。
int checkNeighbor(int i, int j, int rows, int cols, cell field[rows][cols]);
我有一个任务要用 C 重新创建 Conway 的生命游戏。在下面的代码中,我试图检查二维数组中给定坐标的邻居的状态是 DEAD 还是 ALIVE:
int checkNeighbor(int i, int j, cell field[i][j]) {
int sum=0;
if(canGoUp(i) && canGoLeft(j) && (field[i-1][j-1].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && (field[i-1][j].current == ALIVE)) {
sum++;
}
if(canGoUp(i) && canGoRight(j) && (field[i-1][j+1].current == ALIVE)) {
sum++;
}
if(canGoRight(j) && (field[i][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoRight(j) && (field[i+1][j+1].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && (field[i+1][j].current == ALIVE)) {
sum++;
}
if(canGoDown(i) && canGoLeft(j) && (field[i+1][j-1].current == ALIVE)) {
sum++;
}
if(canGoLeft(j) && (field[i][j-1].current == ALIVE)) {
sum++;
}
return sum;
}
名为"canGoUP"或"canGoDown"等的函数通过检查坐标是否靠近二维数组的边缘来防止段错误。现在,由于某种原因,代码无法完美运行。我得到了一些邻居的迹象,但它几乎从来没有告诉我正确的数量。有没有更好的方法来解决这个问题?还是我只是错过了代码中的某些内容?
这个函数错误判断field
矩阵有多大。它认为 field
有 i
行和 j
列。然而,这是不正确的。它可能有更多的行数和列数。
例如,如果您使用 i==0
和 j==0
调用此函数,则该调用的数组声明为 cell field[0][0]
,即无效的空数组。
您需要将实际尺寸作为附加参数传入,并将其用于数组大小。
int checkNeighbor(int i, int j, int rows, int cols, cell field[rows][cols]);