private int GetNumberOfNeighboursOf(Position position) { var neighbours = 0; for (var i = position.X-1; i <= position.X+1 ; i++) { for (var j = position.Y-1; j <= position.Y+1 ; j++) { if (IsNeighbour(position, new Position(i,j))) neighbours++; } } return neighbours; }
public List<Position> GetNeighbours(Position position) { var neighboursList = new List<Position>(); for (var i = position.X - 1; i <= position.X + 1; i++) { for (var j = position.Y - 1; j <= position.Y + 1; j++) { if (this.IsCellAliveAtPosition(new Position(i, j))) neighboursList.Add(new Position(i,j)); } } neighboursList.Remove(position); return neighboursList; }
private IEnumerable<Position> ReviveNeighboursOf(Position position) { var neighbours = new List<Position>(); for (var i = position.X - 1; i <= position.X + 1; i++) { for (var j = position.Y - 1; j <= position.Y + 1; j++) { if (CellShouldRevive(new Position(i,j))) neighbours.Add(new Position(i, j)); } } return neighbours; }
private bool IsNeighbour(Position position, Position neighbourPosition) { return this.IsCellAliveAtPosition(neighbourPosition) && !position.Equals(neighbourPosition); }
private bool CellShouldRevive(Position position) { return !this.IsCellAliveAtPosition(position) && this.GetNumberOfNeighboursOf(position) == 3; }
public bool IsCellAliveAtPosition(Position position) { return CellsList.Contains(position); }
public void AddCellAtPosition(Position position) { CellsList.Add(position); }
private bool ShouldDie(Position position) { var numberOfNeighbours = this.GetNumberOfNeighboursOf(position); return numberOfNeighbours < 2 || numberOfNeighbours >= 4; }
private bool ShouldCheckRevive(Position position) { return GetNumberOfNeighboursOf(position) == 2; }