public override string ToString() { var landString = new StringBuilder(); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { var point = new Point(x, y); if (Trees.Contains(point)) { landString.Append('|'); } else if (Lumberyard.Contains(point)) { landString.Append('#'); } else { landString.Append('.'); } } landString.AppendLine(); } return(landString.ToString()); }
public Land Next() { var newLumberyard = new HashSet <Point>(); var newTrees = new HashSet <Point>(); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { var point = new Point(x, y); if (Trees.Contains(point)) { ConvertTree(point, newLumberyard, newTrees); } else if (Lumberyard.Contains(point)) { ConvertLumberyard(point, newLumberyard, newTrees); } else { ConvertOpen(point, newLumberyard, newTrees); } } } return(new Land(newLumberyard, newTrees, width, height)); }
private void ConvertTree(Point point, HashSet <Point> newLumberyard, HashSet <Point> newTrees) { var adjacent = point.AdjacentInAllDirections() .Where(p => p.X >= 0 && p.X < width && p.Y >= 0 && p.Y < height) .ToList(); if (adjacent.Count(a => Lumberyard.Contains(a)) >= 3) { newLumberyard.Add(point); } else { newTrees.Add(point); } }