Class: TicTacToe::Board

Inherits:
Object
  • Object
show all
Defined in:
lib/tic_tac_toe/board.rb

Constant Summary collapse

BLANK_SYMBOL =
" "

Instance Method Summary collapse

Constructor Details

#initialize(matrix_or_size) ⇒ Board

Returns a new instance of Board.



8
9
10
11
12
13
14
# File 'lib/tic_tac_toe/board.rb', line 8

def initialize(matrix_or_size)
  @matrix =
    case matrix_or_size
    when Matrix  then matrix_or_size
    when Integer then Matrix.build(matrix_or_size) { BLANK_SYMBOL }
    end
end

Instance Method Details

#columnsObject



46
47
48
# File 'lib/tic_tac_toe/board.rb', line 46

def columns
  @matrix.transpose.to_a
end

#diagonalsObject



50
51
52
53
# File 'lib/tic_tac_toe/board.rb', line 50

def diagonals
  (right_diagonals + left_diagonals)
    .map { |diagonal| diagonal.map { |field| @matrix[*field] } }
end

#fieldsObject



16
17
18
# File 'lib/tic_tac_toe/board.rb', line 16

def fields
  @matrix.each_with_index.map { |_, *field| field }
end

#mark(field, symbol) ⇒ Object



24
25
26
27
28
# File 'lib/tic_tac_toe/board.rb', line 24

def mark(field, symbol)
  new_matrix = @matrix.dup
  new_matrix.send(:[]=, *field, symbol)
  TicTacToe::Board.new(new_matrix)
end

#marked?(field) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/tic_tac_toe/board.rb', line 30

def marked?(field)
  @matrix[*field] != BLANK_SYMBOL
end

#rowsObject



42
43
44
# File 'lib/tic_tac_toe/board.rb', line 42

def rows
  @matrix.to_a
end

#sizeObject



20
21
22
# File 'lib/tic_tac_toe/board.rb', line 20

def size
  @matrix.row_count
end

#to_sObject



34
35
36
37
38
39
40
# File 'lib/tic_tac_toe/board.rb', line 34

def to_s
  table = TTY::Table.new(@matrix.to_a)
  table.render(:unicode) do |renderer|
    renderer.border.separator = :each_row
    renderer.padding = [0, 1, 0, 1]
  end
end