This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.

Maniacal Maze


A place to practice my code by developing a maze generation program. I hope to revisit a 16 year old project I made by starting fresh with a CSS framework, and as a WordPress plugin.

Version 3 changes the frontend so that you make square mazes.
These mazes are now solvable via mouse click, arrow keys or touch on phone.

Version 2 draws the entire maze as a single image which can be downloaded. The maze should look good across multiple devices, depending on the theme. I added a that and end color so you can actually print and solve these!

Version 1 creates a random maze, and using divs, should display well on most-sized screens, including phones.

Next I am considering ways to add interactivity!
I’d like to add more options, too!


Just install like any other plugin. Put a [maniacal_maze] on an empty page or post to start the fun!


Installation Instructions

Just install like any other plugin. Put a [maniacal_maze] on an empty page or post to start the fun!


There are no reviews for this plugin.

Contributors & Developers

“Maniacal Maze” is open source software. The following people have contributed to this plugin.


Translate “Maniacal Maze” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.



  • Overhauled the code so most of the data is in javascript
  • Created handlers for touch and keyboard
  • Created logic to check for allowed moves
  • The maze is now solvable and should work with mouse, touch or arrow keys, on phone, tablet and PC.


  • FIxed the shortcode so it returns, not echos.


  • Tweaked the display. Not 100% satisfied but it works well enough for now.


  • We have attained version 2, a fully printable, solveable, random maze!
  • I rethought the display code to make sure it fits your display as least somewhat.
  • I added a green and red tile as a start and end point.


  • I replaced the current display code with one that creates a canvas image.
  • I originally had it draw walls, except for the exit walls. This caused a problem with edges midding chunks.
  • I finally had it draw a black background, then cut our the floor.
  • It then cut out the walls it needed to making things look better.
  • The ground toggles between 2 grays.


  • After many changes and optimizations to how I was doing things, I made so that it
  • Marks itself used. Increments the total counter.
  • Looks for walls that are not bedrock or in use already.
  • Randomly picks a wall, marks that bit, then in the new room, marks the opposite wall bit
  • It then moves to the new room.
  • If it can’t find an exit, it moves back one in the history and repeats until it finds a new room
  • What REALLY REALLY helps is when you map height to h and width to w in the history instead of the other way around.


  • Changed how I enqueueued the css framework. Hopefully this doesn’t mess up any themes. If so I’ll have to compile a css file with w3 under #maniacal_maze_mazer
  • Moved the maze creating code over to a function.
  • Renamed the variable $doors to $walls since it does the exact opposite of what I named it.
  • Started working on the function for starting the process with the first two steps in the loop, manually in a for().
  • Took out my test code for error checking and resubmitting to WP Repository!


  • First release to submit to WordPress for inclusion into the repository.
  • Maze width and height page with error checking finished.
  • Link is created and page refreshed to the new link.
  • Links can be entered by hand and easy to change.
  • Links are error checked.
  • Array of cells created with empty value for doors.
  • Array of bitwise “bedrock” created to make it easier when finding valid walls.
  • CSS done using W3.CSS.
  • Created jQuery and javascript to handle buttons turning red as well as sizing cell to fit your display and to update this if your viewport size changes.