Author: Dann Corbit
Date: 14:32:15 10/22/04
Go up one level in this thread
On October 22, 2004 at 17:28:39, Dann Corbit wrote: >On October 22, 2004 at 17:12:07, Stuart Cracraft wrote: > >>My program spends 40% of its total time in the routines >>determining if a given square is attacked. >> >>Surely there must be a better way. > >If you use bitmaps, you can calculate all the attacks (and even the pins and >half-pins) in a single table lookup for any ray of attacks. > >For any position on the board, there are at most 7 squares attacked along a ray >(since you never attack the square you sit on). Now, of those 7 squares there >are exactly 128 different bit occupation patterns. So you precompute a table of >those patterns. It does not matter if your precomputation is efficient or not, >since you are just creating a table and you will use the precomputation program >to write out a table (or you can compute it at program startup). > >consider the white rook in this diagram and the rank 5 attacks: >[D]8/8/p1P5/Pn1R1b1k/8/6n1/8/2K5 w - - >The moves bitmap is: >01100100 01101100 of course. >The attacks bitmap is: >01000100 >The kingpins bitmap is (you may also want to calculate queen pins, etc.): >00000100 >The shadows bitmap is (shadows are squares effected if the nearest piece on the >ray was moved or captured): >10000011 > >For every one of the 128 possible bit patterns, precompute these (and any other >bitmaps you may find useful). >Then, when you want to know about a board position, you just call the lookup to >get the list of precomputed masks.
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.