amaze 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.
Files changed (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +110 -0
  8. data/Rakefile +6 -0
  9. data/amaze.gemspec +30 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/exe/amaze +5 -0
  13. data/lib/amaze.rb +17 -0
  14. data/lib/amaze/algorithm.rb +44 -0
  15. data/lib/amaze/algorithm/aldous_border.rb +36 -0
  16. data/lib/amaze/algorithm/binary_tree.rb +20 -0
  17. data/lib/amaze/algorithm/growing_tree.rb +52 -0
  18. data/lib/amaze/algorithm/hunt_and_kill.rb +53 -0
  19. data/lib/amaze/algorithm/recursive_backtracker.rb +77 -0
  20. data/lib/amaze/algorithm/sidewinder.rb +42 -0
  21. data/lib/amaze/algorithm/wilson.rb +54 -0
  22. data/lib/amaze/cell.rb +63 -0
  23. data/lib/amaze/cell/hex.rb +10 -0
  24. data/lib/amaze/cell/octo.rb +10 -0
  25. data/lib/amaze/cell/polar.rb +16 -0
  26. data/lib/amaze/cell/square.rb +10 -0
  27. data/lib/amaze/distances.rb +53 -0
  28. data/lib/amaze/factory.rb +153 -0
  29. data/lib/amaze/formatter.rb +5 -0
  30. data/lib/amaze/formatter/ascii.rb +91 -0
  31. data/lib/amaze/formatter/ascii/delta.rb +180 -0
  32. data/lib/amaze/formatter/ascii/ortho.rb +105 -0
  33. data/lib/amaze/formatter/ascii/polar.rb +199 -0
  34. data/lib/amaze/formatter/ascii/sigma.rb +213 -0
  35. data/lib/amaze/formatter/ascii/upsilon.rb +281 -0
  36. data/lib/amaze/formatter/image.rb +127 -0
  37. data/lib/amaze/formatter/image/delta.rb +123 -0
  38. data/lib/amaze/formatter/image/ortho.rb +103 -0
  39. data/lib/amaze/formatter/image/polar.rb +173 -0
  40. data/lib/amaze/formatter/image/sigma.rb +122 -0
  41. data/lib/amaze/formatter/image/upsilon.rb +135 -0
  42. data/lib/amaze/grid.rb +66 -0
  43. data/lib/amaze/grid/delta.rb +87 -0
  44. data/lib/amaze/grid/ortho.rb +38 -0
  45. data/lib/amaze/grid/polar.rb +61 -0
  46. data/lib/amaze/grid/sigma.rb +61 -0
  47. data/lib/amaze/grid/upsilon.rb +74 -0
  48. data/lib/amaze/mask.rb +75 -0
  49. data/lib/amaze/masked_grid.rb +29 -0
  50. data/lib/amaze/script.rb +361 -0
  51. data/lib/amaze/shape.rb +23 -0
  52. data/lib/amaze/shape/diamond.rb +26 -0
  53. data/lib/amaze/shape/hexagon.rb +79 -0
  54. data/lib/amaze/shape/star.rb +114 -0
  55. data/lib/amaze/shape/triangle.rb +25 -0
  56. data/lib/amaze/version.rb +3 -0
  57. data/support/characters.txt +17 -0
  58. data/support/mask/mask1.txt +10 -0
  59. data/support/mask/mask2.txt +12 -0
  60. data/support/mask/mask3.txt +15 -0
  61. metadata +203 -0
@@ -0,0 +1,23 @@
1
+
2
+ class Amaze::Shape
3
+ autoload :Triangle, 'amaze/shape/triangle'
4
+ autoload :Diamond, 'amaze/shape/diamond'
5
+ autoload :Hexagon, 'amaze/shape/hexagon'
6
+ autoload :Star, 'amaze/shape/star'
7
+
8
+ # The size of the shape, usually the rows
9
+ attr_reader :size
10
+
11
+ def initialize size
12
+ @size = size
13
+ end
14
+
15
+ def mask
16
+ @mask ||= Amaze::Mask.new rows, columns
17
+ end
18
+
19
+ def create_mask
20
+ build_mask
21
+ mask
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+
2
+ class Amaze::Shape::Diamond < Amaze::Shape
3
+
4
+ def build_mask
5
+ (0...size).each do |row|
6
+ # How many cells are on
7
+ on = (row+1) * 2 - 1
8
+ # How many cells are off
9
+ off = (columns - on) / 2
10
+ # Build a line: #off cells, #on cells, #off cells
11
+ line_map = Array.new(off, false) + Array.new(on, true) + Array.new(off, false)
12
+ line_map.each_with_index do |switch, i|
13
+ mask[row, i] = switch
14
+ mask[rows-row-1,i] = switch
15
+ end
16
+ end
17
+ end
18
+
19
+ def rows
20
+ size * 2
21
+ end
22
+
23
+ def columns
24
+ (size+1)/2 * 4 - 1
25
+ end
26
+ end
@@ -0,0 +1,79 @@
1
+
2
+ class Amaze::Shape::Hexagon < Amaze::Shape
3
+
4
+ def build_mask
5
+ (0...size).each do |row|
6
+ # How many cells are on
7
+ on = size * 2 + 1 + row * 2
8
+ # How many cells are off
9
+ off = (columns - on) / 2
10
+ # Build a line: #off cells, #on cells, #off cells
11
+ line_map = Array.new(off, false) + Array.new(on, true) + Array.new(off, false)
12
+ line_map.each_with_index do |switch, i|
13
+ mask[row, i] = switch
14
+ mask[rows-row-1,i] = switch
15
+ end
16
+ end
17
+ end
18
+
19
+ def rows
20
+ size * 2
21
+ end
22
+
23
+ def columns
24
+ (size-1) * 4 + 3 + offset * 2
25
+ end
26
+
27
+ def offset
28
+ size.even? ? 0 : 1
29
+ end
30
+ end
31
+
32
+ __END__
33
+
34
+ 1 3
35
+ 2 5
36
+ 3 7
37
+ 4 9
38
+ 5 11
39
+
40
+
41
+ 1
42
+ X...X
43
+ X...X
44
+
45
+ 2
46
+ X.....X
47
+ .......
48
+ .......
49
+ X.....X
50
+
51
+ 3
52
+ XXX.......XXX
53
+ XX.........XX
54
+ X...........X
55
+ X...........X
56
+ XX.........XX
57
+ XXX.......XXX
58
+
59
+ 4
60
+ XXX.........XXX
61
+ XX...........XX
62
+ X.............X
63
+ ...............
64
+ ...............
65
+ X.............X
66
+ XX...........XX
67
+ XXX.........XXX
68
+
69
+ 5
70
+ XXXXX...........XXXXX
71
+ XXXX.............XXXX
72
+ XXX...............XXX
73
+ XX.................XX
74
+ X...................X
75
+ X...................X
76
+ XX.................XX
77
+ XXX...............XXX
78
+ XXXX.............XXXX
79
+ XXXXX...........XXXXX
@@ -0,0 +1,114 @@
1
+
2
+ class Amaze::Shape::Star < Amaze::Shape
3
+
4
+ def build_mask
5
+ (0...size).each do |row|
6
+ # top section
7
+ on = row * 2 + 1
8
+ off = (columns - on) / 2
9
+ # Build a line: #off cells, #on cells, #off cells
10
+ line_map = Array.new(off, false) + Array.new(on, true) + Array.new(off, false)
11
+ line_map.each_with_index do |switch, i|
12
+ # upper triangle
13
+ mask[row, i] = switch
14
+ # lower triangle
15
+ mask[rows-1-row, i] = switch
16
+ end
17
+
18
+ # middle section
19
+ on = columns - offset * 2 - row * 2
20
+ off = (columns - on) / 2
21
+ line_map = Array.new(off, false) + Array.new(on, true) + Array.new(off, false)
22
+ line_map.each_with_index do |switch, i|
23
+ # middle upper
24
+ mask[row + size, i] = switch
25
+ # middle lower
26
+ mask[rows - 1 - size - row, i] = switch
27
+ end
28
+ end
29
+ end
30
+
31
+ def rows
32
+ size * 4
33
+ end
34
+
35
+ def columns
36
+ (size - 1) * 6 + 5 + offset * 2
37
+ end
38
+
39
+ def offset
40
+ size.even? ? 0 : 1
41
+ end
42
+ end
43
+
44
+ __END__
45
+
46
+ 1
47
+ XXX.XXX
48
+ X.....X
49
+ X.....X
50
+ XXX.XXX
51
+
52
+ 2
53
+ XXXXX.XXXXX
54
+ XXXX...XXXX
55
+ ...........
56
+ X.........X
57
+ X.........X
58
+ ...........
59
+ XXXX...XXXX
60
+ XXXXX.XXXXX
61
+
62
+ 3
63
+ XXXXXXXXX.XXXXXXXXX
64
+ XXXXXXXX...XXXXXXXX
65
+ XXXXXXX.....XXXXXXX
66
+ X.................X
67
+ XX...............XX
68
+ XXX.............XXX
69
+ XXX.............XXX
70
+ XX...............XX
71
+ X.................X
72
+ XXXXXXX.....XXXXXXX
73
+ XXXXXXXX...XXXXXXXX
74
+ XXXXXXXXX.XXXXXXXXX
75
+
76
+ 4
77
+ XXXXXXXXXXX.XXXXXXXXXXX
78
+ XXXXXXXXXX...XXXXXXXXXX
79
+ XXXXXXXXX.....XXXXXXXXX
80
+ XXXXXXXX.......XXXXXXXX
81
+ .......................
82
+ X.....................X
83
+ XX...................XX
84
+ XXX.................XXX
85
+ XXX.................XXX
86
+ XX...................XX
87
+ X.....................X
88
+ .......................
89
+ XXXXXXXX.......XXXXXXXX
90
+ XXXXXXXXX.....XXXXXXXXX
91
+ XXXXXXXXXX...XXXXXXXXXX
92
+ XXXXXXXXXXX.XXXXXXXXXXX
93
+
94
+ 5
95
+ XXXXXXXXXXXXXXX.XXXXXXXXXXXXXXX
96
+ XXXXXXXXXXXXXX...XXXXXXXXXXXXXX
97
+ XXXXXXXXXXXXX.....XXXXXXXXXXXXX
98
+ XXXXXXXXXXXX.......XXXXXXXXXXXX
99
+ XXXXXXXXXXX.........XXXXXXXXXXX
100
+ X.............................X
101
+ XX...........................XX
102
+ XXX.........................XXX
103
+ XXXX.......................XXXX
104
+ XXXXX.....................XXXXX
105
+ XXXXX.....................XXXXX
106
+ XXXX.......................XXXX
107
+ XXX.........................XXX
108
+ XX...........................XX
109
+ X.............................X
110
+ XXXXXXXXXXX.........XXXXXXXXXXX
111
+ XXXXXXXXXXXX.......XXXXXXXXXXXX
112
+ XXXXXXXXXXXXX.....XXXXXXXXXXXXX
113
+ XXXXXXXXXXXXXX...XXXXXXXXXXXXXX
114
+ XXXXXXXXXXXXXXX.XXXXXXXXXXXXXXX
@@ -0,0 +1,25 @@
1
+
2
+ class Amaze::Shape::Triangle < Amaze::Shape
3
+
4
+ def build_mask
5
+ (0...rows).each do |row|
6
+ # How many cells are on
7
+ on = (row+1) * 2 - 1
8
+ # How many cells are off
9
+ off = (columns - on) / 2
10
+ # Build a line: #off cells, #on cells, #off cells
11
+ line_map = Array.new(off, false) + Array.new(on, true) + Array.new(off, false)
12
+ line_map.each_with_index do |switch, i|
13
+ mask[row, i] = switch
14
+ end
15
+ end
16
+ end
17
+
18
+ def rows
19
+ size
20
+ end
21
+
22
+ def columns
23
+ (rows+1)/2 * 4 - 1
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module Amaze
2
+ VERSION = "0.2.0"
3
+ end
@@ -0,0 +1,17 @@
1
+ def characters
2
+ "\u2576" # ╶
3
+ "\u2574" # ╴
4
+ "\u2500" # ─
5
+ "\u2577" # ╷
6
+ "\u250C" # ┌
7
+ "\u2510" # ┐
8
+ "\u252C" # ┬
9
+ "\u2575" # ╵
10
+ "\u2514" # └
11
+ "\u2518" # ┘
12
+ "\u2534" # ┴
13
+ "\u2502" # │
14
+ "\u251C" # ├
15
+ "\u2524" # ┤
16
+ "\u253C" # ┼
17
+ end
@@ -0,0 +1,10 @@
1
+ X........X
2
+ ....XX....
3
+ ...XXXX...
4
+ ....XX....
5
+ X........X
6
+ X........X
7
+ ....XX....
8
+ ...XXXX...
9
+ ....XX....
10
+ X........X
@@ -0,0 +1,12 @@
1
+ ............
2
+ ............
3
+ ...XX.......
4
+ ...XX.......
5
+ ...XX.......
6
+ ...XX.......
7
+ ...XX.......
8
+ ...XX.......
9
+ ...XXXXXX...
10
+ ...XXXXXX...
11
+ ............
12
+ ............
@@ -0,0 +1,15 @@
1
+ XXXXX.....XXXXX
2
+ XXX.........XXX
3
+ XX...........XX
4
+ X.............X
5
+ X.............X
6
+ ...............
7
+ ...............
8
+ ...............
9
+ ...............
10
+ ...............
11
+ X.............X
12
+ X.............X
13
+ XX...........XX
14
+ XXX.........XXX
15
+ XXXXX.....XXXXX
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amaze
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Patrick Marchi
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-05-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: chunky_png
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rainbow
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: gradient
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rmagick
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: 'A maze generator inspired by the book of Jamis Buck, Mazes for Programmers:
112
+ Code Your Own Twisty Little Passages.'
113
+ email:
114
+ - mail@patrickmarchi.ch
115
+ executables:
116
+ - amaze
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - ".gitignore"
121
+ - ".rspec"
122
+ - ".travis.yml"
123
+ - Gemfile
124
+ - LICENSE.txt
125
+ - README.md
126
+ - Rakefile
127
+ - amaze.gemspec
128
+ - bin/console
129
+ - bin/setup
130
+ - exe/amaze
131
+ - lib/amaze.rb
132
+ - lib/amaze/algorithm.rb
133
+ - lib/amaze/algorithm/aldous_border.rb
134
+ - lib/amaze/algorithm/binary_tree.rb
135
+ - lib/amaze/algorithm/growing_tree.rb
136
+ - lib/amaze/algorithm/hunt_and_kill.rb
137
+ - lib/amaze/algorithm/recursive_backtracker.rb
138
+ - lib/amaze/algorithm/sidewinder.rb
139
+ - lib/amaze/algorithm/wilson.rb
140
+ - lib/amaze/cell.rb
141
+ - lib/amaze/cell/hex.rb
142
+ - lib/amaze/cell/octo.rb
143
+ - lib/amaze/cell/polar.rb
144
+ - lib/amaze/cell/square.rb
145
+ - lib/amaze/distances.rb
146
+ - lib/amaze/factory.rb
147
+ - lib/amaze/formatter.rb
148
+ - lib/amaze/formatter/ascii.rb
149
+ - lib/amaze/formatter/ascii/delta.rb
150
+ - lib/amaze/formatter/ascii/ortho.rb
151
+ - lib/amaze/formatter/ascii/polar.rb
152
+ - lib/amaze/formatter/ascii/sigma.rb
153
+ - lib/amaze/formatter/ascii/upsilon.rb
154
+ - lib/amaze/formatter/image.rb
155
+ - lib/amaze/formatter/image/delta.rb
156
+ - lib/amaze/formatter/image/ortho.rb
157
+ - lib/amaze/formatter/image/polar.rb
158
+ - lib/amaze/formatter/image/sigma.rb
159
+ - lib/amaze/formatter/image/upsilon.rb
160
+ - lib/amaze/grid.rb
161
+ - lib/amaze/grid/delta.rb
162
+ - lib/amaze/grid/ortho.rb
163
+ - lib/amaze/grid/polar.rb
164
+ - lib/amaze/grid/sigma.rb
165
+ - lib/amaze/grid/upsilon.rb
166
+ - lib/amaze/mask.rb
167
+ - lib/amaze/masked_grid.rb
168
+ - lib/amaze/script.rb
169
+ - lib/amaze/shape.rb
170
+ - lib/amaze/shape/diamond.rb
171
+ - lib/amaze/shape/hexagon.rb
172
+ - lib/amaze/shape/star.rb
173
+ - lib/amaze/shape/triangle.rb
174
+ - lib/amaze/version.rb
175
+ - support/characters.txt
176
+ - support/mask/mask1.txt
177
+ - support/mask/mask2.txt
178
+ - support/mask/mask3.txt
179
+ homepage: https://github.com/pmarchi/amaze
180
+ licenses:
181
+ - MIT
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.5.1
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Maze generator
203
+ test_files: []