Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bitboards, pre-computing moves, and blocked squares?

Author: Tony Werten

Date: 22:20:17 11/30/04

Go up one level in this thread


On November 30, 2004 at 15:44:47, James Swafford wrote:

>On November 30, 2004 at 14:59:04, Dan Honeycutt wrote:
>
>>On November 30, 2004 at 13:42:39, Dann Corbit wrote:
>>
>>>On November 30, 2004 at 13:25:08, James Swafford wrote:
>>>
>>>>On November 30, 2004 at 12:51:38, Andrew N. Hunt wrote:
>>>>
>>>>>Hi!
>>>>>
>>>>>I've recently implemented bitboards (standard and rotated) and have a question
>>>>>about pre-computing moves which contain blocked squares. Let's say I have the
>>>>>occupied rank:
>>>>>
>>>>>bQ, wN, _, wR, _, bP, bN, _
>>>>>
>>>>>and I want to find the valid moves for the white Rook. How do I handle modifying
>>>>>its bitboard rank: 11010110 to remove the blocked squares and only store the
>>>>>available squares: 01101100? (which I can then And with the white/black pieces
>>>>>to find valid Rook moves)
>>>>>
>>>>>Maybe I'm missing something obvious... :-?
>>>>
>>>>You need to precompute a two dimension array
>>>>Bitboard rank_moves[64][256].  The first index is the square
>>>>the rook is on.  The second index is the state of the rank
>>>>(in this case 11010110 base 2).
>>>>
>>>>You'll need a similar array for files and diagonals
>>>>(one for the a1->h8 direction and one more for the h1->a8
>>>>direction).
>>>>
>>>>Just build these arrays in your program initialization
>>>>by doing some looping.
>>>
>>>You can get by with 128 entries instead of 256 in most cases, because a piece
>>>never attacks or defends the square it is standing on.
>>
>>I use [64][128] by simply throwing away the h file.  I could use [64][64] by
>>likewise throwing away the a file but it would cost me an extra add for my shift
>>(ie I'd have to shift by 8*(rank-1) + 1 instead of 8*(rank-1)).  Getting rid of
>>the square the piece is on could, I guess, get you to [64][32] but looks like it
>>would also require some extra math.
>
>I don't think you could get to 32.  What if the square you're on
>is in the A or H file?

32

Might be better to change the declaration to [33][64] for easier
indexcalculation.

Tony

>
>--
>James
>
>
>>
>>Dan H.



This page took 0.01 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.