Я пытаюсь воспроизвести Game of Life, но у меня есть ошибка. Клетки рождаются в соответствии с дизайном, но они не умирают. Это меня смущает, потому что моя стратегия убийства клеток такая же, как и для их рождения. Здесь представлен сегмент выхода консоли, «x» представляет живые клетки, «-» представляет мертвые ячейки.Отладка Game of Life, Java
---------
---------
---------
---xx----
----x----
----x----
----xx---
---------
---------
---------
---------
---------
---xx----
----xx---
---xx----
----xx---
---------
---------
---------
---------
---------
---xxx---
----xx---
---xx----
---xxx---
---------
---------
И соответствующий фрагмент кода:
public class Life {
final static int WIDTH = 9, HEIGHT = 9;
void start(){
// scanning input file
char[][][] board = new char[WIDTH][HEIGHT][maxAllowedGenerations];
board = getInitialBoard(initialBoardString, maxAllowedGenerations, board);
for (int generation = 1; generation < maxAllowedGenerations; generation++){
for (int y = 0; y < HEIGHT; y++)
for (int x = 0; x < WIDTH; x++){
int numberOfNeighbours = getNumberOfNeighbours(x, y, generation - 1 , board);
if (board[x][y][generation - 1] == '-' && numberOfNeighbours == 3)
board[x][y][generation] = 'x';
else if (board[x][y][generation - 1] == 'x' && numberOfNeighbours < 2)
board[x][y][generation] = '-';
else board[x][y][generation] = board[x][y][generation - 1];
if (board[x][y][generation] == 'x')
ui.place(x, y, LifeUserInterface.ALIVE);
else
ui.place(x, y, LifeUserInterface.DEAD);
out.print(board[x][y][generation]);
}
out.println();
}
}
out.println("Max number of generations reached");
System.exit(0);
}
вы должны использовать [перечисления] (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) - это увеличит читаемость кода. – elyashiv
Что вы подразумеваете под «клеточной смертью не хранится в следующем поколении»? –
Можете ли вы сузить область раздела, где, по вашему мнению, проблема? – StormeHawke