This commit is contained in:
		
							parent
							
								
									b18e7fba9e
								
							
						
					
					
						commit
						cf405fbc98
					
				
					 1 changed files with 36 additions and 26 deletions
				
			
		|  | @ -6,6 +6,7 @@ import ch.fritteli.maze.generator.model.Position; | ||||||
| import ch.fritteli.maze.generator.model.Tile; | import ch.fritteli.maze.generator.model.Tile; | ||||||
| import io.vavr.control.Option; | import io.vavr.control.Option; | ||||||
| import org.jetbrains.annotations.NotNull; | import org.jetbrains.annotations.NotNull; | ||||||
|  | import org.jetbrains.annotations.Nullable; | ||||||
| 
 | 
 | ||||||
| import java.util.Deque; | import java.util.Deque; | ||||||
| import java.util.LinkedList; | import java.util.LinkedList; | ||||||
|  | @ -33,20 +34,11 @@ public class RandomDepthFirst { | ||||||
| 
 | 
 | ||||||
|     private void preDig() { |     private void preDig() { | ||||||
|         final Position end = this.maze.getEnd(); |         final Position end = this.maze.getEnd(); | ||||||
|         final Tile endTile = this.maze.getEndTile(); |         final Direction direction = this.determineDirectionForDigging(end); | ||||||
| 
 | 
 | ||||||
|         if (end.y() == 0) { |         if (direction != null) { | ||||||
|             endTile.enableDiggingToOrFrom(Direction.TOP); |             final Tile endTile = this.maze.getEndTile(); | ||||||
|             endTile.digFrom(Direction.TOP); |             this.digFrom(endTile, direction); | ||||||
|         } else if (end.x() == 0) { |  | ||||||
|             endTile.enableDiggingToOrFrom(Direction.LEFT); |  | ||||||
|             endTile.digFrom(Direction.LEFT); |  | ||||||
|         } else if (end.y() == this.maze.getHeight() - 1) { |  | ||||||
|             endTile.enableDiggingToOrFrom(Direction.BOTTOM); |  | ||||||
|             endTile.digFrom(Direction.BOTTOM); |  | ||||||
|         } else if (end.x() == this.maze.getWidth() - 1) { |  | ||||||
|             endTile.enableDiggingToOrFrom(Direction.RIGHT); |  | ||||||
|             endTile.digFrom(Direction.RIGHT); |  | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         this.positions.push(end); |         this.positions.push(end); | ||||||
|  | @ -85,20 +77,38 @@ public class RandomDepthFirst { | ||||||
| 
 | 
 | ||||||
|     private void postDig() { |     private void postDig() { | ||||||
|         final Position start = this.maze.getStart(); |         final Position start = this.maze.getStart(); | ||||||
|         final Tile startTile = this.maze.getStartTile(); |  | ||||||
| 
 | 
 | ||||||
|         if (start.y() == 0) { |         final Direction direction = this.determineDirectionForDigging(start); | ||||||
|             startTile.enableDiggingToOrFrom(Direction.TOP); |         if (direction != null) { | ||||||
|             startTile.digTo(Direction.TOP); |             final Tile startTile = this.maze.getStartTile(); | ||||||
|         } else if (start.x() == 0) { |             this.digTo(startTile, direction); | ||||||
|             startTile.enableDiggingToOrFrom(Direction.LEFT); |  | ||||||
|             startTile.digTo(Direction.LEFT); |  | ||||||
|         } else if (start.y() == this.maze.getHeight() - 1) { |  | ||||||
|             startTile.enableDiggingToOrFrom(Direction.BOTTOM); |  | ||||||
|             startTile.digTo(Direction.BOTTOM); |  | ||||||
|         } else if (start.x() == this.maze.getWidth() - 1) { |  | ||||||
|             startTile.enableDiggingToOrFrom(Direction.RIGHT); |  | ||||||
|             startTile.digTo(Direction.RIGHT); |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Nullable | ||||||
|  |     private Direction determineDirectionForDigging(@NotNull final Position position) { | ||||||
|  |         if (position.y() == 0) { | ||||||
|  |             return Direction.TOP; | ||||||
|  |         } | ||||||
|  |         if (position.x() == 0) { | ||||||
|  |             return Direction.LEFT; | ||||||
|  |         } | ||||||
|  |         if (position.y() == this.maze.getHeight() - 1) { | ||||||
|  |             return Direction.BOTTOM; | ||||||
|  |         } | ||||||
|  |         if (position.x() == this.maze.getWidth() - 1) { | ||||||
|  |             return Direction.RIGHT; | ||||||
|  |         } | ||||||
|  |         return null; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void digFrom(@NotNull final Tile tile, @NotNull final Direction direction) { | ||||||
|  |         tile.enableDiggingToOrFrom(direction); | ||||||
|  |         tile.digFrom(direction); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private void digTo(@NotNull final Tile tile, @NotNull final Direction direction) { | ||||||
|  |         tile.enableDiggingToOrFrom(direction); | ||||||
|  |         tile.digTo(direction); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue