Author: Edward Screven
Date: 16:23:03 04/17/98
Go up one level in this thread
On April 17, 1998 at 15:46:23, Dan Newman wrote: >Here are two tricks I've used for this. > >1) When a piece is captured (and removed from the piece list (figure >list)) > move the piece at the end of the list into the now empty location. > When undoing the capture just put the un-captured piece at the end of > the list. You would of course maintain a count of the pieces in each > list to make it easy to find the ends of the lists and for iteration > through the lists. > >2) Use one of the bits in the piece to mark the piece as captured but do > not remove the piece from the list. Use this bit to skip over this > piece when doing move generation, etc. When undoing the capture, >just > clear this bit. (You could use the high order bit in the 'what' > member of the piece.) > >There are advantages and disadvantages to each of these. With 1) the >piece >list grows shorter as the game progresses. This helps with move >generation >in the endgame--it gets quite fast. But the order of the pieces in the >list becomes scrambled and thus the order in which moves are generated >may >suffer. > >In 2) (the one I currently use--mainly because of its simplicity) the >order >of the pieces is fixed. This allows you to generate moves in order of >piece type (which may help with move ordering). The main disadvantage >is >that the length is always 16 so that move generation has some overhead >(especially noticeable in the endgame). have you considered compacting the move list at beginning of each search? this would make the move lists short in the endgame, without requiring insert/remove per capture. - edward
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.