Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Move Generator

Author: Uri Blass

Date: 02:19:18 12/20/02

Go up one level in this thread


On December 20, 2002 at 04:33:13, Gerd Isenberg wrote:

>On December 20, 2002 at 04:12:20, Uri Blass wrote:
>
>>On December 20, 2002 at 03:37:09, Gerd Isenberg wrote:
>>
>>>On December 19, 2002 at 18:49:56, Dann Corbit wrote:
>>>
>>>>On December 19, 2002 at 18:47:22, Joshua Haglund wrote:
>>>>
>>>>>Anyone know of a good site(s) for the programming of a (legal) move generator?
>>>>
>>>>You'll find a lot more help looking for a pseudo-legal move generator.  I don't
>>>>think anyone makes a strictly legal move generator (maybe Uri does...)
>>>
>>>I do it in IsiChess and i guess a lot of bitboarders too.
>>>
>>>Gerd
>>
>>I do not think that it is something special for bitboarders.
>>I do it without bitboards.
>>
>>Uri
>
>Yes, sorry Uri.
>
>I thought detecting pinned pieces is a bitboard domain, but of course it's
>independent of the data structure representing the board.
>
>Gerd

detecting pinned pieces is something that I do without bitboard and it can be
improved(also without bitboard) but maybe bitboard can help better.

I will explain what I do in this post and explain my ideas of doing it better.

today I have an array pin[64] that tells me for every square if the piece in it
is pinned to the king.

pin[i] is used only when there is a piece of the side to move in square i(in
other cases pin[i] is not used so right for today I do not care if the value is
wronf).
pin[i]=-1 means that the piece is not pinned.
pin[i]=0 means that the piece is pinned to the same file
pin[i]=1 means that the piece is pinned to the same rank
pin[i]=2 or pin[i]=3 means that the piece is pinned in diagnols.

I also has a varaible pinnumber[ply] that tells me the number of piece that are
pinned.

Adding this varaible helped to do movei sligthly faster.

when pinnumber[ply]=0 I can save the time of looking in pin[i] so when I undo
moves and pinnumber[ply]=0 I do not care to update the pin array.

the varaible pinnumber[ply] also help in the search algorithm but I still do not
like my data structure because when a piece is pinned I have no easy way to find
the square of the pinned piece or the value of the pinned piece and the only way
for me is simply a loop on the piece list.

I think it may be better if I replace the varaible pinnumber[ply] by
pininfo[ply] because in 99% of the cases it may be possible to compress all the
information about pins to one 32 bit integer.

It is possible that in that case I do not need the array pin[64] because usually
only one or 2 pieces are pinned and there is no problem to store the information
in one 32 bit number.

Maybe storing information about pins of both sides can be even faster but I
decided not to do it in the near future and I think that checking not to have
bugs in the move generator after doing it is not a simple task(I did things that
may be even more complicated and my move generator have thousands of C lines but
I decided that today it is fast enough and I do not like to work estimated time
of some hundreds of hours to implement pins for both sides and check for bugs).

Uri



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.