Giter Club home page Giter Club logo

mazes's Introduction

mazes

A Clojure library designed to create mazes, based on Mazes for Programmers.

Usage

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})

Sidewinder coloured

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})

Polar coloured

TODOs

  • 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

License

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.

mazes's People

Contributors

tbtommyb avatar

Stargazers

 avatar Simon Gray avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.