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