Better implementation of Seirawan Chess
authorH.G. Muller <h.g.muller@hccnet.nl>
Wed, 1 Dec 2010 16:12:27 +0000 (17:12 +0100)
committerH.G. Muller <h.g.muller@hccnet.nl>
Thu, 2 Dec 2010 12:39:22 +0000 (13:39 +0100)
commitd49765690831138d5d4debc822c71398bd72df36
treec0dff2dd2e6c7071679df3cd171f33e26e862915
parent178720867b5f21ece6bde4502d0d249f532f6a7f
Better implementation of Seirawan Chess

The previous implementation gated 'blindly', without gating being
considered in the search. Now the gating is put in the search, by
assigning the variable gt (initialized to 0) to the from square in
stead of a straight 0 (= empty square), when making the move. An extra
loop (alas, goto-based) then steps gt through the available pieces
(removing and putting them back into the holdings) when the moved piece
is a virgin non-Pawn and the variant allows gating.
  In the root the value of gt for the best move is remembered in the
global variable GT, while searching (i.e. K==I). This can also be set
from the promoChar of an input move. The pass to perform the move (with
K != I) then compares gt to GT when testing for legality.

fix
data/fmax.ini
fairymax.c