Permalink
Browse files

SEE: add support for enpassant moves

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
  • Loading branch information...
1 parent 2d0146f commit 72ca727b382212705d2a31588d03eb0c85abddba @mcostalba committed Dec 21, 2008
Showing with 17 additions and 1 deletion.
  1. +15 −0 src/position.cpp
  2. +2 −1 src/search.cpp
View
@@ -1626,6 +1626,21 @@ int Position::see(Square from, Square to) const {
// Find all attackers to the destination square, with the moving piece
// removed, but possibly an X-ray attacker added behind it.
occ = occupied_squares();
+
+ // Handle enpassant moves
+ if (ep_square() == to && type_of_piece_on(from) == PAWN)
+ {
+ assert(capture == EMPTY);
+
+ Square capQq = (side_to_move() == WHITE)? (to - DELTA_N) : (to - DELTA_S);
+ capture = piece_on(capQq);
+
+ assert(type_of_piece_on(capQq) == PAWN);
+
+ // Remove the captured pawn
+ clear_bit(&occ, capQq);
+ }
+
while (true)
{
clear_bit(&occ, from);
View
@@ -2284,7 +2284,8 @@ namespace {
if ( !PruneBlockingMoves
&& threat != MOVE_NONE
&& piece_is_slider(pos.piece_on(tfrom))
- && bit_is_set(squares_between(tfrom, tto), mto) && pos.see(m) >= 0)
+ && bit_is_set(squares_between(tfrom, tto), mto)
+ && pos.see(m) >= 0)
return false;
return true;

0 comments on commit 72ca727

Please sign in to comment.