コード例 #1
0
 /// <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;
 }
コード例 #2
0
        /// <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);
        }