maze | simple JavaScript utility for drawing mazes | Graphics library
kandi X-RAY | maze Summary
kandi X-RAY | maze Summary
This is just a simple little maze-generation algorithm which can draw and solve simple mazes using JavaScript. The test.html page is an example of drawing a maze--if you click the drawn maze, it will also draw its solution. The stats.html presents the distribution of the lengths of the random mazes' solutions. These are generated each time, which takes a while and may cause browser warnings.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
- Plot axes .
- Set the axis generator
- Draws a series of series lines .
- Creates a new Options object .
- Draw the pie
- Process all data from series
- Draw the grid .
- Draws the line areas of a point .
- Draw the pie pieces
- stack for other data structures
maze Key Features
maze Examples and Code Snippets
def solve_maze(maze: list[list[int]]) -> bool:
"""
This method solves the "rat in maze" problem.
In this problem we have some n by n matrix, a start point and an end point.
We want to go from the start to the end. In this matrix ze
def run_maze(maze: list[list[int]], i: int, j: int, solutions: list[list[int]]) -> bool:
"""
This method is recursive starting from (i, j) and going in one of four directions:
up, down, left, right.
If a path is found to destinatio
public List solve(Maze maze) {
LinkedList nextToVisit = new LinkedList<>();
Coordinate start = maze.getEntry();
nextToVisit.add(start);
while (!nextToVisit.isEmpty()) {
Coordinate cur = nextToVisit.r
Community Discussions
Trending Discussions on maze
QUESTION
I've been trying to make a program that could solve a maze recursively. But I have an issue with my recursion in my algorithm method. The algorithm can only solve as far as one position for the solution.
Here's it on console:
Note "char indicators" for the 2D array:
- '*' = walls
- '#' = start
- '$' = end
- ' ' = possible path/not a wall
- '@' = path
- '~' = deadend
Desired output:
...ANSWER
Answered 2022-Apr-10 at 07:39You need to put the ++
or --
before row
or col
on when you recall algorithm()
. When one of these comes after a variable, the variable gets incremented, but not the value that comes out:
QUESTION
I'm having trouble generating a random maze. My algorithm creates the initial box where the maze will be. But I cannot seem to generate any walls inside of this box. I'm trying to use the recursive division algorithm. Here is my code:
...ANSWER
Answered 2021-Dec-11 at 16:09I see at least these issues in your code:
The wall is built at a random position without taking into account the odd/even division of your cells in potential-wall / not-wall cells (which is the reason why you had
this.COLS = this.width*2+1
in the constructor). As a consequence your walls can end up adjacent to eachother, leaving no room for open cells. You should only place horizontal walls at even Y-coordinates, and vertical walls at even X-coordinates.The door in the wall is always made at the extreme end of the wall, while the algorithm should make the gap in that wall randomly.
There is only one recursive call, which means the algorithm is not aware of the fact that a wall generally divides the room into two partitions, each of which should (generally) be further divided up through recursion. So you need two recursive calls instead of one.
If you correct those points it could work. However, I prefer a data structure where really each inner array element represents a cell, and the walls are inferred by properties of those cells. So, no cells will function as wall. Each cell then can track which are its neighbors (4 at the most). A wall can then be implemented by removing a neighbor from a cell (and doing the same in the reverse direction). The visualisation of a wall can then be done with border
CSS styling.
Here is an implementation:
QUESTION
I searched and even visited a maze-algorithm-collecting website, but nothing satisfies the following statements I require.
To make it clear, I need an infinite maze generating algorithm that:
- makes a
perfect maze
, which is to say,2d
,grid-based
- each square is space/wall
- every 2 spaces are linked and there's only one path
- no 2x2 square is all space/wall
- provides an
f(s,x,y)
, wheres
is used forrandom seed
or something like this- returns type of square at (x,y)
- for different
s
within 0~(32768 or something), gives different results
- infinite (probably limited by 64-bit int though)
- extra space (I mean in program) is allowed
Clarification:
- meaning of infinite here: something like this
ANSWER
Answered 2021-Nov-04 at 08:53The problem seems a bit overwhelming: infinitely many infinite mazes, such that we can restrict ourselves to a multitude of different bounds (say, if we wanted a roughly 1 million x 1 million square) and still have unique paths between any two spaces (and your other conditions). Let's break this down into smaller pieces.
Suppose we could construct a 7 by 7 square maze-block, and were able to make a border of walls around it, with one or two gates on this border where we wanted. Then all we'd have to do is connect these square blocks in a spiral: a central square with one gate at the top, and a counterclockwise spiral of blocks with two gates each, in the direction of the spiral:
(Each numbered box is a 7x7 maze)
There's two general cases:
- 'Straight' pieces, where the two gates are on opposite sides, and
- 'Corner' pieces, where the spiral turns and gates are on adjacent sides.
We want to make these pieces generic, so we can mix and match mazes and have them fit together. To do this, we'll use this template:
- Border Rule: The bottom and left sides of each square are all walls, except in the center of each side.
- Free space Rule: Unless required by rules 1 or 3, no walls are allowed in the top and right sides of a maze square.
- Gate Rule: Where two mazes meet, if the meeting is part of the spiral, both center sides will be open (in other words, crossings happen in the center of the borders). Otherwise, the maze which is below or to the left of the other shall have a wall in the center of this border.
That's a lot, so let's see an example. Here we have a template for a 'straight' horizontal connector, highlighted in blue (all mazes are 7 by 7). X means wall, O means required to be open (a crossing point/open gate between two mazes). Red X's are the border from rule 1, purple X's are blocked gates from rule 3.
The center 5 by 5 of each maze is customizable. We must ensure that there are no inaccessible squares or equal 2x2 within our maze only, since the rules above guarantee this is true where mazes meet.
One possible maze to fit the above template (there are many):
For an example of a corner piece:
I've similarly drawn examples of each possible connection to make sure it's always possible: there are many possible ways to do this for each piece type (including the special center piece).
Now, for how to generate infinitely many infinite mazes based on a seed. Suppose you created at least 2 examples of each connection piece (there are 2 straight connectors and 4 corners), although you can just make one of each and reflect it. (Really you only need 2 different examples of one connection type.)
Given any seed binary string, e.g. 10110, let this denote our choices of which example piece to use while we make the maze spiral, counting up as in the first picture. A '0' means means use our 1st example for this connector; a '1' means we use the second. You can then repeat this/extend the binary string infinitely (10110 10110 ...). Since this is periodic, we can, using some math, figure out the piece type at any point in the sequence.
I've left out the math for the pattern of connection types: this is easy to work out for a counterclockwise spiral. Given this pattern, and a convention that the point x,y = (0,0) is the bottom left corner of the spiral-start-maze-block, you can work out 'wall or space' for arbitrary x and y. This maze is infinite: you can also restrict the borders to any full odd square of mazes in the spiral, i.e. (7*(2n+1))^2
cells for positive n.
This framework pattern for a maze is customizable, but not very difficult to solve, as the regularity means you only need to solve it locally. There's nothing special about 7; any odd number at least 7 should work equally well with the same rules, if you want to make local maze blocks larger and more complex.
QUESTION
I am trying to create a game where I need to draw a maze. I am doing this by changing whole blocks of the screen into a different colour. However, this does not seem to work. I have an array which I use to reference where the coloured blocks should be. Please can I get help fixing this. Thank you.
Here is my code:
...ANSWER
Answered 2021-Sep-10 at 10:32This code works fine when you define block_sizex, block_sizey, wall_width, wall_height
.
e.g.
QUESTION
I'm working on different maze generation algorithms and I use p5.js to render the different steps of the generation on the screen. I already have completed a project where I do everything from the draw method and it was fun. Now, I would like to have separate files, each one containing an algorithm. How do I display the steps from a selected algorithm, knowing that it is in a different file. I have tried the noLoop() and redraw() methods without any success so far. Below is my sketch.js and my grid.js file
sketch.js
...ANSWER
Answered 2021-Sep-06 at 02:32I have made some research and I had activate the "instance mode".
see https://p5js.org/reference/#/p5/p5
Here is how I solved my issue:
index.html -> creating divs that will each contain a separate sketch.
QUESTION
I am trying to visualize a Maze-Generator and i don't know how i can make a delay everytime a Cell/Node is visited. I have read that you shouldn't use Thread.sleep() in a GUI application because it messes with the event dispatch Thread, so i tried utilizing the Swing.Timer, however this also did'nt work out for me. Everytime i tried it, the program just froze and the Window that popped up was blank.
This is the GUI-Class which i use to visualize each step of the Path-finding-Method:
...ANSWER
Answered 2021-Sep-01 at 06:33Swing
is a single Thread library. All painting tasks are executed by the EDT.
Running long processes (such path finding) on the EDT keeps it busy, so it does not do update the gui (gui becomes unresponsive, freezes).
Run the long process on a different thread, but remember that all Swing
gui updates needs to be done by the EDT.
The different thread is where you can apply a delay for slowing down the process for better visualization.
A good tool to perform such tasks is a SwingWorker
.
You can find an example demonstrating the basic structure here.
If you only want to do incremental painting which does not involve long processes you can use a Swing Timer
:
QUESTION
So I'm creating a game and I'm using Recursive backtracking algorithm to create the maze, however, I don't want it to show the maze generation and just to instantly generate the maze. I'm unsure of how to actually do this though so any help would be appreciated, I've already tried not drawing the generated white part but that then doesn't create the maze.
...ANSWER
Answered 2021-Jun-18 at 11:15Call m.create_maze()
in a loop before the application loop. Terminate the loop when len(m.stack) == 0
:
QUESTION
I am fairly new to Haskell and trying to comprehend writing functions and if else conditions and everything else. I am trying to write a very basic function but I don't fully understand if-then-else usage. I have a maze that i represent as [[Char]]. And this function will simply look at the position x,y in the maze and returns if it's a valid position or not. (whether it's in the maze boundaries or not)
I have written this so far:
...ANSWER
Answered 2021-Jun-02 at 13:50The if-else
expression requires both parts. You can nest the expressions, so something like if c1 then a else if c2 then b else c
.
QUESTION
Below is my Python and Html code:-
Python:
...ANSWER
Answered 2021-May-18 at 03:52error_img.save(byte_io, 'png')
QUESTION
after I applied some processings e.g. cv2.Canny()
, it looks like this now:
As you can see that the black lines become hollow. I have tried erosion and dilation, but if I do them many times, the 2 entrances will be closed(meaning become connected line or closed contour).
How could I make those lines solid like the below image while keep the 2 entrances not affected?
Update 1
I have tested the following answers with a few of photos, but the code seems customized to only be able to handle this one particular picture. Due to the restriction of SOF, I cannot upload photos larger than 2MB, so I uploaded them into my Microsoft OneDrive folder for your convenience to test.
https://1drv.ms/u/s!Asflam6BEzhjgbIhgkL4rt1NLSjsZg?e=OXXKBK
Update 2
I picked up @fmw42's post as answer as his answer is the most detailed one. It doesn't answer my question but points out the correct way to process maze which is my ultimate goal. I like his approach of answering questions, firstly tells you what each step should do so that you have a clear idea about how to do the task, then provide the full code example from beginning to end. Very helpful.
Due to the limitation of SOF, I can only pick up one answer. If multiple answers are allowed, I would also pick up Shamshirsaz.Navid's answer. His answer not only points to the correct direction to solve the issue, but also the explanation with visualization really works well for me~! I guess it works equally well for all people who are trying to understand why each line of code is needed. Also he follows up my questions in comments, this makes the SOF a bit interactive :)
The Threshold track bar in Ann Zen's answer is also a very useful tip for people to quickly find out a optimal value.
...ANSWER
Answered 2021-May-07 at 15:27Canny is an edge detector. It detects the lines along which color changes. A line in your input image has two such transitions, one on each side. Therefore you see two parallel lines on each side of a line in the image. This answer of mine explains the difference between edges and lines.
So, you shouldn’t be using an edge detector to detect lines in an image.
If a simple threshold doesn't properly binarize this image, try using a local threshold ("adaptive threshold" in OpenCV). Another thing that works well for images like these is applying a top hat filter (for this image, it would be a closing(img) - img
), where the structuring element is adjusted to the width of the lines you want to find. This will result in an image that is easy to threshold and will preserve all lines thinner than the structuring element.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install maze
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page