Пример #1
0
        private static void TryAddSquare(List <SquareCoordinate> ret,
                                         SquareCoordinate startingSquare,
                                         int newRank,
                                         int newFile,
                                         Board board,
                                         Color pieceColor,
                                         SquareInfluenceType availabilityType)
        {
            if (!IsValidPosition(newRank, newFile))
            {
                return;
            }

            var newSquare = new SquareCoordinate(newRank, newFile);

            switch (availabilityType)
            {
            case SquareInfluenceType.Control:
                ret.Add(newSquare);
                break;

            case SquareInfluenceType.Mobility:
                if (IsInPieceMobility(board, startingSquare, newSquare, pieceColor))
                {
                    ret.Add(newSquare);
                }
                break;

            default:
                throw new NotImplementedException();
            }
        }
Пример #2
0
        private static bool TryAddPieceGetIsLast(List <SquareCoordinate> ret,
                                                 SquareCoordinate startingSquare,
                                                 int newRank,
                                                 int newFile,
                                                 Board board,
                                                 Color pieceColor,
                                                 SquareInfluenceType availabilityType)
        {
            if (!IsValidPosition(newRank, newFile))
            {
                return(true);
            }

            TryAddSquare(ret, startingSquare, newRank, newFile, board, pieceColor, availabilityType);

            return(board.IsAnyPieceInSquare(new SquareCoordinate(newRank, newFile)));
        }
Пример #3
0
        internal static IEnumerable <SquareCoordinate> GetPawnAvailability(SquareCoordinate startingCoordinate, Board board, Color pieceColor, SquareInfluenceType availabilityType)
        {
            switch (availabilityType)
            {
            case SquareInfluenceType.Control:
                return(GetPawnControl(startingCoordinate, board, pieceColor));

            case SquareInfluenceType.Mobility:
                return(GetPawnMobility(startingCoordinate, board, pieceColor));

            default:
                throw new NotImplementedException();
            }
        }
Пример #4
0
        internal static IEnumerable <SquareCoordinate> GetKnightAvailability(SquareCoordinate startingCoordinate, Board board, Color pieceColor, SquareInfluenceType availabilityType)
        {
            var ret = new List <SquareCoordinate>();

            //Upper right, up
            var rank = startingCoordinate.Rank + 2;
            var file = startingCoordinate.File + 1;

            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);
            //Upper right, right
            rank = startingCoordinate.Rank + 1;
            file = startingCoordinate.File + 2;
            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);

            //Upper left, up
            rank = startingCoordinate.Rank + 2;
            file = startingCoordinate.File - 1;
            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);
            //Upper left, right
            rank = startingCoordinate.Rank + 1;
            file = startingCoordinate.File - 2;
            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);

            //Bottom right, bottom
            rank = startingCoordinate.Rank - 2;
            file = startingCoordinate.File + 1;
            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);
            //Bottom right, right
            rank = startingCoordinate.Rank - 1;
            file = startingCoordinate.File + 2;
            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);

            //Bottom left, bottom
            rank = startingCoordinate.Rank - 2;
            file = startingCoordinate.File - 1;
            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);
            //Bottom left, right
            rank = startingCoordinate.Rank - 1;
            file = startingCoordinate.File - 2;
            TryAddSquare(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType);

            return(ret);
        }
Пример #5
0
        internal static IEnumerable <SquareCoordinate> GetKingAvailability(King king, SquareCoordinate startingCoordinate, Board board, SquareInfluenceType availabilityType)
        {
            switch (availabilityType)
            {
            case SquareInfluenceType.Control:
                return(GetKingControl(startingCoordinate));

            case SquareInfluenceType.Mobility:
                return(GetKingMobility(king, startingCoordinate, board));

            default:
                throw new NotImplementedException();
            }
        }
Пример #6
0
        internal static IEnumerable <SquareCoordinate> GetLineAvailability(SquareCoordinate startingCoordinate, Board board, Color pieceColor, SquareInfluenceType availabilityType)
        {
            var ret = new List <SquareCoordinate>();

            //Upper line
            for (int i = 1; i < 8; i++)
            {
                var rank = startingCoordinate.Rank + i;
                var file = startingCoordinate.File;
                if (TryAddPieceGetIsLast(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType))
                {
                    break;
                }
            }
            //Bottom line
            for (int i = 1; i < 8; i++)
            {
                var rank = startingCoordinate.Rank - i;
                var file = startingCoordinate.File;
                if (TryAddPieceGetIsLast(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType))
                {
                    break;
                }
            }
            //Right line
            for (int i = 1; i < 8; i++)
            {
                var rank = startingCoordinate.Rank;
                var file = startingCoordinate.File + i;
                if (TryAddPieceGetIsLast(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType))
                {
                    break;
                }
            }
            //Left line
            for (int i = 1; i < 8; i++)
            {
                var rank = startingCoordinate.Rank;
                var file = startingCoordinate.File - i;
                if (TryAddPieceGetIsLast(ret, startingCoordinate, rank, file, board, pieceColor, availabilityType))
                {
                    break;
                }
            }

            return(ret);
        }