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 · Surface maze rules and geometry

pickCellfunction

The cell the point (x, y) of the picture is on, or -1 for none. The point is on a cell when it is inside the outline the cell is drawn with; a point on the line between two cells is on the lower numbered. Where outlines overlap (they do not on a convex solid, but a flattened globe's might at the very edge, and a star, a cross or a heart has parts in front of parts) the cell nearest the viewer at that point wins.

Import it

import { pickCell } from "@johnmorrisdotca/meikyuu/3d";

Definition

function pickCell(frame: SolidFrame, grid: SolidGrid, x: number, y: number): number

Parameters

NameTypeDescription
frameSolidFrame

The current projected surface-view arrays and dimensions.

gridSolidGrid

The valid native flat or surface cell graph.

xnumber

The horizontal viewport coordinate.

ynumber

The vertical viewport coordinate.

Returns

number

The cell the point (x, y) of the picture is on, or -1 for none. The point is on a cell when it is inside the outline the cell is drawn with; a point on the line between two cells is on the lower numbered. Where outlines overlap (they do not on a convex solid, but a flattened globe's might at the very edge, and a star, a cross or a heart has parts in front of parts) the cell nearest the viewer at that point wins.

Examples

import type { MazeRecipe } from "@johnmorrisdotca/meikyuu";
import { buildMaze } from "@johnmorrisdotca/meikyuu";
import type { Quat, SolidRecipe } from "@johnmorrisdotca/meikyuu/3d";
import { buildSolidMaze, createFrame, pickCell, projectFrame } from "@johnmorrisdotca/meikyuu/3d";

const recipe: MazeRecipe = {shape:"square",w:5,h:5,algorithm:"backtracker",mode:"to-goal",seed:42};
const maze = buildMaze(recipe);
const grid = maze.grid;
const solidRecipe: SolidRecipe = {kind:"cube",n:2,algorithm:"backtracker",seed:42};
const solid = buildSolidMaze(solidRecipe);
const solidGrid = solid.grid;
const q: Quat = [0,0,0,1];
const frame = projectFrame(createFrame(solidGrid),solidGrid,q,1,640,480);
console.log(pickCell(frame,solidGrid,320,240));
16

What it prints (run when this page was built)

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