My Maze program drew and solved random puzzles. Each arrow key would take a step in that direction if possible. The S key (for solve) would take steps along a wall as long as the key was held.
The maze was represented as a series of display processor instruction words. Each word was a square. The central processor twiddled bits to indicate the presence or absence of walls, cheese and mouse droppings. The bits were such that the display processor would be directed to one of sixteen different display routines as needed to properly display the maze.
The dropping-present bit would be toggled each time though. This caused the trail of droppings to lead from start to current position by the shortest path.
The maze was generated by knocking down walls from visited to non-visited squares. Since every square was visited once and only once, it follows that every square was reachable through only one path without any loops.
Images courtesy of Josh Dersch. github
Inspirations
Dave Dodson suggested the generation and solution algorithms for what I would call Proper Mazes.
Bill Croft suggested sharing a data structure between both processors.
We eventually scored a copy of the awesome first person shooter, Maze War, that ran on Imlac and helped launch the game industry. wikipedia
I used the same generation algorithm in a pascal program on the PB-1 computer to make images we called Pebeliths.
Apple made a 2-1/2-d maze game and shipped it with the original mac.
A one-line basic program will stream maze-like images. The program itself has become the title of a study of is structure and attraction. pdf video
10 PRINT CHR$(205.5+RND(1)); : GOTO 10
YOUTUBE n7QrX2EwYO4 10 PRINT in Action
.
Mike Bostock explores maze algorithms in a 2014 presentation and accompanying visualizations. post
DOT strict digraph rankdir=LR node [style=filled fillcolor=lightyellow penwidth=3 color=black fontname="Helvetica"] HERE NODE node [style=filled fillcolor=lightblue] WHERE /^Next/ LINKS HERE -> NODE node [style=filled fillcolor=white] HERE NODE WHERE /^Next/ LINKS HERE -> NODE node [style=filled fillcolor=white penwidth=3 color=black] LINKS HERE -> NODE node [style=filled fillcolor=white penwidth=1 color=black] HERE NODE LINKS HERE -> NODE node [style="filled,rounded,dotted" fillcolor=white] edge [style=dotted] HERE NODE BACKLINKS NODE -> HERE