/// <summary> /// Constructor form set of history boards. /// </summary> /// <param name="history0"></param> /// <param name="history1"></param> /// <param name="history2"></param> /// <param name="history3"></param> /// <param name="history4"></param> /// <param name="history5"></param> /// <param name="history6"></param> /// <param name="history7"></param> public EncodedPositionBoards(EncodedPositionBoard history0, EncodedPositionBoard history1, EncodedPositionBoard history2, EncodedPositionBoard history3, EncodedPositionBoard history4, EncodedPositionBoard history5, EncodedPositionBoard history6, EncodedPositionBoard history7) { History_0 = history0; History_1 = history1; History_2 = history2; History_3 = history3; History_4 = history4; History_5 = history5; History_6 = history6; History_7 = history7; }
/// <summary> /// Determines if en passant opportunity /// exists between two specified consecutive history boards. /// </summary> /// <param name="currentBoard"></param> /// <param name="priorBoard"></param> /// <returns></returns> public static PositionMiscInfo.EnPassantFileIndexEnum EnPassantOpportunityBetweenBoards(EncodedPositionBoard currentBoard, EncodedPositionBoard priorBoard) { EncodedPositionBoardPlane pawnsPrior = priorBoard.OurPawns; EncodedPositionBoardPlane pawnsCurrent = currentBoard.TheirPawns; // We look for the boards differing only because a pawn moved from rank 7 to rank 5 (from our perspective) for (int i = 8; i < 16; i++) { if ( priorBoard.TheirPawns.BitIsSet(64 - i) && !priorBoard.TheirPawns.BitIsSet(64 - i - 16) && !currentBoard.TheirPawns.BitIsSet(64 - i) && currentBoard.TheirPawns.BitIsSet(64 - i - 16) ) { return((PositionMiscInfo.EnPassantFileIndexEnum) new Square(16 - i).File); } } return(PositionMiscInfo.EnPassantFileIndexEnum.FileNone); }