Я знаю, что было много вопросов по игре в жизнь, но все равно не могу понять, как правильно написать этот метод в javafx. вот мой код, который не работает, потому что я не понимаю, как реализовать алгоритм подсчета соседей.
public void stepMethod(ActionEvent event){
for (int x = 0; x < cellSize; x++){
for (int y = 0; y < cellSize; y++){
int neighbours = countNeighbors(x, y);
nextGeneration[x][y] = board [x][y];
nextGeneration[x][y] = (neighbours == 3) ? true: nextGeneration[x][y];
nextGeneration[x][y] = ((neighbours < 2) || (neighbours > 3)) ? false : nextGeneration[x][y];
}
}
draw();
}
public int countNeighbors(int x, int y){
int neighbours = 0;
if (board [x-1][y-1]){
neighbours+=1;
}else{
neighbours+=0;
}
if (board[x][y-1]){
neighbours+=1;
}else{
neighbours+=0;
}
if (board[x+1][y-1]){
neighbours+=1;
}else{
neighbours+=0;
}
if (board[x-1][y]){
neighbours+=1;
}else{
neighbours+=0;
}
if (board[x+1][y]){
neighbours+=1;
}else{
neighbours+=0;
}
if (board[x-1][y+1]){
neighbours+=1;
}else{
neighbours+=0;
}
if (board[x][y+1]){
neighbours+=1;
}else{
neighbours+=0;
}
if (board[x+1][y+1]){
neighbours+=1;
}else{
neighbours+=0;
}
if(board[x][y]){
neighbours--;
}
return neighbours;
}
и вот мой метод рисования
public void draw(){
initGraphics();
for(int x = 0; x < cellSize; x++){
for(int y = 0; y < cellSize; y++){
if(board[x][y] ){
gc.setFill(Color.CHOCOLATE);
gc.fillOval(x*cellSize,y*cellSize,cellSize,cellSize);
}
}
}
}
x-1
илиx+1
могут выйти за край (то же самое дляy
). Что на самом деле идет не так? - person doctorlove   schedule 23.03.2017nextGeneration[x][y] = (neighbors == 3);
в теле цикла for вstepMethod
. Кроме того, всеelse{ neighbours+=0; }
могут быть удалены, эти операторы не имеют никакого эффекта. Также для подсчета значений вы можете просто использовать цикл и снова вычесть значение для центра:int neighbors = (neighbors[x][y] ? -1 : 0); for(int i = -1; i <= 1; i++) { for (int j=-1; j <= 1; j++) { if (board[x+i][y+j]) { neighbors++;}}}
- person fabian   schedule 23.03.2017nextGeneration[x][y] = (neighbors == 3 || ((neighbors == 2) && board[x][y]));
- person fabian   schedule 23.03.2017