cellular_automata 0.1.1 → 0.1.2

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: ebba5fb93b878df9d9d9e87e16301f9df0c32cae
4
- data.tar.gz: 505da2bb9ad0ed69bc29c8acc86f67ad7a8df745
3
+ metadata.gz: 891c6c36e259e19ad44dad69cdfef0336058978a
4
+ data.tar.gz: 4e5898cdadcdc8031601e70f4da409b8157fdbb1
5
5
  SHA512:
6
- metadata.gz: 2846a0d673eb8cb36ec8d30225bd7cdc5615621c05bb91f6645024e5206f06e7618f5a802966b86d70d03fb36d1c97a5b48fc261dd7bca1816cd8a4a3d41a19f
7
- data.tar.gz: 5628a93b80ec95eca7d7ebf03b4d9f6360852da1d55e8c147c30edf8b30c8768a8d5bca3b475131ba656cb47cc7b5cf892e5e453fa1928e53d36d0d134f0b509
6
+ metadata.gz: 4e7ae0a28aecd0030faefaa03fefe2671ed7d0a1e477190d48506c2178d5a5e9a9322e827fa3f52b21bd4024370ffc2b6448bc8741f49b0fdc4f7a705d6d632e
7
+ data.tar.gz: e59aaed8f24f32467b4c069c3df8a40e458d64cb872703f17c553933ec6a469a2b1f1696598dc7bb48dadf4425abd335f1f96929abb39cdbd9e1e2db7ec6f26a
data/README.md CHANGED
@@ -25,6 +25,11 @@ At present, it can only play Conway's Game of Life. Run `cell` to watch.
25
25
 
26
26
  ## Development
27
27
 
28
+ Install gosu dependencies:
29
+ ```bash
30
+ % brew install sdl2 libogg libvorbis
31
+ ```
32
+
28
33
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
29
34
 
30
35
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
data/bin/cell_gui ADDED
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'cellular_automata'
4
+ require 'optparse'
5
+ require 'gosu'
6
+
7
+ def opts_from_cli
8
+ options = {}
9
+ opt_parser = OptionParser.new do |opts|
10
+ opts.program_name = File.basename(__FILE__)
11
+ opts.banner = "#{opts.program_name} [options] RULE"
12
+ opts.on('-w WIDTH', '--width WIDTH', 'Set width') { |w| options[:width] = w.to_i }
13
+ opts.on('-h HEIGHT', '--height HEIGHT', 'Set height') { |h| options[:height] = h.to_i }
14
+ opts.on('-s SCALE', '--scale SCALE', 'Factor by which to scale game board') { |s| options[:scale] = s.to_i }
15
+ opts.on('-c WIDTH', '--cell-width WIDTH', 'Factor by which to scale cells', 'Use 1 for an \'LED\' look',
16
+ 'Use 2 for no borders around cells', 'or choose anything in between') {|w| options[:cell_scale] = w.to_f }
17
+ opts.on('-f', '--full-screen', 'Full screen') { options[:fullscreen] = true }
18
+ opts.on('-v', '--version', 'Print version information') do
19
+ puts "#{File.basename(__FILE__)} #{CellularAutomata::VERSION}"
20
+ exit true
21
+ end
22
+ opts.on('--help', 'Display this screen') do
23
+ puts opts
24
+ exit true
25
+ end
26
+ end
27
+ begin
28
+ opt_parser.parse!
29
+ rescue OptionParser::InvalidOption => e
30
+ puts e.message
31
+ exit false
32
+ end
33
+ options
34
+ end
35
+
36
+ opts = opts_from_cli
37
+ opts[:width] ||= 160
38
+ opts[:height] ||= 120
39
+ opts[:scale] ||= 2
40
+ opts[:cell_scale] ||= 2.0
41
+ opts[:cell_scale] = 2.0 if opts[:cell_scale] > 2.0
42
+ opts[:cell_scale] = 1.0 if opts[:cell_scale] < 1.0
43
+ opts[:fullscreen] ||= false
44
+ rule = ARGV[0] || 'B3S2'
45
+ opts[:rule] = rule
46
+
47
+ trap 'SIGINT' do
48
+ exit
49
+ end
50
+
51
+ window = CellWindow.new(opts)
52
+ window.show
53
+ exit
@@ -4,24 +4,26 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'cellular_automata/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "cellular_automata"
7
+ spec.name = 'cellular_automata'
8
8
  spec.version = CellularAutomata::VERSION
9
- spec.authors = ["Forrest Fleming"]
10
- spec.email = ["ffleming@gmail.com"]
9
+ spec.authors = ['Forrest Fleming']
10
+ spec.email = ['ffleming@gmail.com']
11
11
 
12
12
  spec.summary = %q{A simulation of cellular automata}
13
13
  spec.description = %q{A set of 0-player games, of which Conway's Game of Life is a member.}
14
- spec.homepage = "https://github.com/ffleming/cellular_automata"
14
+ spec.homepage = 'https://github.com/ffleming/cellular_automata'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.bindir = "bin"
17
+ spec.bindir = 'bin'
18
18
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
21
  spec.license = 'MIT'
22
22
 
23
- spec.add_development_dependency "bundler", "~> 1", ">= 1.8"
24
- spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_runtime_dependency 'gosu', '~> 0.9'
24
+ spec.add_development_dependency 'releasy', '~> 1', '>= 1.8'
25
+ spec.add_development_dependency 'bundler', '~> 1', '>= 1.8'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
25
27
  spec.add_development_dependency 'pry', '~> 0.10'
26
28
  spec.add_development_dependency 'byebug', '~> 4'
27
29
  spec.add_development_dependency 'pry-byebug', '~> 3.1'
@@ -29,8 +29,6 @@ class CellularAutomata::Board
29
29
  @state = next_state
30
30
  end
31
31
 
32
- private
33
-
34
32
  def each_cell
35
33
  (0..height-1).each do |y|
36
34
  (0..width-1).each do |x|
@@ -39,6 +37,8 @@ class CellularAutomata::Board
39
37
  end
40
38
  end
41
39
 
40
+ private
41
+
42
42
  def seed!
43
43
  each_cell { |c| c.live! if rand < 0.1 }
44
44
  end
@@ -0,0 +1,35 @@
1
+ class CellWindow < Gosu::Window
2
+ attr_reader :board, :scale, :cell_width, :paused
3
+ alias paused? paused
4
+ def initialize(opts={})
5
+ @scale = opts[:scale]
6
+ @cell_width = scale**opts[:cell_scale]
7
+ super opts[:width]*scale, opts[:height]*scale, opts[:fullscreen]
8
+ @board = CellularAutomata::Board.new(width: opts[:width]/scale, height: opts[:height]/scale, rule: opts[:rule])
9
+ self.caption = "Cellular Automata"
10
+ end
11
+
12
+ def update
13
+ board.tick! unless paused?
14
+ end
15
+
16
+ def draw
17
+ board.each_cell do |cell|
18
+ color = cell.alive? ? Gosu::Color::YELLOW : Gosu::Color::BLACK
19
+ Gosu.draw_rect(cell.x * scale**2, cell.y * scale**2, cell_width, cell_width, color, 0, :default)
20
+ end
21
+ end
22
+
23
+ def button_down(id)
24
+ if id == Gosu::KbSpace
25
+ toggle_pause
26
+ else
27
+ exit
28
+ end
29
+ end
30
+
31
+ def toggle_pause
32
+ @paused = !@paused
33
+ end
34
+ end
35
+
@@ -15,7 +15,7 @@ class CellularAutomata::Rule
15
15
 
16
16
  def process_rule!(rule_string)
17
17
  rules = rule_string.scan(/[BS]\d+/)
18
- raise ArgumentError.new('Invalid rule string') if rules.length != 2
18
+ raise ArgumentError.new("Invalid rule string #{rule_string}") if rules.length != 2
19
19
  birth_string = rules.select {|s| s.start_with?('B')}.first
20
20
  survive_string = rules.select {|s| s.start_with?('S')}.first
21
21
  (birth, survive) = [birth_string, survive_string].map { |s| s[1..-1].split('').map(&:to_i) }
@@ -1,3 +1,3 @@
1
1
  module CellularAutomata
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -1,10 +1,12 @@
1
1
  require 'pry'
2
2
  require 'byebug'
3
3
  require 'pry-byebug'
4
+ require 'gosu'
4
5
  require "cellular_automata/version"
5
6
  require "cellular_automata/cell"
6
7
  require "cellular_automata/rule"
7
8
  require "cellular_automata/board"
9
+ require "cellular_automata/gui_window"
8
10
 
9
11
  module CellularAutomata
10
12
  end
metadata CHANGED
@@ -1,15 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cellular_automata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Forrest Fleming
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-23 00:00:00.000000000 Z
11
+ date: 2015-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: gosu
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.9'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: releasy
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '1.8'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '1'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '1.8'
13
47
  - !ruby/object:Gem::Dependency
14
48
  name: bundler
15
49
  requirement: !ruby/object:Gem::Requirement
@@ -91,6 +125,7 @@ email:
91
125
  - ffleming@gmail.com
92
126
  executables:
93
127
  - cell
128
+ - cell_gui
94
129
  extensions: []
95
130
  extra_rdoc_files: []
96
131
  files:
@@ -101,10 +136,12 @@ files:
101
136
  - README.md
102
137
  - Rakefile
103
138
  - bin/cell
139
+ - bin/cell_gui
104
140
  - cellular_automata.gemspec
105
141
  - lib/cellular_automata.rb
106
142
  - lib/cellular_automata/board.rb
107
143
  - lib/cellular_automata/cell.rb
144
+ - lib/cellular_automata/gui_window.rb
108
145
  - lib/cellular_automata/rule.rb
109
146
  - lib/cellular_automata/version.rb
110
147
  homepage: https://github.com/ffleming/cellular_automata