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 io.vavr.control.Option;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.LinkedList;
|
||||
|
@ -33,20 +34,11 @@ public class RandomDepthFirst {
|
|||
|
||||
private void preDig() {
|
||||
final Position end = this.maze.getEnd();
|
||||
final Tile endTile = this.maze.getEndTile();
|
||||
final Direction direction = this.determineDirectionForDigging(end);
|
||||
|
||||
if (end.y() == 0) {
|
||||
endTile.enableDiggingToOrFrom(Direction.TOP);
|
||||
endTile.digFrom(Direction.TOP);
|
||||
} 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);
|
||||
if (direction != null) {
|
||||
final Tile endTile = this.maze.getEndTile();
|
||||
this.digFrom(endTile, direction);
|
||||
}
|
||||
|
||||
this.positions.push(end);
|
||||
|
@ -85,20 +77,38 @@ public class RandomDepthFirst {
|
|||
|
||||
private void postDig() {
|
||||
final Position start = this.maze.getStart();
|
||||
final Tile startTile = this.maze.getStartTile();
|
||||
|
||||
if (start.y() == 0) {
|
||||
startTile.enableDiggingToOrFrom(Direction.TOP);
|
||||
startTile.digTo(Direction.TOP);
|
||||
} else if (start.x() == 0) {
|
||||
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);
|
||||
final Direction direction = this.determineDirectionForDigging(start);
|
||||
if (direction != null) {
|
||||
final Tile startTile = this.maze.getStartTile();
|
||||
this.digTo(startTile, direction);
|
||||
}
|
||||
}
|
||||
|
||||
@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…
Reference in a new issue