Я пытаюсь закодировать игру жизни на C. Я сижу 7 часов, задаваясь вопросом, как ее решить. Я зашел далеко, но есть что-то, из-за чего код не работает должным образом. Я считаю, что сделал что-то не так между следующей и текущей переменными в структуре. Может быть, неправильно считать, жив сосед или мертв. В любом случае буду признателен за любую помощь!
void checkField(const int rows, const int cols, cell field[rows][cols]) {
int neighborCount;
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
neighborCount = getNeighborCount(rows, cols, r, c, field);
nextGeneration(rows, cols, r, c, neighborCount, field);
}
}
}
int getNeighborCount(const int rows, const int cols,
int r, int c, cell field[rows][cols]) {
int neighborCount = 0;
neighborCount += checkNeighbors(rows, cols, r - 1, c - 1, field);
neighborCount += checkNeighbors(rows, cols, r - 1, c, field);
neighborCount += checkNeighbors(rows, cols, r - 1, c + 1, field);
neighborCount += checkNeighbors(rows, cols, r, c - 1, field);
neighborCount += checkNeighbors(rows, cols, r, c + 1, field);
neighborCount += checkNeighbors(rows, cols, r + 1, c - 1, field);
neighborCount += checkNeighbors(rows, cols, r + 1, c, field);
neighborCount += checkNeighbors(rows, cols, r + 1, c + 1, field);
return neighborCount;
}
int checkNeighbors(const int rows, const int cols,
int r, int c, cell field[rows][cols]) {
int neighborAlive;
if (r < 0 || r > rows || c < 0 || c > cols || field[r][c].current != ALIVE){
return neighborAlive = 0;
}
else {
return neighborAlive = 1;
}
}
void nextGeneration(const int rows, const int cols,
int r, int c, int neighborCount, cell field[rows][cols]) {
for (int r = 0 ; r < rows ; r++) {
for (int c = 0 ; c < cols ; c++) {
field[r][c].current = DEAD;
field[r][c].next = DEAD;
}
}
if (neighborCount < 2){
field[r][c].current = DEAD;
field[r][c].next = DEAD;
}
if (neighborCount == 2 || neighborCount == 3) {
field[r][c].current = ALIVE;
field[r][c].next = ALIVE;
}
if ((field[r][c].current == DEAD) && neighborCount == 3) {
field[r][c].current = ALIVE;
field[r][c].next = ALIVE;
}
if (neighborCount >= 4) {
field[r][c].current = DEAD;
field[r][c].next = DEAD;
}
}