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