Правила игры жизни Конвея не применяются должным образом - PullRequest
0 голосов
/ 03 ноября 2018

В настоящее время я начинаю изучать Java и пытался воссоздать игру жизни Конвея. Мой код работает, когда клетки умирают и рождаются, но, похоже, они не следуют намеченным правилам. Я использую следующие 2 метода для применения правил:

public boolean nextState( int row, int col )
{
    if(a[row][col]==false)                                          //dead cells
    {
        int neighbors=0;
        for(int r=row-1; r<=row+1; r++)
        {
            for(int c=col-1; c<=col+1; c++)
            {
                if(r>=0 && c>=0 && r<a.length && c<a[0].length)        //exclude edges
                {
                    if(a[r][c])
                    {
                       neighbors++;
                    }
                }
            }
        }
        if(neighbors==3)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
    else                                                            //alive cells
    {
        int neighbors=-1;
        for(int r=row-1; r<=row+1; r++)
        {
            for(int c=col-1; c<=col+1; c++)
            {
                if(r>=0 && c>=0 && r<a.length && c<a[0].length)    //exclude edges
                {
                    if(a[r][c])
                    {
                        neighbors++;
                    }
                }
            }
        }
        if(neighbors==3 || neighbors==2)
        {
            return true;
        }
        else 
        {
            return false;
        }
    }
}

public void nextGeneration()
{
    for(int r=0; r<a.length; r++)
    {
        for(int c=0; c<a[0].length; c++)
        {
            a[r][c]=nextState(r,c);
        }
    }
}

nextState возвращает, является ли ячейка [row] [col] мертвой или живой в следующем поколении, в зависимости от ее текущего состояния и количества живых соседей.

nextGeneration применяет nextState ко всем ячейкам.

Я изо всех сил пытаюсь понять, почему состояние определенных ячеек меняется, но не так, как задумано.

1 Ответ

0 голосов
/ 03 ноября 2018

В Игре Жизни Конвея клетки не должны обновляться на месте. Вместо этого ваша функция nextGeneration должна использовать значения текущей сетки и записать результат в другую сетку.

...