Make repetitions in Chess and Shatranj draws
authorH.G. Muller <h.g.muller@hccnet.nl>
Sun, 24 Feb 2013 11:20:05 +0000 (12:20 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Mon, 21 Oct 2013 08:40:23 +0000 (10:40 +0200)
hachu.c

diff --git a/hachu.c b/hachu.c
index 68e0674..5c1a77b 100644 (file)
--- a/hachu.c
+++ b/hachu.c
@@ -92,7 +92,7 @@ typedef struct {
 } UndoInfo;\r
 \r
 char *array, fenArray[4000], *reason;\r
-int bWidth, bHeight, bsize, zone, currentVariant, chuFlag, tenFlag, chessFlag;\r
+int bWidth, bHeight, bsize, zone, currentVariant, chuFlag, tenFlag, chessFlag, repDraws;\r
 int stm, xstm, hashKeyH, hashKeyL, framePtr, msp, nonCapts, rootEval, retMSP, retFirst, retDep, pvPtr, level, cnt50, mobilityScore;\r
 int nodes, startTime, tlim1, tlim2, repCnt, comp;\r
 Move retMove, moveStack[10000], path[100], repStack[300], pv[1000], repeatMove[300];\r
@@ -761,6 +761,7 @@ Init (int var)
   chuFlag = (currentVariant == V_CHU);\r
   tenFlag = (currentVariant == V_TENJIKU);\r
   chessFlag = (currentVariant == V_CHESS);\r
+  repDraws  = (currentVariant == V_CHESS || currentVariant == V_SHATRANJ);\r
 \r
   for(i= -1; i<9; i++) { // board steps in linear coordinates\r
     kStep[i] = STEP(direction[i&7].x,   direction[i&7].y);       // King\r
@@ -1667,6 +1668,7 @@ if(flag & depth >= 0) printf("%2d:%d found %d/%d %08x %s\n", depth, iterDep, cur
 \r
 if(flag & depth >= 0) printf("%2d:%d made %d/%d %s\n", depth, iterDep, curMove, msp, MoveToText(moveStack[curMove], 0));\r
       for(i=2; i<=cnt50; i+=2) if(repStack[level-i+200] == hashKeyH) {\r
+       if(repDraws) { score = 0; goto repetition; }\r
        moveStack[curMove] = 0; // erase forbidden move\r
        if(!level) repeatMove[repCnt++] = move & 0xFFFFFF; // remember outlawed move\r
        score = -INF; moveStack[curMove] = 0; goto repetition;\r