检查C中生命游戏娱乐中邻居的状态

时间:2016-10-17 18:50:57

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

我已经完成了在C中重新创建Conway的生命游戏的任务。在下面的代码中,我试图检查2D数组中给定坐标的邻居是否具有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”等的函数通过检查坐标是否靠近2D数组的边缘来防止段错误。现在,由于某种原因,代码不能正常工作。我得到了邻居的一些迹象,但它几乎从来没有告诉我适量。有没有更好的方法来解决这个问题?或者我只是错过了代码中的某些内容?

1 个答案:

答案 0 :(得分:1)

这个函数错误地认为 inp = open("original.dat", "r") out = open("new.log", "w") for line in inp: if float(line.split()[5]) < 5.0: out.write(line) 矩阵有多大。它认为fieldfield行和i列。然而,这是不正确的。它可能有更多的行和列。

例如,如果使用ji==0调用此函数,则该调用的数组声明为j==0,即空数组无效。

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

cell field[0][0]