Пример #1
0
        internal Board GetBoardAfterFirstKingCastlingMove(MovingFigure king)
        {
            var nextBoardState = new Board(Fen);

            nextBoardState.SetFigureAt(king.From, Figure.None);
            nextBoardState.SetFigureAt(king.To, king.Figure);
            nextBoardState.GenerateNextFen();
            return(nextBoardState);
        }
Пример #2
0
        private void UpdateCastlingData(MovingFigure mf)
        {
            var targetColor            = mf.Figure.GetColor();
            var currentCastlingFenPart = (targetColor == Color.White) ? WhiteCastlingFenPart : BlackCastlingFenPart;

            if (string.IsNullOrWhiteSpace(currentCastlingFenPart))
            {
                return;
            }

            switch (mf.Figure)
            {
            case (Figure.BlackRook):
            {
                if (mf.From.X == 7)
                {
                    BlackCastlingFenPart = (BlackCastlingFenPart.Contains('q')) ? "q" : "";
                }
                else
                if (mf.From.X == 0)
                {
                    BlackCastlingFenPart = (BlackCastlingFenPart.Contains('k')) ? "k" : "";
                }
                break;
            }

            case (Figure.WhiteRook):
            {
                if (mf.From.X == 7)
                {
                    WhiteCastlingFenPart = (WhiteCastlingFenPart.Contains('Q')) ? "Q" : "";
                }
                else
                if (mf.From.X == 0)
                {
                    WhiteCastlingFenPart = (WhiteCastlingFenPart.Contains('K')) ? "K" : "";
                }
                break;
            }

            case (Figure.WhiteKing):
            {
                WhiteCastlingFenPart = string.Empty;
                break;
            }

            case (Figure.BlackKing):
            {
                BlackCastlingFenPart = string.Empty;
                break;
            }
            }
        }
Пример #3
0
        public Board Move(MovingFigure mf)
        {
            var nextBoardState = new Board(Fen);

            nextBoardState.SetFigureAt(mf.From, Figure.None);
            nextBoardState.SetFigureAt(mf.To, mf.Promotion == Figure.None ? mf.Figure : mf.Promotion);

            if (MoveColor == Color.Black)
            {
                nextBoardState.MoveNumber = MoveNumber + 1;
            }

            nextBoardState.MoveColor = MoveColor.FlipColor();
            nextBoardState.UpdateCastlingData(mf);
            nextBoardState.GenerateNextFen();
            return(nextBoardState);
        }
Пример #4
0
        public bool IsCheckTo()
        {
            Square       targetKingPosition = FindTargetKingPosition();
            var          move = new Move(this);
            MovingFigure currentMovingFigure;

            foreach (var figureOnSquare in YieldFigures())
            {
                currentMovingFigure = new MovingFigure(figureOnSquare, targetKingPosition);
                if (move.CanMove(currentMovingFigure))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #5
0
        public Board Castle(MovingFigure king, MovingFigure rook)
        {
            var nextBoardState = new Board(Fen);

            nextBoardState.SetFigureAt(king.From, Figure.None);
            nextBoardState.SetFigureAt(king.To, king.Figure);
            nextBoardState.SetFigureAt(rook.From, Figure.None);
            nextBoardState.SetFigureAt(rook.To, rook.Figure);

            if (MoveColor == Color.Black)
            {
                nextBoardState.MoveNumber = MoveNumber + 1;
            }

            nextBoardState.MoveColor = MoveColor.FlipColor();
            nextBoardState.UpdateCastlingData(king);
            nextBoardState.GenerateNextFen();
            return(nextBoardState);
        }
Пример #6
0
        public bool IsCheckAfterMove(MovingFigure movingFigure)
        {
            var after = Move(movingFigure);

            return(after.IsCheckTo());
        }