Class: Text2048::CursesView

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Curses, Colorize, TileEffects
Defined in:
lib/text2048/curses_view.rb,
lib/text2048/curses_view/lcd.rb,
lib/text2048/curses_view/tile.rb,
lib/text2048/curses_view/colorize.rb,
lib/text2048/curses_view/keyboard.rb,
lib/text2048/curses_view/tile_effects.rb

Overview

Curses UI

Defined Under Namespace

Modules: Colorize, TileEffects Classes: Keyboard, LCD, Tile

Constant Summary collapse

DEFAULT_WIDTH =
(Tile::DEFAULT_WIDTH + 1) * 4 + 1
DEFAULT_HEIGHT =
(Tile::DEFAULT_HEIGHT + 1) * 4 + 2

Constants included from Colorize

Colorize::COLORS

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from TileEffects

#pop_tiles, #zoom_tiles

Methods included from Colorize

#color, #colorize

Constructor Details

#initializeCursesView

Returns a new instance of CursesView.



25
26
27
28
29
30
31
32
# 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

Instance Attribute Details

#message=(value) ⇒ Object (writeonly)

Sets the attribute message

Parameters:

  • value

    the value to set the attribute message to.



23
24
25
# File 'lib/text2048/curses_view.rb', line 23

def message=(value)
  @message = value
end

Instance Method Details

#draw_messageObject



81
82
83
84
85
# 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_overObject



70
71
72
73
# File 'lib/text2048/curses_view.rb', line 70

def game_over
  @message = 'GAME OVER'
  draw_message
end

#heightObject



45
46
47
# File 'lib/text2048/curses_view.rb', line 45

def height
  (Tile.height(@scale) + 1) * 4 + 1
end

#high_score(score) ⇒ Object



75
76
77
78
79
# 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) ⇒ Object



53
54
55
56
57
58
# 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) ⇒ Object



60
61
62
63
# 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) ⇒ Object



37
38
39
40
41
42
43
# 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

#widthObject



49
50
51
# File 'lib/text2048/curses_view.rb', line 49

def width
  (Tile.width(@scale) + 1) * 4 + 1
end

#winObject



65
66
67
68
# File 'lib/text2048/curses_view.rb', line 65

def win
  @message = 'WIN!'
  draw_message
end