Maze generator and A* solver with ASCII and image rendering
Project description
squared_maze
Tiny Python package to generate grid mazes, solve them with A* and render ASCII and PNG visualizations. The project includes utilities to pick valid start/end cells, force a maze to become unsolvable, or introduce additional solutions by breaking walls.
Features
- Generate perfect mazes (recursive backtracker) as a grid where
1is walkable and0is a wall. - Solve with A* (
src/squared_maze/solver.py). - Render ASCII (
grid_to_ascii) with customizable symbols. - Render PNG images (Pillow) with start (green), end (red), path (blue), walls (dark gray) and floors (light gray).
- Helpers:
find_valid_cell,make_unsolvable,make_multiple_solutions.
Quick install
This project requires Python 3.8+ and Pillow for image output. Install the dependency into your environment:
pip install pillow
Then install the package
pip install squared_maze
Running the example notebook
Open the example notebook examples/maze_example.ipynb with Jupyter or run it
in a supported environment (VS Code/Jupyter Lab). The notebook demonstrates:
- generating and solving a maze
- saving two images (with and without the path)
- creating an unsolvable variant
- creating a variant with multiple distinct solutions
If running the notebook from the repository you may need to add the project
src folder to PYTHONPATH. From the repository root you can run a small
script or open a Python REPL like this:
python3 -c "import sys; from pathlib import Path; sys.path.insert(0, str(Path('src').resolve())); from squared_maze import generate_maze, astar, grid_to_ascii; g=generate_maze(12,20,seed=42); print(grid_to_ascii(g, None))"
Basic usage (script)
from squared_maze import (
generate_maze,
astar,
grid_to_ascii,
save_images,
find_valid_cell,
)
# generate
grid = generate_maze(12, 20, seed=42)
start = find_valid_cell(grid, seed=1)
end = find_valid_cell(grid, exclude={start}, seed=2)
path = astar(grid, start, end)
print(grid_to_ascii(grid, path, start, end))
save_images(grid, path, start, end, cell_size=24, out_prefix='maze_out')
API (key functions)
generate_maze(rows, cols, seed=None)-> gridastar(grid, start, end)-> list of coordinates orNonegrid_to_ascii(grid, path=None, start=None, end=None, ...)-> str (customizable symbols)save_images(grid, path=None, start=None, end=None, cell_size=16, out_prefix='maze')-> (fn_no, fn_yes)find_valid_cell(grid, exclude=None, seed=None)-> (row, col)make_unsolvable(grid, start, end, astar_fn, ...)-> bool (modifies grid)make_multiple_solutions(grid, start, end, astar_fn, ...)-> bool (modifies grid)
Notes
- The generator produces a perfect maze (a spanning tree). That means there
is exactly one path between any two room cells until you deliberately
break walls (e.g. with
make_multiple_solutions). Usefind_valid_cellto pick valid walkable start/end cells. - Images are saved to the working directory. Filenames are returned by
save_images.
Contributing
- Small, self-contained patches are welcome. Please keep docstrings and code PEP8-compatible and add a short test if you change core behaviour.
License
- This repository does not include an explicit license file. Add one if you intend to publish or share the code.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file squared_maze-0.1.1.tar.gz.
File metadata
- Download URL: squared_maze-0.1.1.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5651ced65bafaffe4463408d7a9a315b235750329489e9ef83fc66e9bbc03619
|
|
| MD5 |
e10d05d70057adb0ef239b95e3c7368d
|
|
| BLAKE2b-256 |
6b630bc1ac7b17d1908e03fed106e88c3cb8282d017de7d14b4db5f224f258c4
|
File details
Details for the file squared_maze-0.1.1-py3-none-any.whl.
File metadata
- Download URL: squared_maze-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b7ec1adef1f00005a46b05c68326d293a6178dfa820fa692446685fc2f473407
|
|
| MD5 |
a7183bdb764d0d9f63996b4706e4c36c
|
|
| BLAKE2b-256 |
6d603ba9d25056d8316b1c88e548d7cdf525b0f0bdef4102844ad0e30d12ed38
|