From d673eea800511d61eb78b80bc9062bef2ee9ad74 Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Sun, 14 Feb 2016 20:33:51 +0100 Subject: [PATCH] DroidFish: Handle 50-move draw rule when "probe at root" is enabled in settings. --- .../src/org/petero/droidfish/tb/Probe.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/DroidFish/src/org/petero/droidfish/tb/Probe.java b/DroidFish/src/org/petero/droidfish/tb/Probe.java index a069118..6bb8e0d 100644 --- a/DroidFish/src/org/petero/droidfish/tb/Probe.java +++ b/DroidFish/src/org/petero/droidfish/tb/Probe.java @@ -280,18 +280,26 @@ public class Probe { UndoInfo ui = new UndoInfo(); for (Move m : moveList) { pos.makeMove(m, ui); + int pliesToDraw = Math.max(100 - pos.halfMoveClock, 1); GtbProbeResult res = gtbProbe(pos); pos.unMakeMove(m, ui); if (res.result == GtbProbeResult.UNKNOWN) { unknownMoves.add(m); } else { int wScore; - if (res.result == GtbProbeResult.WMATE) - wScore = MATE0 - res.pliesToMate; - else if (res.result == GtbProbeResult.BMATE) - wScore = -(MATE0 - res.pliesToMate); - else + if (res.result == GtbProbeResult.WMATE) { + if (res.pliesToMate <= pliesToDraw) + wScore = MATE0 - res.pliesToMate; + else + wScore = 1; + } else if (res.result == GtbProbeResult.BMATE) { + if (res.pliesToMate <= pliesToDraw) + wScore = -(MATE0 - res.pliesToMate); + else + wScore = -1; + } else { wScore = 0; + } int score = pos.whiteMove ? wScore : -wScore; if (score > bestScore) { optimalMoves.clear();