private static IEnumerable <Point> GetNeighbours(Point from, IWorld world) { //А если перемешивать всех соседей перед тем как вернуть, то поведение мух визуально будет естественнее. for (int x = from.X - 1; x <= from.X + 1; ++x) { for (int y = from.Y - 1; y <= from.Y + 1; ++y) { var point = new Point(x, y); if (world.InsideWorld(point) && !(x == from.X && y == from.Y) && (x == from.X || y == from.Y)) { if (!world.Contains <Wall>(point) && !world.Contains <Source>(point)) { yield return(new Point(x, y)); } } } } }