class Text2048::CursesView

Curses UI

Constants

DEFAULT_HEIGHT
DEFAULT_WIDTH

Attributes

message[W]

Public Class Methods

new() click to toggle source
# File lib/text2048/curses_view.rb, line 25
def initialize
  @tiles = {}
  @scale = 1
  @scale_min = 0.5
  @scale_step = 0.5
  @message = nil
  @keyboard = Keyboard.new
end

Public Instance Methods

draw_message() click to toggle source
# File lib/text2048/curses_view.rb, line 81
def draw_message
  return unless @message
  setpos(rows_center, cols_center - @message.length / 2)
  colorize(COLOR_MAGENTA) { addstr(@message) }
end
game_over() click to toggle source
# File lib/text2048/curses_view.rb, line 70
def game_over
  @message = 'GAME OVER'
  draw_message
end
height() click to toggle source
# File lib/text2048/curses_view.rb, line 45
def height
  (Tile.height(@scale) + 1) * 4 + 1
end
high_score(score) click to toggle source
# File lib/text2048/curses_view.rb, line 75
def high_score(score)
  maybe_init_curses
  setpos(0, 15)
  addstr("High Score: #{score.to_i}")
end
larger(board) click to toggle source
# File lib/text2048/curses_view.rb, line 53
def larger(board)
  rwidth = (Curses.cols - 1) / DEFAULT_WIDTH
  rheight = Curses.lines / DEFAULT_HEIGHT
  return if @scale > [rwidth, rheight].min
  change_scale(board, @scale_step)
end
smaller(board) click to toggle source
# File lib/text2048/curses_view.rb, line 60
def smaller(board)
  return if @scale <= @scale_min
  change_scale(board, -1 * @scale_step)
end
update(board) click to toggle source
# File lib/text2048/curses_view.rb, line 37
def update(board)
  maybe_init_curses
  draw_score(board.score)
  draw_tiles(board.to_a)
  draw_message
  refresh
end
width() click to toggle source
# File lib/text2048/curses_view.rb, line 49
def width
  (Tile.width(@scale) + 1) * 4 + 1
end
win() click to toggle source
# File lib/text2048/curses_view.rb, line 65
def win
  @message = 'WIN!'
  draw_message
end

Private Instance Methods

change_scale(board, scale_step) click to toggle source
# File lib/text2048/curses_view.rb, line 89
def change_scale(board, scale_step)
  maybe_init_curses
  @scale += scale_step
  clear
  update(board)
end
cols_center() click to toggle source
# File lib/text2048/curses_view.rb, line 100
def cols_center
  width / 2
end
draw_score(score) click to toggle source
# File lib/text2048/curses_view.rb, line 116
def draw_score(score)
  setpos(0, 0)
  addstr("Score: #{score}")
end
draw_tiles(tiles) click to toggle source
# File lib/text2048/curses_view.rb, line 121
def draw_tiles(tiles)
  [0, 1, 2, 3].product([0, 1, 2, 3]).each do |row, col|
    tile = tiles[row][col]
    @tiles[[row, col]] =
      Tile.new(tile, row, col, color(tile.value), @scale).show
    refresh
  end
end
init_curses() click to toggle source
# File lib/text2048/curses_view.rb, line 110
def init_curses
  init_screen
  curs_set(0)
  at_exit { close_screen }
end
maybe_init_curses() click to toggle source
# File lib/text2048/curses_view.rb, line 104
def maybe_init_curses
  return if @initialized
  init_curses
  @initialized = true
end
rows_center() click to toggle source
# File lib/text2048/curses_view.rb, line 96
def rows_center
  height / 2 + 1
end