Skip to the content

Meikyuu迷宮

Generate seeded mazes and arrow puzzles, follow numbered levels, and play on flat grids or three-dimensional surfaces.

Meikyuu is the Japanese word 迷宮 for labyrinth. About the name

Contents

Reference · Mazes, arrows and mixed boards

MazeGeometrytype

How a maze lies in space, which is all the measure needs to know of it besides the passages: how far a cell is from the goal (any measure that rises with distance will do, the squared distance is cheapest) and how far the line bends going from one cell through another to a third, in radians from 0 (straight on) to pi (back the way it came). A flat maze reads these off its cell centres; a maze over a solid reads them in three dimensions.

Import it

import type { MazeGeometry } from "@johnmorrisdotca/meikyuu";

Definition

type MazeGeometry = {
    readonly points: readonly (readonly number[])[];
    distanceToGoal(cell: number): number;
    bend(before: number, cell: number, after: number): number;
};

Members

NameTypeDescription
pointsreadonly (readonly number[])[]

Where each cell lies: two numbers for a flat maze, three for a solid. The cover reads it.

distanceToGoal(cell: number): number
bend(before: number, cell: number, after: number): number

Examples

import type { SolidRecipe } from "@johnmorrisdotca/meikyuu/3d";
import { buildSolidMaze, solidGeometry } from "@johnmorrisdotca/meikyuu/3d";
import type { MazeGeometry } from "@johnmorrisdotca/meikyuu";

const solidRecipe: SolidRecipe = {kind:"cube",n:2,algorithm:"backtracker",seed:42};
const solid = buildSolidMaze(solidRecipe);
const value: MazeGeometry = solidGeometry(solid);
console.log(value);
{
  points: [
    [ 1, -0.5, -0.5 ],  [ 1, 0.5, -0.5 ],
    [ 1, -0.5, 0.5 ],   [ 1, 0.5, 0.5 ],
    [ -1, -0.5, -0.5 ], [ -1, 0.5, -0.5 ],
    [ -1, -0.5, 0.5 ],  [ -1, 0.5, 0.5 ],
    [ -0.5, 1, -0.5 ],  [ -0.5, 1, 0.5 ],
    [ 0.5, 1, -0.5 ],   [ 0.5, 1, 0.5 ],
    [ -0.5, -1, -0.5 ], [ -0.5, -1, 0.5 ],
    [ 0.5, -1, -0.5 ],  [ 0.5, -1, 0.5 ],
    [ -0.5, -0.5, 1 ],  [ 0.5, -0.5, 1 ],
    [ -0.5, 0.5, 1 ],   [ 0.5, 0.5, 1 ],
    [ -0.5, -0.5, -1 ], [ 0.5, -0.5, -1 ],
    [ -0.5, 0.5, -1 ],  [ 0.5, 0.5, -1 ]
  ],
  distanceToGoal: [Function: distanceToGoal],
  bend: [Function: bend]
}

What it prints (run when this page was built)

View sourceEdit on GitHubMade from the source of @johnmorrisdotca/meikyuu 3.2.0.