Class: TicTacToe::Board
- Inherits:
-
Object
- Object
- TicTacToe::Board
- Defined in:
- lib/tic_tac_toe/board.rb
Constant Summary collapse
- BLANK_SYMBOL =
" "
Instance Method Summary collapse
- #columns ⇒ Object
- #diagonals ⇒ Object
- #fields ⇒ Object
-
#initialize(matrix_or_size) ⇒ Board
constructor
A new instance of Board.
- #mark(field, symbol) ⇒ Object
- #marked?(field) ⇒ Boolean
- #rows ⇒ Object
- #size ⇒ Object
- #to_s ⇒ Object
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
#columns ⇒ Object
46 47 48 |
# File 'lib/tic_tac_toe/board.rb', line 46 def columns @matrix.transpose.to_a end |
#diagonals ⇒ Object
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 |
#fields ⇒ Object
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
30 31 32 |
# File 'lib/tic_tac_toe/board.rb', line 30 def marked?(field) @matrix[*field] != BLANK_SYMBOL end |
#rows ⇒ Object
42 43 44 |
# File 'lib/tic_tac_toe/board.rb', line 42 def rows @matrix.to_a end |
#size ⇒ Object
20 21 22 |
# File 'lib/tic_tac_toe/board.rb', line 20 def size @matrix.row_count end |
#to_s ⇒ Object
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 |