Menu

#4 Castling flag preserved despite rook move

open
nobody
None
5
2011-06-22
2011-06-22
ktakusa
No

In the position 4k2r/8/8/8/8/8/8/4K3 b k - 0 1, after black makes the move ... Rh1, black's short castling privilege remains active (leading to incorrect nodes later on in perft testing). Here is a patch which corrects the bug:

--- a/src/chesspresso/position/Position.java
+++ b/src/chesspresso/position/Position.java
@@ -842,11 +842,11 @@ public final class Position extends AbstractMoveablePosition
int castles = getCastles();
if (castles != NO_CASTLES) {
if (sqiFrom == Chess.A1 || sqiTo == Chess.A1) {castles &= ~WHITE_LONG_CASTLE;}
- else if (sqiFrom == Chess.H1 || sqiTo == Chess.H1) {castles &= ~WHITE_SHORT_CASTLE;}
- else if (sqiFrom == Chess.A8 || sqiTo == Chess.A8) {castles &= ~BLACK_LONG_CASTLE;}
- else if (sqiFrom == Chess.H8 || sqiTo == Chess.H8) {castles &= ~BLACK_SHORT_CASTLE;}
- else if (sqiFrom == Chess.E1) {castles &= ~WHITE_CASTLE;}
- else if (sqiFrom == Chess.E8) {castles &= ~BLACK_CASTLE;}
+ if (sqiFrom == Chess.H1 || sqiTo == Chess.H1) {castles &= ~WHITE_SHORT_CASTLE;}
+ if (sqiFrom == Chess.A8 || sqiTo == Chess.A8) {castles &= ~BLACK_LONG_CASTLE;}
+ if (sqiFrom == Chess.H8 || sqiTo == Chess.H8) {castles &= ~BLACK_SHORT_CASTLE;}
+ if (sqiFrom == Chess.E1) {castles &= ~WHITE_CASTLE;}
+ if (sqiFrom == Chess.E8) {castles &= ~BLACK_CASTLE;}
setCastles(castles);
}
}

Discussion


Log in to post a comment.