module Checkers::Board::Moves

Public Instance Methods

basic_moves(row:, col:, player:) click to toggle source
# File lib/checkers/board/moves.rb, line 26
def basic_moves(row:, col:, player:)
  possible_squares(row: row, col: col, player: player) do |squares|
    squares.filter_map { |square| Move.new([row, col], square) if move?(row: square[0], col: square[1]) }
  end
end
find_available_moves(row:, col:, player:) click to toggle source
# File lib/checkers/board/moves.rb, line 6
def find_available_moves(row:, col:, player:)
  jumps = jump_moves(row: row, col: col, player: player)
  return jumps if jumps.any?

  basic_moves(row: row, col: col, player: player)
end
jump_moves(row:, col:, player:) click to toggle source
# File lib/checkers/board/moves.rb, line 13
def jump_moves(row:, col:, player:)
  jump_moves = []
  adjacent_squares(row: row, col: col, player: player).each do |square|
    adjacent_row, adjacent_col = square
    next if [0, *player_pieces(player)].include?(@board[adjacent_row, adjacent_col])

    vector = [adjacent_row - row, adjacent_col - col]
    jump_square = [adjacent_row + vector[0], adjacent_col + vector[1]]
    jump_moves << JumpMove.new([row, col], jump_square) if move?(row: jump_square[0], col: jump_square[1])
  end
  jump_moves
end