private static bool ExpandConnection(PositionedConnection conn, char[,] artChars) { Position currentPos = conn.track[conn.track.Count - 1]; List <Position.Direction> dirs = new List <Position.Direction>(); foreach (var direction in PositionedConnection.GetContainedDirections(conn.tailDirection)) { Position newPos = currentPos + direction; if (newPos.IsWithin(artChars)) { Position.Direction thisDir = CharFits(artChars[newPos.x, newPos.y], direction); if (thisDir != Position.Direction.None) { dirs.Add(direction); } } } if (dirs.Count == 0) { throw new InvalidOperationException("Connection reaches dead end"); } if (dirs.Count > 1) { throw new InvalidOperationException("Connection reaches splitting point: not allowed"); } Position newPoint = currentPos + dirs[0]; conn.track.Add(newPoint); conn.tailDirection = CharFits(artChars[newPoint.x, newPoint.y], dirs[0]); return(!TailAtEnd(artChars[newPoint.x, newPoint.y])); }