maze_magic 0.2.1.1 → 0.3.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: cb317cd3c86320f1a7623933c05e7cd48cc8f48a
4
- data.tar.gz: 85c9ca375dddded5129e4ac13dc3746bae3e7479
3
+ metadata.gz: f7447fa71e7555290286900742895d52354352e8
4
+ data.tar.gz: 66c642337e7bbcf27cfa02f7fa540f5249063fa2
5
5
  SHA512:
6
- metadata.gz: f789ce926446fc33b2b46362e00b4133c5bedb36c870c8810786b5388c8bfdffe36cab0caf6b9f5e211fe6c7a17a38d60524fe1c9fe8cdf789988caba8dbed8c
7
- data.tar.gz: 14e2800aaf2ae2c9a0d431bdfde5b845e30e06ee2f01a5cebf521966d99e93b88a6ec6e09f9e87506d8e7187f5cab0647718213c472b784ba2dbe349f5ec62a2
6
+ metadata.gz: 4afc27121862a26cd4c29cae4c798500e0fd21b7fff84ed439d2bf71340ebf2f2cdeafeb94bd3f292fcc3bb4272a8c6dc5e6e5dc9457fa7e7acdb72e83426e10
7
+ data.tar.gz: d617ea146e65f0b689563405205b60c9d04397e6e0844d6c5cc11c7a1837577784cd276096e5e80122a73db63daf76f5d7f2988fd372f5774f80756b007498a7
@@ -13,3 +13,6 @@ rvm:
13
13
  - ruby-head
14
14
  - jruby-head
15
15
  before_install: gem install bundler -v 1.10.6
16
+ addons:
17
+ code_climate:
18
+ repo_token: 04e5a8142d8a9c41028d505f4fe22d5fd371ea48c49372e7397903beddef0d6f
data/Gemfile CHANGED
@@ -2,3 +2,4 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in maze_magic.gemspec
4
4
  gemspec
5
+ gem "codeclimate-test-reporter", group: :test, require: nil
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  [![Build Status](https://travis-ci.org/equivalent/maze_magic.svg)](https://travis-ci.org/equivalent/maze_magic)
2
2
  [![Code Climate](https://codeclimate.com/github/equivalent/maze_magic/badges/gpa.svg)](https://codeclimate.com/github/equivalent/maze_magic)
3
+ [![Test Coverage](https://codeclimate.com/github/equivalent/maze_magic/badges/coverage.svg)](https://codeclimate.com/github/equivalent/maze_magic/coverage)
3
4
 
4
5
  # MazeMagic
5
6
 
@@ -19,6 +20,9 @@ Ruby Maze generating gem.
19
20
  |_________|___|_________|_____________|_______|___|_____|_____|___|_________|_____|_________|___|_________|_____________|
20
21
  ```
21
22
 
23
+ ![](https://41.media.tumblr.com/59fd2a42d464f41af75887e2c2c7dcaf/tumblr_nvy4dupkKf1uicc6wo1_400.png)
24
+
25
+
22
26
  ## Installation
23
27
 
24
28
  Add this line to your application's Gemfile:
@@ -75,6 +79,37 @@ MazeMagic::Renderer::ConsoleRenderer.new(cells_grid: maze).call
75
79
  `MazeMagic::Generate` is just an Interface. For more complex usage check
76
80
  `lib/maze_magic/generate.rb`, ...or specs.
77
81
 
82
+ #### Usage in web-app
83
+
84
+ You can check https://github.com/equivalent/a-maze-ing for example Rails
85
+ application, but the point is that you will represent the "Maze Wall Representation
86
+ Objects" as walls/passages. (e.g. `<div class="horizontal-wall"></div>`, ...;
87
+ or `<img src="/public/horizontal-wall.png">`)
88
+
89
+ stupid example:
90
+
91
+ ```ruby
92
+ @maze = generate_maze(height: 5, width: 5)
93
+ ```
94
+
95
+ ```erb
96
+ <div id="maze">
97
+ <% @maze.each_with_index do |row, index| %>
98
+ <div class="maze-row maze-row-<%= index %>">
99
+ <% row.each do |maze_rep| %>
100
+ <% if maze_rep.is_a? MazeMagic::HorizontalWall %>
101
+ <img src="/public/horizontal-wall.png">
102
+ <% elsif maze_rep.is_a? MazeMagic::Passage %>
103
+ <img src="/public/passage.png">
104
+ # ...
105
+ <% end %>
106
+ <% end %>
107
+ </div>
108
+ <div class=clear-fix></div>
109
+ <% end %>
110
+ </div>
111
+ ```
112
+
78
113
  ## Maze generating Algorithm
79
114
 
80
115
  At this point there is just altered version of [Recursive Backtracking
@@ -5,16 +5,11 @@ require 'maze_magic/grid'
5
5
  require 'maze_magic/maze_generator'
6
6
  require 'maze_magic/maze_generator/randomnes'
7
7
 
8
- %w(north south east west).each do |file|
9
- require "maze_magic/maze_generator/#{file}"
10
- end
11
-
12
8
  %w(horizontal_wall vertical_wall passage edge).each do |file|
13
- require "maze_magic/#{file}"
9
+ require "maze_magic/maze/#{file}"
14
10
  end
15
11
 
16
12
  require 'maze_magic/maze_generator/recursive_backtracking'
17
- require 'maze_magic/maze_generator/instructions_grid_to_cells_grid'
18
13
 
19
14
  require 'maze_magic/renderer/console_renderer'
20
15
  require 'maze_magic/generate'
@@ -11,9 +11,8 @@ module MazeMagic
11
11
 
12
12
  def generate_maze
13
13
  initialize_instructions_grid
14
- apply_maze_algorithm_to_grid
15
14
  generate_maze_cells_from_instructions
16
- return maze
15
+ maze
17
16
  end
18
17
 
19
18
  def algorithm
@@ -39,12 +38,6 @@ module MazeMagic
39
38
  @instructions_grid = grid_klass.new(args)
40
39
  end
41
40
 
42
- def apply_maze_algorithm_to_grid
43
- MazeMagic::MazeGenerator::RecursiveBacktracking
44
- .new(grid: instructions_grid)
45
- .call
46
- end
47
-
48
41
  ## Generate Maze Cell objects from instructions:
49
42
  #
50
43
  # 2 dimensional array of these singleton objects:
@@ -64,10 +57,10 @@ module MazeMagic
64
57
  # |___|_____|
65
58
  #
66
59
  def generate_maze_cells_from_instructions
67
- @maze ||= MazeMagic::MazeGenerator::InstructionsGridToCellsGrid
60
+ @maze ||= algorithm
68
61
  .new(grid: instructions_grid)
69
- .tap { |generator| generator.call }
70
- .cells_grid
62
+ .tap { |generator| generator.generate }
63
+ .maze
71
64
  end
72
65
 
73
66
  def grid_klass
@@ -0,0 +1,11 @@
1
+ module MazeMagic
2
+ module Maze
3
+ class Edge
4
+ include Singleton
5
+
6
+ def to_console_print
7
+ ' '
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module MazeMagic
2
+ module Maze
3
+ class HorizontalWall
4
+ include Singleton
5
+
6
+ def to_console_print
7
+ '_'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module MazeMagic
2
+ module Maze
3
+ class Passage
4
+ include Singleton
5
+
6
+ def to_console_print
7
+ ' '
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module MazeMagic
2
+ module Maze
3
+ class VerticalWall
4
+ include Singleton
5
+
6
+ def to_console_print
7
+ '|'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,6 @@
1
+ %w(north south east west).each do |file|
2
+ require_relative "recursive_backtracking/#{file}"
3
+ end
1
4
  module MazeMagic
2
5
  module MazeGenerator
3
6
  ## RecursiveBacktracking algorithm for generating Maze
@@ -9,23 +12,27 @@ module MazeMagic
9
12
  # I've wraped the algorith with objects
10
13
  #
11
14
  class RecursiveBacktracking
15
+ extend Forwardable
12
16
  include Randomnes
13
17
 
14
- attr_reader :grid
18
+ attr_reader :grid, :maze
19
+
20
+ def_delegators :grid, :width, :height
15
21
 
16
22
  def initialize(grid:)
17
23
  @grid = grid
18
24
  end
19
25
 
20
- def call
26
+ def generate
21
27
  preseeder.call
22
- algorithm(grid, grid.start_x, grid.start_y)
23
- grid
28
+ carve_instructions_to_grid(grid, grid.start_x, grid.start_y)
29
+ generate_maze
30
+ maze
24
31
  end
25
32
 
26
33
  private
27
34
 
28
- def algorithm(grid, current_x, current_y)
35
+ def carve_instructions_to_grid(grid, current_x, current_y)
29
36
  directions = [
30
37
  North.instance,
31
38
  South.instance,
@@ -40,10 +47,47 @@ module MazeMagic
40
47
  if next_y.between?(0, grid.length-1) && next_x.between?(0, grid[next_y].length-1) && grid[next_y][next_x] == 0
41
48
  grid[current_y][current_x] |= direction.to_i
42
49
  grid[next_y][next_x] |= direction.oposite.to_i
43
- algorithm(grid, next_x, next_y)
50
+ carve_instructions_to_grid(grid, next_x, next_y)
44
51
  end
45
52
  end
46
53
  end
54
+
55
+ def generate_maze
56
+ @maze = []
57
+ @maze << [edge] + Array.new((width * 2 - 1), hw) + [edge]
58
+
59
+ height.times do |y|
60
+ row = []
61
+ row << vw
62
+
63
+ width.times do |x|
64
+ row << ((grid[y][x] & South.instance.to_i != 0) ? passage : hw)
65
+ if grid[y][x] & East.instance.to_i != 0
66
+ row << (((grid[y][x] | grid[y][x+1]) & South.instance.to_i != 0) ? passage : hw)
67
+ else
68
+ row << vw
69
+ end
70
+ end
71
+
72
+ @maze << row
73
+ end
74
+ end
75
+
76
+ def vw
77
+ MazeMagic::Maze::VerticalWall.instance
78
+ end
79
+
80
+ def hw
81
+ MazeMagic::Maze::HorizontalWall.instance
82
+ end
83
+
84
+ def passage
85
+ MazeMagic::Maze::Passage.instance
86
+ end
87
+
88
+ def edge
89
+ MazeMagic::Maze::Edge.instance
90
+ end
47
91
  end
48
92
  end
49
93
  end
@@ -0,0 +1,25 @@
1
+ module MazeMagic
2
+ module MazeGenerator
3
+ class RecursiveBacktracking
4
+ class East
5
+ include Singleton
6
+
7
+ def direction_x
8
+ 1
9
+ end
10
+
11
+ def direction_y
12
+ 0
13
+ end
14
+
15
+ def oposite
16
+ West.instance
17
+ end
18
+
19
+ def to_i
20
+ 4
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ module MazeMagic
2
+ module MazeGenerator
3
+ class RecursiveBacktracking
4
+ class North
5
+ include Singleton
6
+
7
+ def direction_x
8
+ 0
9
+ end
10
+
11
+ def direction_y
12
+ -1
13
+ end
14
+
15
+ def oposite
16
+ South.instance
17
+ end
18
+
19
+ def to_i
20
+ 1
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ module MazeMagic
2
+ module MazeGenerator
3
+ class RecursiveBacktracking
4
+ class South
5
+ include Singleton
6
+
7
+ def direction_x
8
+ 0
9
+ end
10
+
11
+ def direction_y
12
+ 1
13
+ end
14
+
15
+ def oposite
16
+ North.instance
17
+ end
18
+
19
+ def to_i
20
+ 2
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ module MazeMagic
2
+ module MazeGenerator
3
+ class RecursiveBacktracking
4
+ class West
5
+ include Singleton
6
+
7
+ def direction_x
8
+ -1
9
+ end
10
+
11
+ def direction_y
12
+ 0
13
+ end
14
+
15
+ def oposite
16
+ East.instance
17
+ end
18
+
19
+ def to_i
20
+ 8
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module MazeMagic
2
- VERSION = "0.2.1.1"
2
+ VERSION = "0.3.0"
3
3
  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.2.1.1
4
+ version: 0.3.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-07 00:00:00.000000000 Z
11
+ date: 2015-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -70,22 +70,21 @@ files:
70
70
  - bin/console
71
71
  - bin/setup
72
72
  - lib/maze_magic.rb
73
- - lib/maze_magic/edge.rb
74
73
  - lib/maze_magic/generate.rb
75
74
  - lib/maze_magic/grid.rb
76
- - lib/maze_magic/horizontal_wall.rb
75
+ - lib/maze_magic/maze/edge.rb
76
+ - lib/maze_magic/maze/horizontal_wall.rb
77
+ - lib/maze_magic/maze/passage.rb
78
+ - lib/maze_magic/maze/vertical_wall.rb
77
79
  - lib/maze_magic/maze_generator.rb
78
- - lib/maze_magic/maze_generator/east.rb
79
- - lib/maze_magic/maze_generator/instructions_grid_to_cells_grid.rb
80
- - lib/maze_magic/maze_generator/north.rb
81
80
  - lib/maze_magic/maze_generator/randomnes.rb
82
81
  - lib/maze_magic/maze_generator/recursive_backtracking.rb
83
- - lib/maze_magic/maze_generator/south.rb
84
- - lib/maze_magic/maze_generator/west.rb
85
- - lib/maze_magic/passage.rb
82
+ - lib/maze_magic/maze_generator/recursive_backtracking/east.rb
83
+ - lib/maze_magic/maze_generator/recursive_backtracking/north.rb
84
+ - lib/maze_magic/maze_generator/recursive_backtracking/south.rb
85
+ - lib/maze_magic/maze_generator/recursive_backtracking/west.rb
86
86
  - lib/maze_magic/renderer/console_renderer.rb
87
87
  - lib/maze_magic/version.rb
88
- - lib/maze_magic/vertical_wall.rb
89
88
  - maze_magic.gemspec
90
89
  homepage: https://github.com/equivalent/maze_magic
91
90
  licenses:
@@ -1,9 +0,0 @@
1
- module MazeMagic
2
- class Edge
3
- include Singleton
4
-
5
- def to_console_print
6
- ' '
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module MazeMagic
2
- class HorizontalWall
3
- include Singleton
4
-
5
- def to_console_print
6
- '_'
7
- end
8
- end
9
- end
@@ -1,23 +0,0 @@
1
- module MazeMagic
2
- module MazeGenerator
3
- class East
4
- include Singleton
5
-
6
- def direction_x
7
- 1
8
- end
9
-
10
- def direction_y
11
- 0
12
- end
13
-
14
- def oposite
15
- West.instance
16
- end
17
-
18
- def to_i
19
- 4
20
- end
21
- end
22
- end
23
- end
@@ -1,59 +0,0 @@
1
- module MazeMagic
2
- module MazeGenerator
3
- class InstructionsGridToCellsGrid
4
- attr_reader :instructions_grid, :cells_grid
5
-
6
- def initialize(grid:)
7
- @instructions_grid = grid
8
- end
9
-
10
- def call
11
- @cells_grid = []
12
- cells_grid << [edge] + Array.new((width * 2 - 1), hw) + [edge]
13
-
14
- height.times do |y|
15
- row = []
16
- row << vw
17
-
18
- width.times do |x|
19
- row << ((instructions_grid[y][x] & South.instance.to_i != 0) ? passage : hw)
20
- if instructions_grid[y][x] & East.instance.to_i != 0
21
- row << (((instructions_grid[y][x] | instructions_grid[y][x+1]) & South.instance.to_i != 0) ? passage : hw)
22
- else
23
- row << vw
24
- end
25
- end
26
-
27
- cells_grid << row
28
- end
29
- cells_grid
30
- end
31
-
32
- private
33
-
34
- def width
35
- instructions_grid.width
36
- end
37
-
38
- def height
39
- instructions_grid.height
40
- end
41
-
42
- def vw
43
- MazeMagic::VerticalWall.instance
44
- end
45
-
46
- def hw
47
- MazeMagic::HorizontalWall.instance
48
- end
49
-
50
- def passage
51
- MazeMagic::Passage.instance
52
- end
53
-
54
- def edge
55
- MazeMagic::Edge.instance
56
- end
57
- end
58
- end
59
- end
@@ -1,23 +0,0 @@
1
- module MazeMagic
2
- module MazeGenerator
3
- class North
4
- include Singleton
5
-
6
- def direction_x
7
- 0
8
- end
9
-
10
- def direction_y
11
- -1
12
- end
13
-
14
- def oposite
15
- South.instance
16
- end
17
-
18
- def to_i
19
- 1
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- module MazeMagic
2
- module MazeGenerator
3
- class South
4
- include Singleton
5
-
6
- def direction_x
7
- 0
8
- end
9
-
10
- def direction_y
11
- 1
12
- end
13
-
14
- def oposite
15
- North.instance
16
- end
17
-
18
- def to_i
19
- 2
20
- end
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- module MazeMagic
2
- module MazeGenerator
3
- class West
4
- include Singleton
5
-
6
- def direction_x
7
- -1
8
- end
9
-
10
- def direction_y
11
- 0
12
- end
13
-
14
- def oposite
15
- East.instance
16
- end
17
-
18
- def to_i
19
- 8
20
- end
21
- end
22
- end
23
- end
@@ -1,9 +0,0 @@
1
- module MazeMagic
2
- class Passage
3
- include Singleton
4
-
5
- def to_console_print
6
- ' '
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- module MazeMagic
2
- class VerticalWall
3
- include Singleton
4
-
5
- def to_console_print
6
- '|'
7
- end
8
- end
9
- end