检查邻居在C语言游戏中的状态
我有一个任务是用C重新创建康威的生命游戏。在下面的代码中,我试图检查2D数组中给定坐标的邻居的状态是死还是活:检查邻居在C语言游戏中的状态,c,arrays,conways-game-of-life,C,Arrays,Conways Game Of Life,我有一个任务是用C重新创建康威的生命游戏。在下面的代码中,我试图检查2D数组中给定坐标的邻居的状态是死还是活: 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(canGoU
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阵列的边缘来防止分段故障。现在,由于某些原因,代码的工作并不完美。我得到了一些邻居的迹象,但它几乎从来没有告诉我正确的数量。有没有更好的办法解决这个问题?还是我只是在代码中遗漏了什么 此函数错误地认为
字段
矩阵有多大。它认为字段
有i
行和j
列。然而,这是不正确的。它可能有更多的行和列
例如,如果使用i==0
和j==0
调用此函数,则该调用的数组声明为单元格字段[0][0]
,即无效的空数组
您需要将实际尺寸作为附加参数传入,并将这些参数用于数组大小
int checkNeighbor(int i, int j, int rows, int cols, cell field[rows][cols]);
单元格字段[i][j]
需要是单元格字段[rows][cols]
。我应该提到checkNeighbor函数用于for循环。这样我就可以遍历所有坐标并检查每个坐标的邻居。这就是为什么行和列用i和j表示的原因。是的,但是您需要告诉编译器字段
数组有多大。当i
和j
为0时,您告诉编译器数组是0x0条目。但事实上,数组的大小是固定的。如果不清楚,我是说您需要将函数签名int checkNeighbor(int I,int j,cell field[I][j])
更改为int checkNeighbor(int I,int j,cell field[rows][cols])
。函数体很好。基于canGo…
函数,我认为行
和cols
要么是全局变量,要么是定义的常量。