glchess: Correctly remove en-passant captured pawn from the board

This commit is contained in:
Robert Ancell 2012-07-13 09:41:25 +12:00
parent 9625cb128b
commit d235cb063c

View file

@ -660,22 +660,26 @@ public class ChessState
/* Update board */
board[start] = null;
piece_masks[Color.WHITE] &= BitBoard.clear_location_masks[start];
piece_masks[Color.BLACK] &= BitBoard.clear_location_masks[start];
if (victim != null)
{
board[victim_index] = null;
piece_masks[Color.WHITE] &= BitBoard.clear_location_masks[victim_index];
piece_masks[Color.BLACK] &= BitBoard.clear_location_masks[victim_index];
}
if (is_promotion)
board[end] = new ChessPiece (player, promotion_type);
else
board[end] = piece;
piece_masks[Color.WHITE] &= BitBoard.clear_location_masks[start];
piece_masks[Color.BLACK] &= BitBoard.clear_location_masks[start];
piece_masks[color] |= end_mask;
piece_masks[opponent_color] &= BitBoard.clear_location_masks[end];
if (rook_start >= 0)
{
var rook = board[rook_start];
board[rook_start] = null;
board[rook_end] = rook;
piece_masks[color] &= BitBoard.clear_location_masks[rook_start];
board[rook_end] = rook;
piece_masks[color] |= BitBoard.set_location_masks[rook_end];
}