h1. Maze Maze generator and A* path finder. It's horrible, and needs refactoring, but it works. h2. Server/client There is a ruby/sinatra server, which does all of the hard work, and exposes an api. There is a JS/p5.js front end to it, which only does UI. h2. API - GET /api/v0.1/maze := Get the MML definition of the maze - POST /api/v0.1/maze := Generate a new maze (returns MML) - GET /api/v0.1/path := Get the PML definition of the path, if any - GET /api/v0.1/path/valid := Returns the work "true" or "false" if a path has been found - POST /api/v0.1/path := Generate a new path (returns nothing) h2. Maze Markup Language / Path Markup Language h3. MML MML describes the maze in the following format: bc. 40 30 10 11 22 13 1 3 4 5 30 23 2 2 [...] * Line 1 is the width and height of the maze * Line 2 is the starting x and y coordinates * Line 3 is the target x and y coordinates * Line 4 and beyond are untraversable "blocks": ** The first two numbers are the anchor x and y coordinates of the block ** The second two numbers are the width and height of the block * All other nodes are considered traversable * There is no diagonal path between two untraversable nodes touching at a corner h3. PML PML describes the path in the following format: bc. 11 12 12 13 13 13 14 13 15 13 [...] * Each line contains the x and y coordinates of the next step in the path * The start and target do not appear in the path