- Glaurung, a UCI chess playing engine.
- Copyright (C) 2004-2008 Tord Romstad
+ Stockfish, a UCI chess playing engine derived from Glaurung 2.1
+ Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
+ Copyright (C) 2008 Marco Costalba
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
evaluate_knight(pos, pos.piece_list(c, KNIGHT, i), c, ei);
// Bishops
evaluate_knight(pos, pos.piece_list(c, KNIGHT, i), c, ei);
// Bishops
evaluate_bishop(pos, pos.piece_list(c, BISHOP, i), c, ei);
// Rooks
evaluate_bishop(pos, pos.piece_list(c, BISHOP, i), c, ei);
// Rooks
evaluate_rook(pos, pos.piece_list(c, ROOK, i), c, ei);
// Queens
evaluate_rook(pos, pos.piece_list(c, ROOK, i), c, ei);
// Queens
evaluate_queen(pos, pos.piece_list(c, QUEEN, i), c, ei);
// Special pattern: trapped bishops on a7/h7/a2/h2
evaluate_queen(pos, pos.piece_list(c, QUEEN, i), c, ei);
// Special pattern: trapped bishops on a7/h7/a2/h2
{
// Check for KBP vs KB with only a single pawn that is almost
// certainly a draw or at least two pawns.
{
// Check for KBP vs KB with only a single pawn that is almost
// certainly a draw or at least two pawns.
&& ei.kingAttackersCount[them] >= 2
&& p.non_pawn_material(them) >= QueenValueMidgame + RookValueMidgame
&& ei.kingAdjacentZoneAttacksCount[them])
&& ei.kingAttackersCount[them] >= 2
&& p.non_pawn_material(them) >= QueenValueMidgame + RookValueMidgame
&& ei.kingAdjacentZoneAttacksCount[them])
{
// We have a mate, unless the queen is pinned or there
// is an X-ray attack through the queen.
{
// We have a mate, unless the queen is pinned or there
// is an X-ray attack through the queen.
{
from = p.piece_list(them, QUEEN, i);
if ( bit_is_set(p.piece_attacks<QUEEN>(from), to)
{
from = p.piece_list(them, QUEEN, i);
if ( bit_is_set(p.piece_attacks<QUEEN>(from), to)
// value if the other side has a rook or queen.
if(square_file(s) == FILE_A || square_file(s) == FILE_H) {
if(pos.non_pawn_material(them) == KnightValueMidgame
// value if the other side has a rook or queen.
if(square_file(s) == FILE_A || square_file(s) == FILE_H) {
if(pos.non_pawn_material(them) == KnightValueMidgame