mirror of
https://github.com/sockspls/badfish
synced 2025-05-01 01:03:09 +00:00
Reformat max_threat()
Helper function should just know how to find the biggest piece type in a bitboard. All the threat logic and data shoud be in evaluate_threats(). This nicely separates the scope of the two functions in a more consistent way and simplifies the code. No functional change.
This commit is contained in:
parent
8d62ece945
commit
4f6b1bf3be
1 changed files with 21 additions and 24 deletions
|
@ -490,24 +490,21 @@ namespace {
|
||||||
return score;
|
return score;
|
||||||
}
|
}
|
||||||
|
|
||||||
// max_threat() is a helper function to calculate the score of a set of threats.
|
|
||||||
// The set of threatened pieces is in the "targets" parameter, and we return
|
|
||||||
// the value of the threat on the biggest piece.
|
|
||||||
|
|
||||||
template<Color Us> FORCE_INLINE
|
// max_piece_type() is a helper function used by evaluate_threats() to get
|
||||||
Score max_threat(const Bitboard targets, const Position& pos, const Score threat_values[]) {
|
// the value of the biggest PieceType of color C in 'target' bitboard.
|
||||||
|
|
||||||
const Color Them = (Us == WHITE ? BLACK : WHITE);
|
template<Color C>
|
||||||
|
inline PieceType max_piece_type(const Position& pos, const Bitboard target) {
|
||||||
|
|
||||||
PieceType threat = PAWN;
|
assert(target & (pos.pieces(C) ^ pos.pieces(C, KING)));
|
||||||
if (targets & pos.pieces(Them, KNIGHT)) threat = KNIGHT;
|
|
||||||
if (targets & pos.pieces(Them, BISHOP)) threat = BISHOP;
|
|
||||||
if (targets & pos.pieces(Them, ROOK)) threat = ROOK;
|
|
||||||
if (targets & pos.pieces(Them, QUEEN)) threat = QUEEN;
|
|
||||||
|
|
||||||
return threat_values[threat];
|
PieceType pt;
|
||||||
|
for (pt = QUEEN; !(target & pos.pieces(C, pt)); --pt) {}
|
||||||
|
return pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// evaluate_threats() assigns bonuses according to the type of attacking piece
|
// evaluate_threats() assigns bonuses according to the type of attacking piece
|
||||||
// and the type of attacked one.
|
// and the type of attacked one.
|
||||||
|
|
||||||
|
@ -516,18 +513,18 @@ namespace {
|
||||||
|
|
||||||
const Color Them = (Us == WHITE ? BLACK : WHITE);
|
const Color Them = (Us == WHITE ? BLACK : WHITE);
|
||||||
|
|
||||||
Bitboard b, weakEnemies, protectedEnemies;
|
|
||||||
Score score = SCORE_ZERO;
|
|
||||||
enum { Minor, Major };
|
enum { Minor, Major };
|
||||||
|
|
||||||
// Protected enemies
|
Bitboard b, weakEnemies, protectedEnemies;
|
||||||
protectedEnemies = (pos.pieces(Them) ^ pos.pieces(Them,PAWN))
|
Score score = SCORE_ZERO;
|
||||||
|
|
||||||
|
// Enemies defended by a pawn and under our attack by a minor piece
|
||||||
|
protectedEnemies = (pos.pieces(Them) ^ pos.pieces(Them, PAWN))
|
||||||
& ei.attackedBy[Them][PAWN]
|
& ei.attackedBy[Them][PAWN]
|
||||||
& (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]);
|
& (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]);
|
||||||
|
|
||||||
if (protectedEnemies)
|
if (protectedEnemies)
|
||||||
score += max_threat<Us>(protectedEnemies, pos, Threat[Minor]);
|
score += Threat[Minor][max_piece_type<Them>(pos, protectedEnemies)];
|
||||||
|
|
||||||
|
|
||||||
// Enemies not defended by a pawn and under our attack
|
// Enemies not defended by a pawn and under our attack
|
||||||
weakEnemies = pos.pieces(Them)
|
weakEnemies = pos.pieces(Them)
|
||||||
|
@ -539,11 +536,11 @@ namespace {
|
||||||
{
|
{
|
||||||
b = weakEnemies & (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]);
|
b = weakEnemies & (ei.attackedBy[Us][KNIGHT] | ei.attackedBy[Us][BISHOP]);
|
||||||
if (b)
|
if (b)
|
||||||
score += max_threat<Us>(b, pos, Threat[Minor]);
|
score += Threat[Minor][max_piece_type<Them>(pos, b)];
|
||||||
|
|
||||||
b = weakEnemies & (ei.attackedBy[Us][ROOK] | ei.attackedBy[Us][QUEEN]);
|
b = weakEnemies & (ei.attackedBy[Us][ROOK] | ei.attackedBy[Us][QUEEN]);
|
||||||
if (b)
|
if (b)
|
||||||
score += max_threat<Us>(b, pos, Threat[Major]);
|
score += Threat[Major][max_piece_type<Them>(pos, b)];
|
||||||
|
|
||||||
b = weakEnemies & ~ei.attackedBy[Them][ALL_PIECES];
|
b = weakEnemies & ~ei.attackedBy[Them][ALL_PIECES];
|
||||||
if (b)
|
if (b)
|
||||||
|
|
Loading…
Add table
Reference in a new issue