У меня довольно простая проблема, но я не могу ее понять. Я считаю, что это логическая ошибка, связанная с проверкой соседей в клеточных автоматах. Вот мой код, который работает один раз в секунду для выращивания и проверки соседей:Сотовые автоматы, проверяющие соседи
public void grow(){
Cell[][] next = new Cell[100][100];
for(int row = 0; row < (SIZE_X/SIZE); row++){
for(int col = 0; col < (SIZE_Y/SIZE); col++){
Cell cell = grid[row][col];
Cell nCell = grid[row][col]; // gets
if(cell != null){
int amount = neighbors(row, col); // find out how many neighbors are ALIVE/ON
if(cell.isOn() == true && amount != 3) // if the current cell is on but doesnt have 3 alive neighbors, it gets turned off
nCell.onOff(false);
else if(cell.isOn() == false && (amount >= 1 && amount <= 4)) // if it is off and has 1-5 alive neighbors it gets turned on
nCell.onOff(true);
next[row][col] = nCell;
}
}
}
grid = next;
}
public int neighbors(int row, int col){ // checks the amount of neighbors that are ALIVE/ON
int amount = 0;
for(int r = row-1; r <= row+1; r++){ // stepping through a 3x3 area of the grid, which surrounds the selected block
for(int c = col-1; c <= col+1; c++){
// clamp
if((r > 0 && r < 99) && (c > 0 && c < 99)){
if(grid[r][c].isOn() == true && (r != row && c != col)) // checks if the current neighbor is ALIVE/ON
amount++; // if it is then add one to the count
}
}
}
return amount;
}
Im используя простой 12345/3 (/ Рождение Выживание) правила в моем клеточных автоматах.
В настоящее время проблема заключается в том, что у меня есть сетка 100x100 с ячейками ALIVE/ON размером 10x10 в центре. После того, как мой код запускается один раз, все клетки умирают.
Если кому-то нужна дополнительная информация, не стесняйтесь спрашивать. Заранее спасибо!
Извините за поздний ответ. Поэтому я внедрил некоторые изменения, которые решили проблемы, о которых вы говорили. Другая проблема возникла, хотя теперь она делает массивную пирамиду справа от стартовых блоков и медленно вырастает, казалось бы, без рифмы или разума. Iv обновил мой код –