class TicTacToe::TUI::Board
Constants
- COLOR_GRAY
- SYMBOL_COLORS
Attributes
window[R]
Public Class Methods
new(board)
click to toggle source
# File lib/tic_tac_toe/tui/board.rb, line 17 def initialize(board) @window = new_window(board) update(board) end
Public Instance Methods
update(board)
click to toggle source
# File lib/tic_tac_toe/tui/board.rb, line 22 def update(board) symbols = SYMBOL_COLORS.keys scanner = StringScanner.new(board) redraw do loop do box_part = scanner.scan_until(/(?=#{Regexp.union(*symbols, /\Z/)})/) write_box(box_part) break if scanner.eos? symbol = scanner.getch write_symbol(symbol, SYMBOL_COLORS.fetch(symbol)) end end end
Private Instance Methods
new_window(board)
click to toggle source
# File lib/tic_tac_toe/tui/board.rb, line 41 def new_window(board) height = board.lines.count width = board.lines.first.length top = (Curses.lines / 2) - (height / 2) left = (Curses.cols / 2) - (width / 2) Curses::Window.new(height, width, top, left).tap do |window| window.keypad(true) end end
redraw() { || ... }
click to toggle source
# File lib/tic_tac_toe/tui/board.rb, line 64 def redraw cursor_position = [@window.cury, @window.curx] @window.clear yield @window.setpos(*cursor_position) end
write_box(string)
click to toggle source
# File lib/tic_tac_toe/tui/board.rb, line 52 def write_box(string) @window.attron(Curses.color_pair(COLOR_GRAY)) do @window.addstr(string) end end
write_symbol(symbol, color)
click to toggle source
# File lib/tic_tac_toe/tui/board.rb, line 58 def write_symbol(symbol, color) @window.attron(Curses.color_pair(color)) do @window.addstr(symbol) end end