Ejemplo n.º 1
0
        public Piece PlayMove(Position origin, Position destiny)
        {
            Piece piece = chessboard.RemovePiece(origin);

            piece.AddMovesQuantity();
            Piece pieceCapture = chessboard.RemovePiece(destiny);

            chessboard.InsertPiece(piece, destiny);

            if (pieceCapture != null)
            {
                piecesCaptured.Add(pieceCapture);
            }

            //Special play small Castle
            if (piece is King && destiny.column == origin.column + 2)
            {
                Position originRook  = new Position(origin.line, origin.column + 3);
                Position destinyRook = new Position(origin.line, origin.column + 1);
                Piece    rook        = chessboard.RemovePiece(originRook);
                rook.AddMovesQuantity();
                chessboard.InsertPiece(rook, destinyRook);
            }

            //Special play big Castle
            if (piece is King && destiny.column == origin.column - 2)
            {
                Position originRook  = new Position(origin.line, origin.column - 4);
                Position destinyRook = new Position(origin.line, origin.column - 1);
                Piece    rook        = chessboard.RemovePiece(originRook);
                rook.AddMovesQuantity();
                chessboard.InsertPiece(rook, destinyRook);
            }

            //Special play En Passant
            if (piece is Pawn)
            {
                if (origin.column != destiny.column && pieceCapture == null)
                {
                    Position positionPiece;

                    if (piece.color == Color.White)
                    {
                        positionPiece = new Position(destiny.line + 1, destiny.column);
                    }
                    else
                    {
                        positionPiece = new Position(destiny.line - 1, destiny.column);
                    }

                    pieceCapture = chessboard.RemovePiece(positionPiece);
                    piecesCaptured.Add(pieceCapture);
                }
            }

            return(pieceCapture);
        }