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