A Clojure library designed to create mazes, based on Mazes for Programmers.
mazes.core> (pr/out (pr/ascii-grid (algo/binary-tree (gr/new-grid 10 10))))
+---+---+---+---+---+---+---+---+---+---+
| |
+ +---+---+ + + + +---+ + +
| | | | | | | |
+---+---+---+---+---+ +---+ + + +
| | | | |
+---+ + + +---+---+ +---+ + +
| | | | | | |
+ + +---+ +---+ +---+ + + +
| | | | | | | |
+ +---+ + + + + + +---+ +
| | | | | | | | |
+---+---+ + + + + +---+---+ +
| | | | | | |
+ + + +---+---+ + +---+ + +
| | | | | | | |
+ +---+ + +---+---+ + + + +
| | | | | | | |
+ + +---+---+---+---+---+ + + +
| | | | | |
+---+---+---+---+---+---+---+---+---+---+
mazes.core> (pr/out (pr/ascii-grid (algo/sidewinder (gr/new-grid 10 10))))
+---+---+---+---+---+---+---+---+---+---+
| |
+---+ +---+ + +---+ +---+ +---+
| | | | | |
+---+ +---+---+---+---+---+ +---+---+
| | |
+---+ +---+---+---+---+---+ + + +
| | | | |
+ +---+ +---+ +---+---+---+---+ +
| | | | |
+---+ + + +---+---+ +---+ +---+
| | | | | |
+ +---+---+ + + +---+ + +---+
| | | | | | |
+ +---+ +---+ + + +---+---+ +
| | | | | | |
+ +---+ + + + +---+ +---+ +
| | | | | | | |
+ +---+ + + +---+---+ + +---+
| | | | | | |
+---+---+---+---+---+---+---+---+---+---+
mazes.core> (def maze (algo/sidewinder (gr/new-grid 8 8)))
mazes.core> (pr/out (pr/ascii-grid maze {:distances (dist/longest-path maze)}))
+---+---+---+---+---+---+---+---+
| f g h i j k l |
+ +---+---+ + +---+ +---+
| e d c | | | m |
+ + + +---+---+---+ +---+
| | | b a 9 | n |
+---+ +---+---+ + + + +
| | 7 8 | | o | |
+ + + + + +---+ + +
| | | | 6 | | p | |
+ +---+ + +---+---+ + +
| | | 5 | r q | |
+---+ +---+ +---+ + +---+
| | 3 4 | s | |
+ + + +---+---+ +---+ +
| | | 2 1 0 | t u | |
+---+---+---+---+---+---+---+---+
mazes.core> (def maze (algo/sidewinder (gr/new-grid 12 12)))
mazes.core> (def dist (dist/dijkstra maze [0 0]))
mazes.core> (pr/png-out maze "images/sidewinder.png" {:distances dist})
mazes.core> (def maze (algo/recursive-backtracker (polar/new-grid 20)))
mazes.core> (def distances (dist/dijkstra maze [5 18]))
mazes.core> (pr/png-out maze "polar-maze-distances.png" {:distances distances})
- Weaving
- Braiding breaks longest path
- Refactor messy bits of code, especially in algorithms
- Add more tests
- Add docstrings
- Try switching grid to protocols
- Try creating a web page using reagent
- Profile performance and see what optimisations can be made
Copyright © 2020 Tom Johnson
This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.