Author: James Long
Date: 09:07:16 02/06/99
Go up one level in this thread
On February 06, 1999 at 11:35:56, Larry Griffiths wrote: >Hi! > >I am looking for suggestions on how to test for and generate en-passant >moves. I have been thinking along these lines: > > 1) Was the last move a pawn moving two squares forward. > 2) Is the From square a pawn and is it adjacent to the To square > of the previous ply's move. > 3) If the pawn on the From square is not pinned, then > en-passant move is valid. > >Any other ideas or suggestions are appreciated! >Thanks in advance! > >Larry :} In my movegen, the following code is used for ep captures: // ep capture if (EP != Square::Invalid) { pieceboard.Set(bpawn[EP] & WPawns); while(pieceboard.Data()) { m->setSource((Square::LocationType)pieceboard.MSB()); pieceboard.Xor(mask[m->Source()]); m->setDest(EP); m->setMover(Piece::WhitePawn); m->setCaptured(Piece::BlackPawn); m->setSpecial(Move::EpCapture); m->setScore(PAWN_VALUE); m++; } } "EP" is a macro: #define EP position.EPSquare().Location() I set the "ep square" anytime a double pawn move is made, so that after 1. e4, "e3" is the "ep square." During the move generation, look for a pawn that is in position to capture on the ep square (regardless of what is there). I don't check for the pin at this stage. After the move is made I lok for a captured king. --- James
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.