Sha256: 473e435f128001a38c14fa44335191dfe9439e1012f186a5aca90b7dbee383a4
Contents?: true
Size: 1.72 KB
Versions: 2
Compression:
Stored size: 1.72 KB
Contents
module PawnMovementAndPromotion def available_moves if promoted? then SlidePattern::available_moves else moves = [] add_one_square_movement!(moves) add_two_square_movement!(moves) add_diagonal_movement!(moves) add_en_passant_movement!(moves) moves.select { |move| board.within_limits?(move) } end end def promoted? @promoted end private attr_writer :promoted def promote self.promoted = true if location.first == opposite_row end def opposite_row case color when :white then self.class::W_OPPOSITE_ROW else self.class::B_OPPOSITE_ROW end end def at_start? start_row = (color == :white ? Board::W_PAWN_ROW : Board::B_PAWN_ROW) current_row == start_row end def forward_direction color == :white ? -1 : 1 end def add_one_square_movement!(moves) current_row, current_column = location one_forward = [current_row + forward_direction, current_column] moves << one_forward if board.empty_square?(one_forward) end def add_two_square_movement!(moves) current_row, current_column = location one_forward = [current_row + forward_direction, current_column] two_forward = [current_row + (forward_direction * 2), current_column] if board.empty_square?(two_forward) && board.empty_square?(one_forward) && at_start? moves << two_forward end end def add_diagonal_movement!(moves) current_row, current_column = location diagonal_left = [current_row + forward_direction, current_column + 1] diagonal_right = [current_row + forward_direction, current_column - 1] moves << diagonal_left if enemy_in?(diagonal_left) moves << diagonal_right if enemy_in?(diagonal_right) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sapphire-chess-1.0.1 | lib/sapphire-chess/movement_rules/pawn_movement_and_promotion.rb |
sapphire-chess-1.0.0 | lib/sapphire-chess/movement_rules/pawn_movement_and_promotion.rb |