コード例 #1
0
ファイル: ChessBoard.cs プロジェクト: respel/Chess22kDotNet
        public bool IsLegalEpMove(int fromIndex)
        {
            if (EpIndex == 0)
            {
                // required for tt-moves
                return(false);
            }

            // do-move and hit
            Pieces[ColorToMoveInverse][Pawn] ^= Util.PowerLookup[EpIndex + ColorFactor8[ColorToMoveInverse]];

            // check if is in check
            var isInCheck = CheckUtil.IsInCheck(KingIndex[ColorToMove], ColorToMove, Pieces[ColorToMoveInverse],
                                                (Pieces[ColorToMove][All] ^ Util.PowerLookup[fromIndex] ^ Util.PowerLookup[EpIndex])
                                                | (Pieces[ColorToMoveInverse][All] ^ Util.PowerLookup[EpIndex + ColorFactor8[ColorToMoveInverse]]));

            // undo-move and hit
            Pieces[ColorToMoveInverse][Pawn] |= Util.PowerLookup[EpIndex + ColorFactor8[ColorToMoveInverse]];

            return(!isInCheck);
        }
コード例 #2
0
ファイル: ChessBoard.cs プロジェクト: respel/Chess22kDotNet
 private bool IsLegalNonKingMove(int move)
 {
     return(!CheckUtil.IsInCheck(KingIndex[ColorToMove], ColorToMove, Pieces[ColorToMoveInverse],
                                 AllPieces ^ Util.PowerLookup[MoveUtil.GetFromIndex(move)] ^
                                 Util.PowerLookup[MoveUtil.GetToIndex(move)]));
 }
コード例 #3
0
ファイル: ChessBoard.cs プロジェクト: respel/Chess22kDotNet
 private bool IsLegalKingMove(int move)
 {
     return(!CheckUtil.IsInCheckIncludingKing(MoveUtil.GetToIndex(move), ColorToMove, Pieces[ColorToMoveInverse],
                                              AllPieces ^ Util.PowerLookup[MoveUtil.GetFromIndex(move)]));
 }