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

add_piece

# 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