diff options
Diffstat (limited to 'src/recogn.c')
| -rw-r--r-- | src/recogn.c | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/src/recogn.c b/src/recogn.c index c0b1bb8..c8fc856 100644 --- a/src/recogn.c +++ b/src/recogn.c @@ -334,7 +334,7 @@ Return value: uAdjacent = 0; for (u = 1; u < pos->uNonPawnCount[uStrong][0]; u++) { - uAdjacent += DISTANCE(cWeakKing, pos->cNonPawns[uStrong][u] == 1); + uAdjacent += (DISTANCE(cWeakKing, pos->cNonPawns[uStrong][u]) == 1); } if (uAdjacent > 1) { @@ -345,6 +345,10 @@ Return value: // If it's the weak side's turn and the strong king is close // enough that the weak side may be stalemated, fail to recognize. // + ASSERT(IS_ON_BOARD(pos->cNonPawns[uStrong][0])); + ASSERT(IS_KING(pos->rgSquare[pos->cNonPawns[uStrong][0]].pPiece)); + u = DISTANCE(cWeakKing, pos->cNonPawns[uStrong][0]); + ASSERT(u != 1); if (pos->uToMove != uStrong) { ASSERT(pos->uToMove == FLIP(uStrong)); @@ -352,17 +356,12 @@ Return value: { return(UNRECOGNIZED); } - - ASSERT(IS_ON_BOARD(pos->cNonPawns[uStrong][0])); - ASSERT(IS_KING(pos->rgSquare[pos->cNonPawns[uStrong][0]].pPiece)); - u = DISTANCE(cWeakKing, pos->cNonPawns[uStrong][0]); - ASSERT(u != 1); if ((u == 2) && (ON_EDGE(cWeakKing))) { return(UNRECOGNIZED); } } - + // // This is a recognized win for the strong side. Compute a score // that encourages cornering the weak king and making progress @@ -549,9 +548,9 @@ Return value: uAdjacent = 0; for (u = 1; u < pos->uNonPawnCount[uStrong][0]; u++) { - uAdjacent = (DISTANCE(pos->cNonPawns[uStrong][u], cWeakKing) == 1); + uAdjacent += (DISTANCE(pos->cNonPawns[uStrong][u], cWeakKing) == 1); } - if (!uAdjacent) + if (uAdjacent) { return(UNRECOGNIZED); } @@ -561,18 +560,13 @@ Return value: // that there might be a stalemate if the weak side is on move and // on the edge. // + ASSERT(IS_ON_BOARD(pos->cNonPawns[uStrong][0])); + ASSERT(IS_KING(pos->rgSquare[pos->cNonPawns[uStrong][0]].pPiece)); + u = DISTANCE(cWeakKing, pos->cNonPawns[uStrong][0]); + ASSERT(u != 1); if (pos->uToMove != uStrong) { ASSERT(pos->uToMove == FLIP(uStrong)); - if (uAdjacent == 1) - { - return(UNRECOGNIZED); - } - - ASSERT(IS_ON_BOARD(pos->cNonPawns[uStrong][0])); - ASSERT(IS_KING(pos->rgSquare[pos->cNonPawns[uStrong][0]].pPiece)); - u = DISTANCE(cWeakKing, pos->cNonPawns[uStrong][0]); - ASSERT(u != 1); if ((u == 2) && (ON_EDGE(cWeakKing))) { return(UNRECOGNIZED); |
