class Bchess::Piece

Attributes

color[R]
column[R]
row[R]

Public Class Methods

new(color, column, row) click to toggle source
# File lib/bchess/piece.rb, line 8
def initialize(color, column, row)
  @color = color
  @column = column
  @row = row
end

Public Instance Methods

additional_info?(info) click to toggle source
# File lib/bchess/piece.rb, line 80
def additional_info?(info)
  info.nil? || to_column(info) == column || to_row(info) == row
end
at?(dcolumn, drow) click to toggle source
# File lib/bchess/piece.rb, line 26
def at?(dcolumn, drow)
  column == dcolumn && row == drow
end
black?() click to toggle source
# File lib/bchess/piece.rb, line 115
def black?
  color == Bchess::BLACK
end
by_diagonal(dcolumn, drow, range) click to toggle source
# File lib/bchess/piece.rb, line 106
def by_diagonal(dcolumn, drow, range)
  same_diagonal?(dcolumn, drow) &&
    (column - dcolumn).abs <= range
end
by_line(dcolumn, drow, range) click to toggle source
# File lib/bchess/piece.rb, line 101
def by_line(dcolumn, drow, range)
  same_row?(drow) && (column - dcolumn).abs <= range  ||
  same_column?(dcolumn) && (row - drow).abs <= range
end
can_be_promoted?() click to toggle source
# File lib/bchess/piece.rb, line 93
def can_be_promoted?
  false
end
can_en_passant?(column, row, board) click to toggle source
# File lib/bchess/piece.rb, line 67
def can_en_passant?(column, row, board)
  board.en_passant == field(column, row) && can_take?(column, row, board, true)
end
can_make_move?(info, board) click to toggle source
# File lib/bchess/piece.rb, line 35
def can_make_move?(info, board)
  row = to_row(info[:row])
  column = to_column(info[:column])

  board.at(column, row)&.color != color &&
  kind_of?(info[:piece_type]) &&
  info[:piece_color] == color &&
  can_move_or_take?(column, row, board) &&
  additional_info?(info[:additional_info])
end
can_move?(column, row) click to toggle source
# File lib/bchess/piece.rb, line 59
def can_move?(column, row)
  can_move_to_field?(column, row)
end
can_move_or_take?(column, row, board) click to toggle source
# File lib/bchess/piece.rb, line 46
def can_move_or_take?(column, row, board)
  clear_path?(column, row, board) &&
  (
    can_move?(column, row) ||
    can_take?(column, row, board) ||
    can_en_passant?(column, row, board)
  ) && valid_position_after?(column, row, board)
end
can_move_to_field?(dcolumn, drow) click to toggle source
# File lib/bchess/piece.rb, line 84
def can_move_to_field?(dcolumn, drow)
  !(column == dcolumn && drow == row) &&
  (0..7).include?(dcolumn) && (0..7).include?(drow)
end
can_take?(column, row, board, en_passant = false) click to toggle source
# File lib/bchess/piece.rb, line 63
def can_take?(column, row, board, en_passant = false)
  can_take_on_field?(column, row) && (!!board.at(column, row) || en_passant)
end
can_take_on_field?(dcolumn, drow) click to toggle source
# File lib/bchess/piece.rb, line 89
def can_take_on_field?(dcolumn, drow)
  can_move_to_field?(dcolumn, drow)
end
clear_path?(column, row, board) click to toggle source
# File lib/bchess/piece.rb, line 55
def clear_path?(column, row, board)
  fields_between(column, row).none?{|f| board.at(*f)}
end
move(dcolumn, drow) click to toggle source
# File lib/bchess/piece.rb, line 30
def move(dcolumn, drow)
  @column = dcolumn
  @row = drow
end
moved() click to toggle source
# File lib/bchess/piece.rb, line 18
def moved
  false
end
name() click to toggle source
# File lib/bchess/piece.rb, line 22
def name
  raise Exception.new("Should be defined in subclass")
end
to_s() click to toggle source
# File lib/bchess/piece.rb, line 14
def to_s
  name + field(column, row)
end
valid?() click to toggle source
# File lib/bchess/piece.rb, line 97
def valid?
  (0..7).include?(column) && (0..7).include?(row)
end
valid_position_after?(dcolumn, drow, board) click to toggle source
# File lib/bchess/piece.rb, line 71
def valid_position_after?(dcolumn, drow, board)
  fen = board.write_fen

  helper_board = Bchess::Board.new(fen)
  helper_board.read_fen
  helper_piece = helper_board.at(column, row)
  helper_board.move(helper_piece, dcolumn, drow, Bchess::Queen) # TODO
end
white?() click to toggle source
# File lib/bchess/piece.rb, line 111
def white?
  color == Bchess::WHITE
end

Private Instance Methods

same_column?(dcolumn) click to toggle source
# File lib/bchess/piece.rb, line 125
def same_column?(dcolumn)
  column == dcolumn
end
same_diagonal?(dcolumn, drow) click to toggle source
# File lib/bchess/piece.rb, line 129
def same_diagonal?(dcolumn, drow)
 (column - dcolumn).abs == (row - drow).abs
end
same_row?(drow) click to toggle source
# File lib/bchess/piece.rb, line 121
def same_row?(drow)
  row == drow
end