class Rsb::Gol::Universe
Constants
- DEFAULT_COLUMNS
- DEFAULT_ROWS
Attributes
clock[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/rsb/gol/universe.rb, line 10 def initialize(options = {}) @grid = if options[:grid] options[:grid] elsif options[:cols] && options[:rows] Rsb::Gol::Grid.new(options[:rows], options[:cols]) else Rsb::Gol::Grid.new(DEFAULT_ROWS, DEFAULT_COLUMNS) end @clock = 0 end
Public Instance Methods
evolution()
click to toggle source
# File lib/rsb/gol/universe.rb, line 21 def evolution deaths = [] births = [] @grid.cell_neighbors do |state, x, y, neighbors| if state == 1 deaths << [x, y] if neighbors.size < 2 || neighbors.size > 3 end if state == 0 births << [x, y] if neighbors.size == 3 end end { deaths: deaths, births: births } end
populate(population)
click to toggle source
# File lib/rsb/gol/universe.rb, line 38 def populate(population) population[:deaths].each {|(x, y)| @grid.kill(x, y)} population[:births].each {|(x, y)| @grid.spawn(x, y)} { deaths: population[:deaths].size, births: population[:births].size } end
seed(coords)
click to toggle source
# File lib/rsb/gol/universe.rb, line 47 def seed(coords) coords.each do |x, y| @grid.spawn(x,y) end end
tick!()
click to toggle source
# File lib/rsb/gol/universe.rb, line 57 def tick! @clock += 1 stats = populate(evolution()) { empty_universe: stats[:deaths] == 0 && stats[:births] == 0, deaths: stats[:deaths], births: stats[:births], clock: clock } end
visualize(alive = 'o', dead = ' ')
click to toggle source
# File lib/rsb/gol/universe.rb, line 53 def visualize(alive = 'o', dead = ' ') @grid.visualize(alive, dead) end