50 lines
1.3 KiB
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();
|
|
}
|
|
}
|