public Map GenerateRandomMap() { while (true) { var mapBuilder = CreateMapBuilder(); var directions = new List <Direction>(); var seenPoints = new HashSet <Point>(); var repeatedFailureCount = 0; var currentDirection = Direction.Top; while (repeatedFailureCount < 100) { var previousDirection = currentDirection; var newDirection = directionHelper.GetRandomDirectionOtherThan( previousDirection, DirectionHelper.GetOppositeDirection( previousDirection)); mapBuilder.MoveInDirection(newDirection); repeatedFailureCount = 0; var currentPoint = mapBuilder.CurrentPoint; currentDirection = newDirection; directions.Add(newDirection); seenPoints.Add(currentPoint); if (currentPoint.X == 0 && currentPoint.Y == 0) { if (directions.Count == 4) { break; } return(mapBuilder.Build()); } } } throw new NotImplementedException(); }