/// <summary> /// Count how many neighbours of the specific cell are alive. /// There are total 8 neighbours for a specific cell /// </summary> /// <param name="cell"> Cell for which neighbours needs to be find </param> /// <param name="grid"> Grid which contains all cell information </param> /// <returns> Retruns the info of all neighbours </returns> public IEnumerable<ICell> RetrieveNeighbours(ICell cell, IGrid grid) { if (cell == null || grid == null) return null; var neighbours = new List<ICell>(); var currCellPosition = cell.Position; //CalculateDiagonalTopLeftNeighbour currCellPosition.Row = cell.Position.Row - 1; currCellPosition.Column = cell.Position.Column - 1; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); //CalculateTopNeighbour currCellPosition.Row = cell.Position.Row - 1; currCellPosition.Column = cell.Position.Column; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); //CalculateDiagonalTopRightNeighbour currCellPosition.Row = cell.Position.Row - 1; currCellPosition.Column = cell.Position.Column + 1; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); //CalculateLeftNeighbour currCellPosition.Row = cell.Position.Row; currCellPosition.Column = cell.Position.Column - 1; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); //CalculateRightNeighbour currCellPosition.Row = cell.Position.Row; currCellPosition.Column = cell.Position.Column + 1; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); //CalculateDiagonalBottomLeftNeighbour currCellPosition.Row = cell.Position.Row + 1; currCellPosition.Column = cell.Position.Column - 1; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); //CalculateBottomNeighbour currCellPosition.Row = cell.Position.Row + 1; currCellPosition.Column = cell.Position.Column; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); //CalculateDiagonalBottomRightNeighbour currCellPosition.Row = cell.Position.Row + 1; currCellPosition.Column = cell.Position.Column + 1; if (IsValidIndex(currCellPosition, grid)) neighbours.Add(grid.GetCurrentCellInfo(currCellPosition)); return neighbours; }