use knossos::maze::*;
fn main() {
let maze = OrthogonalMazeBuilder::new().width(16).height(18).build();
println!("\nRecursive backtracking");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(BinaryTree::new(Bias::NorthEast)))
.build();
println!("\nBinary Tree (NorthEast)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(BinaryTree::new(Bias::NorthWest)))
.build();
println!("\nBinary Tree (NorthWest)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(BinaryTree::new(Bias::SouthEast)))
.build();
println!("\nBinary Tree (SouthEast)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(BinaryTree::new(Bias::SouthWest)))
.build();
println!("\nBinary Tree (SouthWest)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.width(20)
.algorithm(Box::new(Sidewinder))
.build();
println!("\nSidewinder");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.height(10)
.width(15)
.algorithm(Box::new(Kruskal))
.build();
println!("\nKruskal");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(GrowingTree::new(Method::Newest)))
.build();
println!("\nGrowing tree (Newest)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(GrowingTree::new(Method::Oldest)))
.build();
println!("\nGrowing tree (Oldest)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(GrowingTree::new(Method::Random)))
.build();
println!("\nGrowing tree (Random)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(GrowingTree::new(Method::Middle)))
.build();
println!("\nGrowing tree (Middle)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(GrowingTree::new(Method::Newest50Random50)))
.build();
println!("\nGrowing tree (Newest50Random50)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(GrowingTree::new(Method::Newest75Random25)))
.build();
println!("\nGrowing tree (Newest75Random25)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(GrowingTree::new(Method::Newest25Random75)))
.build();
println!("\nGrowing tree (Newest25Random75)");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(Prim::new()))
.build();
println!("\nPrim");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.height(10)
.width(10)
.algorithm(Box::new(HuntAndKill::new()))
.build();
println!("\nHunt & kill");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.height(25)
.width(20)
.algorithm(Box::new(AldousBroder))
.build();
println!("\nAldou-Broder");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.algorithm(Box::new(RecursiveDivision))
.build();
println!("\nRecursive Division");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new()
.height(15)
.width(15)
.algorithm(Box::new(Eller))
.build();
println!("\nEller");
println!("{}", &maze);
let maze = OrthogonalMazeBuilder::new().seed(Some(40)).build();
println!("\n Use seed value to generate mazes deterministically");
println!("{}", &maze);
println!("\nMaze Formatted as a Game Map");
println!("{}", &maze.format(GameMap::new().span(1)).into_inner());
maze.save("maze.txt", AsciiBroad).unwrap();
maze.save(
"maze_game_map.txt",
GameMap::new().span(3).with_start_goal(),
)
.unwrap();
maze.save("maze.png", Image::new().wall(15).passage(20))
.unwrap();
}