Class: NLife::UI

Inherits:
Object
  • Object
show all
Defined in:
lib/nlife/ui.rb

Constant Summary collapse

RENDER_DEAD =
' '
RENDER_LIVE =
"\u2588"

Instance Method Summary collapse

Constructor Details

#initializeUI

Returns a new instance of UI.



10
11
12
13
14
# File 'lib/nlife/ui.rb', line 10

def initialize
  init_settings
  init_window
  init_life
end

Instance Method Details

#dispatch_key(key) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/nlife/ui.rb', line 46

def dispatch_key(key)
  case key
  when 'p' then @pause = !@pause
  when 's' then @life.seed
  when 'q' then return false
  end
  true
end

#init_lifeObject



27
28
29
30
# File 'lib/nlife/ui.rb', line 27

def init_life
  @life = NLife::Game.new(@window_lines - 2, @window_cols - 2) # padding
  @life.seed
end

#init_settingsObject



32
33
34
35
# File 'lib/nlife/ui.rb', line 32

def init_settings
  @pause = false
  @delay = 0.04
end

#init_windowObject



16
17
18
19
20
21
22
23
24
25
# File 'lib/nlife/ui.rb', line 16

def init_window
  Curses.init_screen
  Curses.curs_set(0)
  Curses.noecho
  @window_lines = Curses.lines
  @window_cols = Curses.cols
  @window = Curses::Window.new(@window_lines, @window_cols, 0, 0)
  @window.box('|', '-')
  @window.timeout = 0
end

#renderObject



59
60
61
62
63
64
65
66
67
68
# File 'lib/nlife/ui.rb', line 59

def render
  @life.rows.times do |i|
    string = ''
    @life.cols.times do |j|
      string += @life.state[j, i] > 0 ? RENDER_LIVE : RENDER_DEAD
    end
    @window.setpos(i + 1, 1)
    @window.addstr(string)
  end
end

#startObject



37
38
39
40
41
42
43
44
# File 'lib/nlife/ui.rb', line 37

def start
  loop do
    break unless dispatch_key(@window.getch)
    step
    render
    sleep(@delay)
  end
end

#stepObject



55
56
57
# File 'lib/nlife/ui.rb', line 55

def step
  @life.step unless @pause
end