On 2007-02-12, James Stroud <[EMAIL PROTECTED]> wrote:
> Paul Rubin wrote:
>> "agent-s" <[EMAIL PROTECTED]> writes:
>>>Basically I'm programming a board game and I have to use a
>>>list of lists to represent the board (a list of 8 lists with 8
>>>elements each). I have to search the adjacent cells for
>>>existing pieces and I was wondering how I would go about doing
>>>this efficiently. Thanks
>> 
>> You're getting a bunch of Pythonic suggestions which are easy
>> to understand though not so efficient.  If you're after
>> efficiency you might look at a book like Welsh and Baczynskyj
>> "Computer Chess II" for some techniques (warning, this is a
>> rather old book though) and program in a closer-to-the-metal
>> language.  One common approach these days is "bit boards".
>> Basically you represent the board state as a bunch of 64-bit
>> words, one bit per square.  So for checking occupancy, you'd
>> have a word having the bits set for occupied squares.  If you
>> only want to check adjacent squares (king moves), you could
>> have a bunch of bit masks (one for each square) with bits set
>> only for the adjacent squares (similarly for bishop moves,
>> rook moves, etc.)  Then to check adjacency you'd mask off the
>> appropriate bits for that square, then AND it against the
>> occupancy word.  Normally you'd have separate occupancy words
>> for your own pieces and your opponent's.
>
> In defense of the less efficient suggestions, he did say he had
> to use a list of lists. But what you describe is pretty cool.

Precomputing and storing the adjecent indexes for each square
would be a possible hybrid solution. In effect every square would
contain pointers to all its neighbors.

-- 
Neil Cerutti
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to