Игра Жизни, Рассчитайте соседи Ява

Для домашней работы мы должны запрограммировать игру жизни Конвея на Java. Но у меня есть проблема, чтобы правильно рассчитать количество соседей.

Мы должны использовать класс Cell, который представляет ячейки в нашем 2-мерном поле. Все живые клетки должны быть сохранены в LinkedHashSet.

Проблема, которая возникает, состоит в том, что слишком много возможных живых клеток сохранено, и что у меня есть дубликаты клеток в моем наборе населения.

Мой код для расчета соседей и следующего поколения:

public void next() {
   generations++;
   // used to save possible alive cells
   Set<Cell> nextGen = new LinkedHashSet<Cell>();
   int col;
   int row;
   int count;
   for( int i = 0; i < grid.length; i++ ) {
      for( int j = 0; j < grid[ 0 ].length; j++ ) {
         grid[ i ][ j ].setNeighbours( 0 );
      }
   }
   for( Cell e : population ) { // calculate number of neighbors
      col = e.getCol();
      row = e.getRow();
      count = 0;

      for( int i = row - 1;
           i >= 0 && i < ( row + 2 ) && i < grid.length;
           i++ )  {
         for( int j = col - 1;
              j >= 0 && j < ( col + 2 ) && j < grid[ 0 ].length;
              j++ ) {
            count = grid[ i ][ j ].getNeighbours() + 1;
            if( i == row && j == col )
            {
               count--;
            }
            grid[ i ][ j ].setNeighbours( count );
            nextGen.add( grid[ i ][ j ] );

         }
      }
   }
   for( Cell e : population )
   { // check if all alive cells stay alive
      switch( e.getNeighbours() )
      {
      case 3:
      break;
      case 2:
      break;
      default:
         e.setAlive( false );
         population.remove( e );
      break;
      }
   }
   // check which cells get alive
   for( Cell e : nextGen ) {
      if( e.getNeighbours() == 3 ) {
         e.setAlive( true );
         population.add( e );
      }
      else if( e.getNeighbours() == 2 ) {
         /* */
      }
      else
      {
         e.setAlive( false );
      }
   }
}

1 ответ

Решение

Эта строка не кажется правильной:

count = grid[i][j].getNeighbours() + 1;

Разве ты не считаешь живых соседей? Как это:

if (grid[i][j].isAlive()) count++;

Вы должны считать соседей Cell e. Так что уберите эту строку

grid[i][j].setNeighbours(count);

и добавьте эту строку после циклов i, j:

e.setNeighbours(count);
Другие вопросы по тегам