Exemplo n.º 1
0
        private static EMoveAmbiguity Ambiguity(this Move move, BitBoard similarTypeAttacks, IPosition position)
        {
            var ambiguity = EMoveAmbiguity.None;

            foreach (var square in similarTypeAttacks)
            {
                var pinned = position.GetPinnedPieces(square, move.GetMovingSide());

                if (similarTypeAttacks & pinned)
                {
                    continue;
                }

                if (move.GetMovingPieceType() != position.GetPieceType(square))
                {
                    continue;
                }

                if (position.OccupiedBySide[move.GetMovingSide().Side] & square)
                {
                    if (square.File() == move.GetFromSquare().File())
                    {
                        ambiguity |= EMoveAmbiguity.File;
                    }
                    else if (square.Rank() == move.GetFromSquare().Rank())
                    {
                        ambiguity |= EMoveAmbiguity.Rank;
                    }

                    ambiguity |= EMoveAmbiguity.Move;
                }
            }

            return(ambiguity);
        }