class Board
Maintains game board state
Public Class Methods
new()
click to toggle source
initialize board
# File lib/anakhi/board.rb, line 4 def initialize # set up blank data structure @board = Array.new(3){Array.new(3)} end
Public Instance Methods
add_piece(coords, piece)
click to toggle source
# File lib/anakhi/board.rb, line 25 def add_piece(coords, piece) # IF piece_location_valid? if piece_location_valid?(coords) # place piece @board[coords[0]][coords[1]] = piece true else false end end
coordinates_available?(coords)
click to toggle source
coordinates_available?
# File lib/anakhi/board.rb, line 57 def coordinates_available?(coords) # UNLESS piece coords are not occupied if @board[coords[0]][coords[1]].nil? true else # display error message puts "There is already a piece there!" end end
diagonals()
click to toggle source
diagonals
# File lib/anakhi/board.rb, line 102 def diagonals # return the diagonal pieces [[ @board[0][0],@board[1][1],@board[2][2] ],[ @board[2][0],@board[1][1],@board[0][2] ]] end
full?()
click to toggle source
full?
# File lib/anakhi/board.rb, line 124 def full? # does every square contain a piece? @board.all? do |row| row.none?(&:nil?) end end
horizontals()
click to toggle source
horizontals
# File lib/anakhi/board.rb, line 114 def horizontals # return the horizontal pieces horizontals = [] 3.times do |i| horizontals << [@board[0][i],@board[1][i],@board[2][i]] end horizontals end
piece_location_valid?(coords)
click to toggle source
piece_location_valid?
# File lib/anakhi/board.rb, line 37 def piece_location_valid?(coords) # Is the placement within_valid_coordinates? if within_valid_coordinates?(coords) # Are the piece coordinates_available? coordinates_available?(coords) end end
render()
click to toggle source
render
# File lib/anakhi/board.rb, line 10 def render puts # loop through data structure @board.each do |row| row.each do |cell| # display an existing marker if any, else blank cell.nil? ? print("-") : print(cell.to_s) end puts end puts end
verticals()
click to toggle source
verticals
# File lib/anakhi/board.rb, line 108 def verticals # return the vertical pieces @board end
winning_combination?(piece)
click to toggle source
winning_combination?
# File lib/anakhi/board.rb, line 68 def winning_combination?(piece) # is there a winning_diagonal? # or winning_vertical? # or winning_horizontal? for that piece? winning_diagonal?(piece) || winning_horizontal?(piece) || winning_vertical?(piece) end
winning_diagonal?(piece)
click to toggle source
winning_diagonal?
# File lib/anakhi/board.rb, line 78 def winning_diagonal?(piece) # check if specified piece has a triplet across diagonals diagonals.any? do |diag| diag.all?{|cell| cell == piece } end end
winning_horizontal?(piece)
click to toggle source
winning_horizontal?
# File lib/anakhi/board.rb, line 94 def winning_horizontal?(piece) # check if specified piece has a triplet across horizontals horizontals.any? do |horz| horz.all?{|cell| cell == piece } end end
winning_vertical?(piece)
click to toggle source
winning_vertical?
# File lib/anakhi/board.rb, line 86 def winning_vertical?(piece) # check if specified piece has a triplet across verticals verticals.any? do |vert| vert.all?{|cell| cell == piece } end end
within_valid_coordinates?(coords)
click to toggle source
within_valid_coordinates?
# File lib/anakhi/board.rb, line 46 def within_valid_coordinates?(coords) # UNLESS piece coords are in the acceptible range if (0..2).include?(coords[0]) && (0..2).include?(coords[1]) true else # display an error message puts "Piece coordinates are out of bounds" end end