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 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