Sha256: 2254032281016cdfd020eba8e6a6e0c39d85a33e9573c71eb18296a0da48311d

Contents?: true

Size: 1.03 KB

Versions: 10

Compression:

Stored size: 1.03 KB

Contents

module EnPassantPieceControl
  def add_en_passant_movement!(moves)
    adyacent_enemy_pawn = pawn_to_pass.first
    return if adyacent_enemy_pawn.nil?

    moves << en_passant_target_square(adyacent_enemy_pawn)
  end

  def pawn_to_pass(current_square = location)
    # See Piece#safe_moves, Board#is_a_duplicate?
    return [] if board.a_duplicate?

    left_square = [current_square.first, current_square.last - 1]
    right_square = [current_square.first, current_square.last + 1]

    [left_square, right_square].select do |square|
      board[square].is_a?(Pawn) && pawn_just_moved_two?(square)
    end
  end

  def pawn_just_moved_two?(square)
    if color == :white
      board.black_player.history.last ==
        [[square.first - 2, square.last], square]
    else
      board.white_player.history.last ==
        [[square.first + 2, square.last], square]
    end
  end

  def en_passant_target_square(adyacent_enemy_pawn)
    direction = color == :white ? -1 : 1

    [adyacent_enemy_pawn.first + direction, adyacent_enemy_pawn.last]
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
sapphire-chess-1.1.7 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.1.6 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.1.5 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.1.4 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.1.3 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.1.2 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.1.1 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.1.0 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.0.1 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb
sapphire-chess-1.0.0 lib/sapphire-chess/movement_rules/en_passant_piece_control.rb