maze_magic 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +11 -0
- data/README.md +30 -26
- data/lib/maze_magic/generate.rb +77 -0
- data/lib/maze_magic/version.rb +1 -1
- data/lib/maze_magic.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3f47e632779d7b0a33dcbbb1958199fe31c5c8cb
|
4
|
+
data.tar.gz: 1517bd675b2c944fbec6718d7dcc6133ed739086
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9206be13fe795c4ea19219c7a7bce3d700ed6ad67f2a6d17f2f834109f8ad1e728cd71ae8bf297b0d7168454b756b4759ca3ea34076ebba9727c91ccdf1e1f77
|
7
|
+
data.tar.gz: 9a6d018e43dd27b1582f12fde3b531513a31e3fbc9f02dbd23fbc9e9943d318c9b3e69eb89769da97c626f8dea3aafc6efbaf9385b5b3ca838b29b03b228492f
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
[](https://travis-ci.org/equivalent/maze_magic)
|
2
|
+
[](https://codeclimate.com/github/equivalent/maze_magic)
|
3
|
+
|
1
4
|
# MazeMagic
|
2
5
|
|
3
6
|
Ruby Maze generating gem.
|
@@ -7,7 +10,7 @@ Ruby Maze generating gem.
|
|
7
10
|
Add this line to your application's Gemfile:
|
8
11
|
|
9
12
|
```ruby
|
10
|
-
gem 'maze_magic'
|
13
|
+
gem 'maze_magic'
|
11
14
|
```
|
12
15
|
|
13
16
|
And then execute:
|
@@ -16,37 +19,33 @@ And then execute:
|
|
16
19
|
|
17
20
|
## Usage
|
18
21
|
|
22
|
+
#### Simple use:
|
23
|
+
|
19
24
|
```ruby
|
20
|
-
# init grid
|
21
|
-
grid = MazeMagic::Grid.new(height: 5, width: 5)
|
22
25
|
|
26
|
+
def generate_maze
|
27
|
+
MazeMagic::Generate
|
28
|
+
.new(height: 5, width: 5)
|
29
|
+
.tap { |g| g.generate_maze }
|
30
|
+
.maze
|
31
|
+
end
|
23
32
|
|
24
|
-
#
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
#
|
29
|
-
#
|
30
|
-
|
31
|
-
# apply maze algorithm instructions to grid
|
32
|
-
MazeMagic::MazeGenerator::RecursiveBacktracking
|
33
|
-
.new(grid: grid)
|
34
|
-
.call
|
35
|
-
|
36
|
-
# translate maze instructions to Cells:
|
33
|
+
# maze is a 2 dimensional array of these singleton objects:
|
34
|
+
#
|
35
|
+
# MazeMagic::Edge.instance # ' '
|
36
|
+
# MazeMagic::HorizontalWall.instance # _
|
37
|
+
# MazeMagic::VerticalWall.instance # |
|
38
|
+
# MazeMagic::Passage.instance # ' '
|
37
39
|
#
|
38
|
-
#
|
39
|
-
# MazeMagic::HorizontalWall.instance # _
|
40
|
-
# MazeMagic::VerticalWall.instance # |
|
41
|
-
# MazeMagic::Passage.instance # ' '
|
40
|
+
# so something like:
|
42
41
|
#
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
# [[Edge, HW, HW, HW, HW, Edge],[VW, P, P,VW,P,P,P, HW],...]
|
43
|
+
#
|
44
|
+
maze = generate_maze
|
45
|
+
|
47
46
|
|
48
|
-
# optional
|
49
|
-
MazeMagic::Renderer::ConsoleRenderer.new(cells_grid:
|
47
|
+
# optional: render in console
|
48
|
+
MazeMagic::Renderer::ConsoleRenderer.new(cells_grid: maze).call
|
50
49
|
|
51
50
|
# _________
|
52
51
|
# |_ | _ |
|
@@ -57,6 +56,11 @@ MazeMagic::Renderer::ConsoleRenderer.new(cells_grid: cells_grid).call
|
|
57
56
|
|
58
57
|
```
|
59
58
|
|
59
|
+
#### More Complex use:
|
60
|
+
|
61
|
+
`MazeMagic::Generate` is just an Interface. For more complex usage check
|
62
|
+
`lib/maze_magic/generate.rb`, ...or specs.
|
63
|
+
|
60
64
|
## Maze generating Algorithm
|
61
65
|
|
62
66
|
At this point there is just altered version of [Recursive Backtracking
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module MazeMagic
|
2
|
+
class Generate
|
3
|
+
attr_reader :height, :width, :maze, :options
|
4
|
+
attr_writer :algorithm
|
5
|
+
|
6
|
+
def initialize(height:, width:, **options)
|
7
|
+
@height = height
|
8
|
+
@width = width
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate_maze
|
13
|
+
initialize_instructions_grid
|
14
|
+
apply_maze_algorithm_to_grid
|
15
|
+
generate_maze_cells_from_instructions
|
16
|
+
return maze
|
17
|
+
end
|
18
|
+
|
19
|
+
def algorithm
|
20
|
+
@algorithm ||= MazeMagic::MazeGenerator::RecursiveBacktracking
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
attr_reader :instructions_grid
|
26
|
+
|
27
|
+
## Initialize instructions grid
|
28
|
+
#
|
29
|
+
# _________
|
30
|
+
# |_|_|_|_|_|
|
31
|
+
# |_|_|_|_|_|
|
32
|
+
# |_|_|_|_|_|
|
33
|
+
# |_|_|_|_|_|
|
34
|
+
# |_|_|_|_|_|
|
35
|
+
#
|
36
|
+
def initialize_instructions_grid
|
37
|
+
grid_options = options.select { |k,v| %i(start_x start_y).include?(k) }
|
38
|
+
args = { height: height, width: width }.merge(grid_options)
|
39
|
+
@instructions_grid = grid_klass.new(args)
|
40
|
+
end
|
41
|
+
|
42
|
+
def apply_maze_algorithm_to_grid
|
43
|
+
MazeMagic::MazeGenerator::RecursiveBacktracking
|
44
|
+
.new(grid: instructions_grid)
|
45
|
+
.call
|
46
|
+
end
|
47
|
+
|
48
|
+
## Generate Maze Cell objects from instructions:
|
49
|
+
#
|
50
|
+
# 2 dimensional array of these singleton objects:
|
51
|
+
#
|
52
|
+
# MazeMagic::Edge.instance # ' '
|
53
|
+
# MazeMagic::HorizontalWall.instance # _
|
54
|
+
# MazeMagic::VerticalWall.instance # |
|
55
|
+
# MazeMagic::Passage.instance # ' '
|
56
|
+
#
|
57
|
+
# Objects inside can be translated to maze walls:
|
58
|
+
#
|
59
|
+
# _________
|
60
|
+
# |_ | _ |
|
61
|
+
# | _| | _|
|
62
|
+
# | |_ | | |
|
63
|
+
# | | _| | |
|
64
|
+
# |___|_____|
|
65
|
+
#
|
66
|
+
def generate_maze_cells_from_instructions
|
67
|
+
@maze ||= MazeMagic::MazeGenerator::InstructionsGridToCellsGrid
|
68
|
+
.new(grid: instructions_grid)
|
69
|
+
.tap { |generator| generator.call }
|
70
|
+
.cells_grid
|
71
|
+
end
|
72
|
+
|
73
|
+
def grid_klass
|
74
|
+
MazeMagic::Grid
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/maze_magic/version.rb
CHANGED
data/lib/maze_magic.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maze_magic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Valent
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- bin/setup
|
72
72
|
- lib/maze_magic.rb
|
73
73
|
- lib/maze_magic/edge.rb
|
74
|
+
- lib/maze_magic/generate.rb
|
74
75
|
- lib/maze_magic/grid.rb
|
75
76
|
- lib/maze_magic/horizontal_wall.rb
|
76
77
|
- lib/maze_magic/maze_generator.rb
|