]> git.sesse.net Git - stockfish/blobdiff - src/evaluate.cpp
Knight threats on Queen
[stockfish] / src / evaluate.cpp
index 2b901bbd166777ad311a2a691bf69538084c48fb..1e5c588a31eb8a357bdf4e54591e8484cc97f1df 100644 (file)
@@ -167,6 +167,7 @@ namespace {
   const Score CloseEnemies      = S(  7,  0);
   const Score Hanging           = S( 52, 30);
   const Score HinderPassedPawn  = S(  8,  1);
+  const Score KnightOnQueen     = S( 21, 11);
   const Score LongRangedBishop  = S( 22,  0);
   const Score MinorBehindPawn   = S( 16,  0);
   const Score PawnlessFlank     = S( 20, 80);
@@ -489,7 +490,7 @@ namespace {
     if (!(pos.pieces(PAWN) & kf))
         score -= PawnlessFlank;
 
-    // Find the squares that opponent attacks in our king flank, and the squares  
+    // Find the squares that opponent attacks in our king flank, and the squares
     // which are attacked twice in that flank but not defended by our pawns.
     b1 = attackedBy[Them][ALL_PIECES] & kf & Camp;
     b2 = b1 & attackedBy2[Them] & ~attackedBy[Us][PAWN];
@@ -595,6 +596,17 @@ namespace {
 
     score += ThreatOnQueen * popcount(b & safeThreats);
 
+    // Bonus for knight threats on the next moves against enemy queen
+    if (pos.count<QUEEN>(Them) == 1)
+    {
+        b =   pos.attacks_from<KNIGHT>(pos.square<QUEEN>(Them))
+           &  attackedBy[Us][KNIGHT]
+           & ~pos.pieces(Us, PAWN, KING)
+           & ~stronglyProtected;
+
+        score += KnightOnQueen * popcount(b);
+    }
+
     if (T)
         Trace::add(THREAT, Us, score);