Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Attack Bitboards

Author: Gerd Isenberg

Date: 07:32:44 10/30/01

Go up one level in this thread


Sample C++ code:


void CNode::MovePiece(unsigned int from, unsigned int to, unsigned int piece)
{
	// occupied bitboard updates
	m_Inc.m_OccuBBA1H8 ^= sBits[from].sA1H8 ^ sBits[to].sA1H8;
	m_Inc.m_OccuBBH1A8 ^= sBits[from].sH1A8 ^ sBits[to].sH1A8;
	m_Inc.m_OccuBB90   ^= sBits[from].sBt90 ^ sBits[to].sBt90;
	m_Inc.m_PieceBB[ALLPIECES] ^= sBits[from].sBBit ^ sBits[to].sBBit;
	// piece bitboard updates
	m_Inc.m_PieceBB[piece>>1] ^= sBits[from].sBBit ^ sBits[to].sBBit;
	m_Inc.m_ColorPieceBB[ColorOfPiece(piece)] ^= sBits[from].sBBit ^
sBits[to].sBBit;
	// hash update
	m_Inc.m_Pos.m_Hashval ^= sHashvtbl[piece][from] ^ sHashvtbl[piece][to];
}

...


__forceinline BitBoard FileAttacks(unsigned int sq) const
{
	return sFileAtta[sq][(*(((BYTE*)&(m_Inc.m_OccuBB90))+File(sq)) >> 1) & 0x3f];
}
__forceinline BitBoard RankAttacks(unsigned int sq) const
{
	return sRankAtta[sq][(*(((BYTE*)&(m_Inc.m_PieceBB[ALLPIECES]))+Rank(sq)) >> 1)
& 0x3f];
}
__forceinline BitBoard A1H8Attacks(unsigned int sq) const
{
	return sA1H8Atta[sq][(*(((BYTE*)&(m_Inc.m_OccuBBA1H8))+((sq-Rank(sq)) & 7)) >>
1) & 0x3f];	// (file-rank) & 7
}
__forceinline BitBoard H1A8Attacks(unsigned int sq) const
{
	return sH1A8Atta[sq][(*(((BYTE*)&(m_Inc.m_OccuBBH1A8))+(((~sq)-Rank(sq)) & 7))
>> 1) & 0x3f];// (mirrorfile-rank) & 7
}




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.