Fix King leaving Palace in Xiangqi
authorH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 17 Jul 2016 21:06:19 +0000 (23:06 +0200)
committerH.G.Muller <hgm@hgm-xboard.(none)>
Sun, 17 Jul 2016 21:06:19 +0000 (23:06 +0200)
The rewrite of the move generator had overlooked this.

moves.c

diff --git a/moves.c b/moves.c
index 6a747a2..91f0072 100644 (file)
--- a/moves.c
+++ b/moves.c
@@ -986,6 +986,14 @@ GenPseudoLegal (Board board, int flags, MoveCallback callback, VOIDSTAR closure,
 
             case WhiteWazir:
             case BlackWazir:
+               if(gameInfo.variant == VariantXiangqi) {
+                   int palace = (piece == WhiteWazir ? 1 : BOARD_HEIGHT-2); // Palace center
+                   if(ff <= BOARD_WIDTH/2 && !SameColor(board[rf][ff+1], piece)) callback(board, flags, NormalMove, rf, ff, rf, ff+1, closure);
+                   if(ff >= BOARD_WIDTH/2 && !SameColor(board[rf][ff-1], piece)) callback(board, flags, NormalMove, rf, ff, rf, ff-1, closure);
+                   if(rf >= palace && !SameColor(board[rf-1][ff], piece)) callback(board, flags, NormalMove, rf, ff, rf-1, ff, closure);
+                   if(rf <= palace && !SameColor(board[rf+1][ff], piece)) callback(board, flags, NormalMove, rf, ff, rf+1, ff, closure);
+                   break;
+               }
                Wazir(board, flags, rf, ff, callback, closure);
                break;