Проверьте статус соседей в воссоздании Game of Life in C
У меня есть задание для воссоздания игры Конвея о жизни в C. В следующем коде я пытаюсь проверить, имеют ли соседи по заданной координате в 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 ответ
Эта функция ошибочно говорит о том, насколько велика 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]);