Проверьте статус соседей в воссоздании 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]);
Другие вопросы по тегам