Author: Gerd Isenberg
Date: 15:59:02 03/24/04
Go up one level in this thread
Some minor changes because inOne == inThree is not general enough. Better to look for no further growing: if ( (inThree & ~(fromBB|inOne|inTwo)) == 0 && ... // fixed is subset of tabu (may be equal), the set of all own blocked // and backward pawns. // tabu may contain enemy pawn attacks which don't terminate the attack ray BitBoard getTrappedBishopSquares(BitBoard fixed, BitBoard tabu, int n) { BitBoard trappedBishopSquares = 0; BitBoard potb = ~tabu; while ( potb ) { BitBoard fromBB = potb & -potb; BitBoard inOne = fillBishopAttacks(fromBB, ~fixed) & ~tabu; BitBoard inTwo = fillBishopAttacks(inOne, ~fixed) & ~tabu; BitBoard inThree = fillBishopAttacks(inTwo, ~fixed) & ~tabu; // tag all reachable in up to three moves as done potb &= ~(fromBB|inOne|inTwo|inThree); inThree &= ~(fromBB|inOne|inTwo); // growing? if ( inThree == 0 && popCount(inOne|inTwo) < n ) trappedBishopSquares |= (fromBB|inOne|inTwo); } return trappedBishopSquares; } popCount > n considers the whole fill area reachable in two moves.
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.