Python Maze Builder: generate perfect mazes with a growing tree algorithm. Generate rooms, multiple floors and more.
Project description
PyMazeBuilder
Generate perfect mazes with Node using a growing tree algorithm. This is a python clone of node-maze-generator.
█████████████████████
█░░░░░░░░░█░░░░░░░░██
██░░░░░░░░█░█████░███
█░░░░░░░░░░░█░░██░░░█
█░░░░░░░░░█░█░█████░█
█░░░░░░░░░█░░░█░░░█░█
█░░░░░░░░░█████░█░█░█
███░░░░██░░░░░░░█░░░█
███░███████████████░█
█░░░█░░░░░█░░░░░░░░░█
█░███░███░█░█████████
█░█░░░███░█░█░░░░░░░█
█░█░███░█░█░█░█████░█
█░█░██░░█░█░░░█░░██░█
█░█░██░░█░█████░███░█
█░░░█░░░░░░░█░░░░░█░█
█░███░░░░░░░█░███░█░█
█░██░░█░░░░░█░█░░░█░█
█░███░█░█████░█░███░█
█░░░░░█░░░░░░░█░░░░░█
█████████████████████
Generated data structure
{
grid: [
[
Cell {
x: 0,
y: 0,
exits: [],
blocked: true,
displayed: false,
visited: false
},
...
]
]
rooms: [
Room {
x: 0,
y: 0,
width: 0,
height: 0
}
]
}
Quick use
from pymaze.generators.generator import Generator
from pymaze.generators.maze import MazeGenerator
from pymaze.renderer import Renderer
Renderer(Generator([
{
'generator': MazeGenerator,
'options': {
'width': 10,
'height': 10,
'floors': 1
}
},
]))
Random
utils.py
contains a random class which handles all random number generation and can be seeded.
Generator classes
Generator classes can be passed as an optional array of objects to the maze generator.
The shape of this data structure is as follows:
[
{
generator: <generator class>,
options: <options object>
},
...
]
Generator
(src/pymaze/generator.py
) will iterate over each generator class and instantiate it.
Example
The following example shows how to generate a maze with rooms using the provided room generator.
(also see src/pymaze/main.py
)
from pymaze.generators.generator import Generator
Generator([
{
'generator': MazeGenerator,
'options': {
...
}
},
{
'generator': RoomGenerator,
'options': {
...
}
},
{
'generator': StairsGenerator,
'options': {
...
}
}
])
Renderer(generator)
Multi-floor maze
Use the floors
option to generate a multi-floor maze.
Use the src/generators/stairs.py
generator to connect the floors with stairs.
Floor 0
█████████████████████
█░██░░░░░██░░░░░░░░░█
█░███░█░███░░░░░█░█░█
█░░░█░█░░░░░█░░░█░█░█
███▼█░█░█████████░█░█
█░░░█░█░░░█░░░░░█░███
█░███░███░█░███░█░███
█░█░░░░██░█░█░░░█░░░█
█░█░█████░█░█░█░█░░░█
█░█░░░░░█░███░█░█░░░█
█░█░░██░█░███░█░█░░░█
█░█░░░█░█░░░░░█░░░█░█
█░███░█░███░░░░░█░█░█
█░██░░█░░░░░░░█░░░█░█
█░███████████░█░███░█
█░░░█░░░█░░░█░░░█░░░█
███░█░█░█░█░█████░█░█
███░░░█░█░█░░░░░░░█░█
█░█████░█░███░░░░░█░█
█░░░░░░░░░██░░░░░░░░█
█████████████████████
Floor 1
█████████████████████
█░░░░░░░░░█░░░░░░░░██
██░░░░░░░░█░█████░███
█░░░░░░░░░░░█░░██░░░█
█░░▲░░░░░░█░█░█████░█
█░░░░░░░░░█░░░█░░░█░█
█░░░░░░░░░█████░█░█░█
███░░░░██░░░░░░░█░░░█
███░███████████████░█
█░░░█░░░░░█░░░░░░░░░█
█░███░███░█░█████████
█░█░░░███░█░█░░░░░░░█
█░█░███░█░█░█░█████░█
█░█░██░░█░█░░░█░░██░█
█░█░██░░█░█████░███░█
█░░░█░░░░░░░█░░░░░█░█
█░███░░░░░░░█░███░█░█
█░██░░█░░░░░█░█░░░█░█
█░███░█░█████░█░███░█
█░░░░░█░░░░░░░█░░░░░█
█████████████████████
▲ = stairs going up
▼ = stairs going down
█ = wall
░ = floor
Custom generator classes
Custom generators should match the following pattern. class SomeGenerator: def init(data: dict, options: dict): # do something with the data object self.data = data self.data["some_property] = "some value"
See src/pymaze/room.py
and src/pymaze/maze.py
for complete examples along with a list of optional arguments that each class takes.
License
Contributors
Project details
Release history Release notifications | RSS feed
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
Hashes for pymazebuilder-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f690432cde53d1b37d32ec893e8980687a7fb5fe54da01f45c2b57d4bdc61a5 |
|
MD5 | b76f63891472f43522271fc77a3943bf |
|
BLAKE2b-256 | a2638172693c5e593fafca86cb88862e16553fff6202c8ae2774a5bd341aa8cc |