maze-generator/src/main/java/labyrinth/Tile.java

50 lines
1.3 KiB
Java

package labyrinth;
import io.vavr.collection.Stream;
import io.vavr.control.Option;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Tile {
// FIXME remove me; only for debugging
@Getter
final Directions walls = new Directions();
@Getter
boolean visited = false;
public Tile() {
this.walls.setAll();
}
public void preventDiggingToOrFrom(@NonNull final Direction direction) {
this.walls.harden(direction);
}
public void enableDiggingToOrFrom(@NonNull final Direction direction) {
this.walls.unharden(direction);
}
public boolean digFrom(@NonNull final Direction direction) {
if (this.visited) {
return false;
}
this.visited = true;
return this.walls.clear(direction);
}
public boolean digTo(@NonNull final Direction direction) {
return this.walls.clear(direction);
}
public void undigTo(@NonNull final Direction direction) {
this.walls.set(direction);
}
public Option<Direction> getRandomAvailableDirection() {
return Stream.ofAll(this.walls.getSet(true)).shuffle().headOption();
}
}