Class: NLife::UI
- Inherits:
-
Object
- Object
- NLife::UI
- Defined in:
- lib/nlife/ui.rb
Constant Summary collapse
- RENDER_DEAD =
' '- RENDER_LIVE =
"\u2588"
Instance Method Summary collapse
- #dispatch_key(key) ⇒ Object
- #init_life ⇒ Object
- #init_settings ⇒ Object
- #init_window ⇒ Object
-
#initialize ⇒ UI
constructor
A new instance of UI.
- #render ⇒ Object
- #start ⇒ Object
- #step ⇒ Object
Constructor Details
#initialize ⇒ UI
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_life ⇒ Object
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_settings ⇒ Object
32 33 34 35 |
# File 'lib/nlife/ui.rb', line 32 def init_settings @pause = false @delay = 0.04 end |
#init_window ⇒ Object
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 |
#render ⇒ Object
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 |
#start ⇒ Object
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 |
#step ⇒ Object
55 56 57 |
# File 'lib/nlife/ui.rb', line 55 def step @life.step unless @pause end |