检查邻居在 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矩阵有多大。它认为 fieldi 行和 j 列。然而,这是不正确的。它可能有更多的行数和列数。

例如,如果您使用 i==0j==0 调用此函数,则该调用的数组声明为 cell field[0][0],即无效的空数组。

您需要将实际尺寸作为附加参数传入,并将其用于数组大小。

int checkNeighbor(int i, int j, int rows, int cols, cell field[rows][cols]);