Example #1
0
        private (bool Castled, string Error) CastleQueenSide(Board.Board board)
        {
            KeyValuePair <int, int> rookPos, rookMove, kingMove;

            if (this.Color == PieceColorEnum.Black)
            {
                rookPos  = board.ConvertNotationForMove("a8");
                rookMove = board.ConvertNotationForMove("d8");
                kingMove = board.ConvertNotationForMove("c8");
            }
            else
            {
                rookPos  = board.ConvertNotationForMove("a1");
                rookMove = board.ConvertNotationForMove("d1");
                kingMove = board.ConvertNotationForMove("c1");
            }

            // can't castle if it puts in check. run a simulation
            King kingCopy = (King)board.DeepClone(this);

            Board.Board simBoard = (Board.Board)board.DeepClone(board);
            simBoard.MovePiece(kingCopy, kingMove.Key, kingMove.Value);
            if (!kingCopy.IsInCheck(simBoard))
            {
                return(false, "castling results in a check");
            }

            // castle
            Rook rook = (Rook)board.Instance[rookPos.Key, rookPos.Value];

            board.MovePiece(rook, rookMove.Key, rookMove.Value);
            board.MovePiece(this, kingMove.Key, kingMove.Value);

            return(true, string.Empty);
        }
Example #2
0
        private void GetAvailableMove(Board.Board board, List <KeyValuePair <int, int> > availableMoves, int rowInterval, int colInterval)
        {
            var row    = this.CurrentLocation_x + rowInterval;
            var column = this.CurrentLocation_y + colInterval;

            if (board.IsInRange(row, column))
            {
                var piece = board.Instance[row, column];
                if (piece == null || (piece != null && piece.Color != this.Color))
                {
                    var kingCopy = (King)board.DeepClone(this);
                    var simBoard = (Board.Board)board.DeepClone(board);
                    simBoard.MovePiece(kingCopy, row, column);
                    if (!kingCopy.IsInCheck(simBoard))
                    {
                        availableMoves.Add(new KeyValuePair <int, int>(row, column));
                    }
                }
            }
        }