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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 25a41050524d8cfe7ae0abf1795f87015d6b4c86
4
- data.tar.gz: 6bfb0374d773201bb5b8f46f9e8c85733ad0202c
3
+ metadata.gz: 3f47e632779d7b0a33dcbbb1958199fe31c5c8cb
4
+ data.tar.gz: 1517bd675b2c944fbec6718d7dcc6133ed739086
5
5
  SHA512:
6
- metadata.gz: bc3c0b157789ef61eb2dbaa5b0f9e3dde9f6333b2aa2461ad3b62057e26de77b5f1ba946eb9c613e8640c7dba9579104f473b3d58e7af840e21a05592e2176a3
7
- data.tar.gz: e50657baaea38e8c4780357b120be77926dc7eb60adfe8a4300c2b1479f2ac467e56eea42ffc97c174457a692d008ba57ff2888610b8c8a8da60fe8cdc9dd9fa
6
+ metadata.gz: 9206be13fe795c4ea19219c7a7bce3d700ed6ad67f2a6d17f2f834109f8ad1e728cd71ae8bf297b0d7168454b756b4759ca3ea34076ebba9727c91ccdf1e1f77
7
+ data.tar.gz: 9a6d018e43dd27b1582f12fde3b531513a31e3fbc9f02dbd23fbc9e9943d318c9b3e69eb89769da97c626f8dea3aafc6efbaf9385b5b3ca838b29b03b228492f
data/.travis.yml CHANGED
@@ -1,4 +1,15 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.1.0
4
+ - 2.1.1
5
+ - 2.1.2
6
+ - 2.1.3
7
+ - 2.1.4
8
+ - 2.1.5
9
+ - 2.2.0
10
+ - 2.2.1
11
+ - 2.2.2
3
12
  - 2.2.3
13
+ - ruby-head
14
+ - jruby-head
4
15
  before_install: gem install bundler -v 1.10.6
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', github: 'equivalent/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
- # MazeMagic::Edge.instance # ' '
39
- # MazeMagic::HorizontalWall.instance # _
40
- # MazeMagic::VerticalWall.instance # |
41
- # MazeMagic::Passage.instance # ' '
40
+ # so something like:
42
41
  #
43
- cells_grid = MazeMagic::MazeGenerator::InstructionsGridToCellsGrid
44
- .new(grid: grid)
45
- .tap { |generator| generator.call }
46
- .cells_grid
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 - render the cells viea console
49
- MazeMagic::Renderer::ConsoleRenderer.new(cells_grid: cells_grid).call
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
@@ -1,3 +1,3 @@
1
1
  module MazeMagic
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/maze_magic.rb CHANGED
@@ -17,6 +17,7 @@ require 'maze_magic/maze_generator/recursive_backtracking'
17
17
  require 'maze_magic/maze_generator/instructions_grid_to_cells_grid'
18
18
 
19
19
  require 'maze_magic/renderer/console_renderer'
20
+ require 'maze_magic/generate'
20
21
 
21
22
  module MazeMagic
22
23
  end
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.1.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-06 00:00:00.000000000 Z
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