Я работаю над кодом для игры в жизнь. И одна из функций должна «развить» текущий набор ячеек. Это означает, что у меня должны быть некоторые условия, и если выражение if удовлетворяет условию, то ячейка становится ячейкой DEAD или ALIVE.
Однако есть только несколько следующих ячеек, которые инициализируются, поэтому мне пришлось бы установить для остальных ячеек значение DEAD, на которые условия не влияют.
Поскольку есть четыре условия, я хотел бы сжать свои операторы if до минимально возможного количества.
Условия:
- Ячейка с 0 или 1 живыми соседями умирает в следующем поколении.
- Ячейка с 2 или 3 живыми соседями живет в следующем поколении.
- Ячейка с 4 или более живыми соседями умирает в следующем поколении.
- Пустая ячейка, в которой ровно 3 живых соседа, становится живой
ячейка следующего поколения.
Я попытался вписать как можно больше условий в один оператор if и оператор else в if, то есть, если ни одна из ячеек не удовлетворяет условиям, для него автоматически будет установлено значение DEAD. Так, что все клетки в field[i][j].next
либо мертвы, либо живы.
Хотелось бы отметить, что массив field[i][j].current
уже инициализирован с ячейками DEAD и ALIVE.
void evolve(const int rows,const int cols,cell field[rows][cols], int
NeighbourCounter[i][j]){
CellNeighbour(rows, cols,field,NeighbourCounter);
for(int i = 0;i<rows;i++){
for(int j =0;j<cols;j++){
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] < 2){
field[i][j].next == DEAD;
}
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] == ||NeighbourCounter[i][j] == 2){
field[i][j].next = ALIVE;
}
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] >= 4){
field[i][j].next = DEAD;
}
if(field[i][j].current == DEAD && NeighbourCounter[i][j] == 3){
field[i][j].next = ALIVE;
}
}
else{
field[i][j].next = DEAD;
}
}
NeighbourCounter
- это массив, который вычисляет, сколько ALIVE-соседей имеет каждая ячейка.
Ожидаемый вывод должен состоять в том, что field[rows][cols]
должен быть обновлен, а обновленная версия сохранена в `` field [lines] [cols] .next`.