class Text2048::Board
2048 game board
Attributes
score[R]
@return [Number] returns the current score
Public Class Methods
new(tiles = Array.new(4, Array.new(4)), score = 0)
click to toggle source
# File lib/text2048/board.rb, line 14 def initialize(tiles = Array.new(4, Array.new(4)), score = 0) @all_tiles = tiles.hashinize @score = score end
Public Instance Methods
down()
click to toggle source
@macro move
# File lib/text2048/board.rb, line 45 def down transpose { right } end
generate()
click to toggle source
Generates a new tile @return [Board] a new board
# File lib/text2048/board.rb, line 77 def generate tiles = @all_tiles.dup tiles[sample_empty_tile] = Tile.new(rand < 0.9 ? 2 : 4, :generated) new_board(tiles, @score) end
generate?(other)
click to toggle source
Need to generate a new tile? @param other [Board] the previous {Board} object @return [Boolean] generate a new tile?
# File lib/text2048/board.rb, line 71 def generate?(other) to_a != other.to_a end
generated_tiles()
click to toggle source
@return [Array] the list of +[row, col]+ of the newly generated tiles
# File lib/text2048/board.rb, line 64 def generated_tiles find_tiles :generated end
left()
click to toggle source
@macro move
# File lib/text2048/board.rb, line 35 def left flip_horizontal { right } end
lose?()
click to toggle source
# File lib/text2048/board.rb, line 91 def lose? right.left.up.down.tiles.size == 4 * 4 end
merged_tiles()
click to toggle source
@return [Array] the list of +[row, col]+ of the merged tiles
# File lib/text2048/board.rb, line 59 def merged_tiles find_tiles :merged end
right()
click to toggle source
@macro move
# File lib/text2048/board.rb, line 26 def right board, score = to_a.reduce([[], @score]) do |(rows, sc), each| row, row_sc = each.right [rows << row, sc + row_sc] end new_board(board, score) end
tiles()
click to toggle source
@return [Array<Tile>] the list of tiles
# File lib/text2048/board.rb, line 54 def tiles @all_tiles.select { |_key, each| each.to_i > 0 } end
to_a()
click to toggle source
@return [Array] a 2D array of tiles.
# File lib/text2048/board.rb, line 100 def to_a [0, 1, 2, 3].map { |each| row(each) } end
up()
click to toggle source
@macro move
# File lib/text2048/board.rb, line 40 def up transpose { left } end
win?()
click to toggle source
@!group Win/Lose
# File lib/text2048/board.rb, line 87 def win? @all_tiles.any? { |_key, value| value.to_i >= 2048 } end
Private Instance Methods
empty_tiles()
click to toggle source
# File lib/text2048/board.rb, line 126 def empty_tiles @all_tiles.select { |_key, each| each.to_i == 0 } end
find_tiles(status)
click to toggle source
# File lib/text2048/board.rb, line 139 def find_tiles(status) @all_tiles.select { |_key, each| each.status == status }.keys end
flip_horizontal(&block)
click to toggle source
@!endgroup
# File lib/text2048/board.rb, line 108 def flip_horizontal(&block) board = flipped_board.instance_eval(&block) new_board(board.to_a.map(&:reverse), board.score) end
flipped_board()
click to toggle source
# File lib/text2048/board.rb, line 113 def flipped_board new_board(to_a.map(&:reverse), @score) end
new_board(tiles, score)
click to toggle source
# File lib/text2048/board.rb, line 135 def new_board(tiles, score) self.class.new(tiles, score) end
row(index)
click to toggle source
# File lib/text2048/board.rb, line 143 def row(index) [index].product([0, 1, 2, 3]).map { |each| @all_tiles[each] } end
sample_empty_tile()
click to toggle source
# File lib/text2048/board.rb, line 130 def sample_empty_tile fail if empty_tiles.empty? empty_tiles.keys.shuffle.first end
transpose(&block)
click to toggle source
# File lib/text2048/board.rb, line 117 def transpose(&block) board = transposed_board.instance_eval(&block) new_board(board.to_a.transpose, board.score) end
transposed_board()
click to toggle source
# File lib/text2048/board.rb, line 122 def transposed_board new_board(to_a.transpose, @score) end