maze_magic 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/equivalent/maze_magic.svg)](https://travis-ci.org/equivalent/maze_magic)
|
2
|
+
[![Code Climate](https://codeclimate.com/github/equivalent/maze_magic/badges/gpa.svg)](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
|