conway 0.1.0 → 0.1.1
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.
- data/README.md +9 -7
- data/bin/conway +5 -5
- data/lib/conway/point.rb +10 -2
- data/lib/conway/visualizer/ascii.rb +18 -6
- data/spec/conway/point_spec.rb +9 -0
- metadata +7 -3
data/README.md
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
## Conway
|
2
|
-
A simple Game of
|
2
|
+
A simple Game of Life implementation with foremost focus on object design.
|
3
3
|
|
4
|
-
|
4
|
+
It's currently very much leaky of object references and has no mind for
|
5
|
+
efficiency.
|
5
6
|
|
6
|
-
Conway comes with a very simple ASCII
|
7
|
-
where the size argument determines the dimensions of the
|
7
|
+
Conway comes with a very simple ASCII visualizer. It can be invoked as
|
8
|
+
below, where the size argument determines the dimensions of the cell grid:
|
8
9
|
|
9
10
|
conway --size 25 --cells="2,3 3,3 2,2 5,4 5,8 9,8, 7,6"
|
10
11
|
conway -s 30 -c 2,3:3,3:3,2:2,2:3,4
|
11
12
|
|
12
|
-
Please feel free to send feedback via the
|
13
|
-
|
13
|
+
Please feel free to send feedback via the
|
14
|
+
[GitHub project](https://github.com/mattyoho/conway) or via email at
|
15
|
+
mby _AT_ mattyoho _DOT_ com.
|
16
|
+
|
14
17
|
|
15
|
-
https://github.com/mattyoho/conway
|
data/bin/conway
CHANGED
@@ -9,7 +9,7 @@ require 'conway/visualizer/ascii'
|
|
9
9
|
|
10
10
|
PROGRAM_VERSION = 1
|
11
11
|
|
12
|
-
module
|
12
|
+
module ConwayCli
|
13
13
|
def self.suppress_warnings
|
14
14
|
original_verbosity = $VERBOSE
|
15
15
|
begin
|
@@ -33,7 +33,7 @@ module ConwayAscii
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
|
-
|
36
|
+
ConwayCli.suppress_warnings do
|
37
37
|
Choice.options do
|
38
38
|
header 'Conway Game of Life ASCII visualizer'
|
39
39
|
header 'Available options:'
|
@@ -61,14 +61,14 @@ ConwayAscii.suppress_warnings do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
Signal.trap("TERM") do
|
64
|
-
|
64
|
+
ConwayCli.exit
|
65
65
|
end
|
66
66
|
|
67
67
|
Signal.trap("INT") do
|
68
|
-
|
68
|
+
ConwayCli.exit
|
69
69
|
end
|
70
70
|
|
71
|
-
live_points =
|
71
|
+
live_points = ConwayCli.parse_points Choice[:cells]
|
72
72
|
grid = Conway::Visualizer::Ascii.new(Choice[:size], live_points)
|
73
73
|
|
74
74
|
grid.loop do |step|
|
data/lib/conway/point.rb
CHANGED
@@ -3,7 +3,7 @@ module Conway
|
|
3
3
|
attr_reader :x, :y
|
4
4
|
|
5
5
|
def initialize(x=0,y=0)
|
6
|
-
|
6
|
+
self.x, self.y = x,y
|
7
7
|
end
|
8
8
|
|
9
9
|
def eql?(other)
|
@@ -18,12 +18,20 @@ module Conway
|
|
18
18
|
:"#{x}-#{y}".object_id
|
19
19
|
end
|
20
20
|
|
21
|
+
def update(x, y)
|
22
|
+
self.x = x
|
23
|
+
self.y = y
|
24
|
+
end
|
25
|
+
|
21
26
|
def adjacents
|
22
|
-
|
27
|
+
(-1..1).map do |j|
|
23
28
|
(-1..1).map do |i|
|
24
29
|
Point.new(x+i, y+j) unless i == 0 && j == 0
|
25
30
|
end
|
26
31
|
end.flatten.compact
|
27
32
|
end
|
33
|
+
|
34
|
+
protected
|
35
|
+
attr_writer :x, :y
|
28
36
|
end
|
29
37
|
end
|
@@ -16,9 +16,9 @@ module Conway
|
|
16
16
|
puts "They live!!\n\n"
|
17
17
|
|
18
18
|
begin
|
19
|
-
|
19
|
+
live_cells = generation.cell_coordinates
|
20
20
|
|
21
|
-
if
|
21
|
+
if live_cells.count == 0
|
22
22
|
puts "\nThey have all perished! D-:"
|
23
23
|
break
|
24
24
|
end
|
@@ -26,7 +26,7 @@ module Conway
|
|
26
26
|
grid = ""
|
27
27
|
(1..max_y).each do |y|
|
28
28
|
(1..max_x).each do |x|
|
29
|
-
cell_char = cell_content_for(
|
29
|
+
cell_char = cell_content_for(live_cells, x,y)
|
30
30
|
grid << "|#{cell_char}"
|
31
31
|
end
|
32
32
|
grid << "|\n"
|
@@ -34,8 +34,8 @@ module Conway
|
|
34
34
|
|
35
35
|
grid << "\n"
|
36
36
|
|
37
|
-
grid << "Total objects: #{
|
38
|
-
grid << "Total
|
37
|
+
grid << "Total objects: #{live_object_count} "
|
38
|
+
grid << "Total living cells: #{live_cells.count}\n"
|
39
39
|
|
40
40
|
elapsed_minutes, elapsed_seconds = ((Time.now - start).to_i).divmod 60
|
41
41
|
grid << "Elapsed time: #{elapsed_minutes} min, #{elapsed_seconds} secs\n"
|
@@ -50,7 +50,19 @@ module Conway
|
|
50
50
|
attr_accessor :max_x, :max_y, :starting_cells, :loop_interval
|
51
51
|
|
52
52
|
def cell_content_for(points, x,y)
|
53
|
-
|
53
|
+
@comparison_point ||= Point.new(x,y)
|
54
|
+
@comparison_point.update(x,y)
|
55
|
+
points.detect {|p| p == @comparison_point } ? "X" : " "
|
56
|
+
end
|
57
|
+
|
58
|
+
def live_object_count
|
59
|
+
if ObjectSpace.respond_to?(:count_objects)
|
60
|
+
# Ruby 1.9.2
|
61
|
+
ObjectSpace.count_objects[:TOTAL]
|
62
|
+
else
|
63
|
+
# Ruby 1.8.7
|
64
|
+
ObjectSpace.live_objects
|
65
|
+
end
|
54
66
|
end
|
55
67
|
end
|
56
68
|
end
|
data/spec/conway/point_spec.rb
CHANGED
@@ -34,5 +34,14 @@ describe Point do
|
|
34
34
|
point.adjacents.should == neighbors
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe "#update" do
|
39
|
+
let(:point) { Point.new(2,2) }
|
40
|
+
it "updates the x and y points" do
|
41
|
+
point.update(1,3)
|
42
|
+
point.x.should eql(1)
|
43
|
+
point.y.should eql(3)
|
44
|
+
end
|
45
|
+
end
|
37
46
|
end
|
38
47
|
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: conway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- Matt Yoho
|
@@ -14,7 +15,7 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-20 00:00:00 -05:00
|
18
19
|
default_executable: conway
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
@@ -25,6 +26,7 @@ dependencies:
|
|
25
26
|
requirements:
|
26
27
|
- - "="
|
27
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 19
|
28
30
|
segments:
|
29
31
|
- 0
|
30
32
|
- 1
|
@@ -78,6 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
80
|
requirements:
|
79
81
|
- - ">="
|
80
82
|
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
81
84
|
segments:
|
82
85
|
- 0
|
83
86
|
version: "0"
|
@@ -86,6 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
86
89
|
requirements:
|
87
90
|
- - ">="
|
88
91
|
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
89
93
|
segments:
|
90
94
|
- 0
|
91
95
|
version: "0"
|