public Piece Move(Position source, Position target)
        {
            Piece p = Board.RemovePiece(source);

            p.IncreaseMove();
            Piece capturedPiece = Board.RemovePiece(target);

            Board.PlacePiece(p, target);
            if (capturedPiece != null)
            {
                CapturedPieces.Add(capturedPiece);
            }

            // #specialMove kingside Castling
            if (p is King && target.Column == source.Column + 2)
            {
                Position sourceR = new Position(source.Row, source.Column + 3);
                Position targetR = new Position(source.Row, source.Column + 1);

                Piece R = Board.RemovePiece(sourceR);
                R.IncreaseMove();
                Board.PlacePiece(R, targetR);
            }

            // #specialMove queenside Castling
            if (p is King && target.Column == source.Column - 2)
            {
                Position sourceR = new Position(source.Row, source.Column - 4);
                Position targetR = new Position(source.Row, source.Column - 1);

                Piece R = Board.RemovePiece(sourceR);
                R.IncreaseMove();
                Board.PlacePiece(R, targetR);
            }

            // #specialMove EnPassant
            {
                if (p is Pawn && source.Column != target.Column && capturedPiece == null)
                {
                    Position posP;
                    if (p.Color == Color.White)
                    {
                        posP = new Position(target.Row + 1, target.Column);
                    }
                    else
                    {
                        posP = new Position(target.Row - 1, target.Column);
                    }

                    capturedPiece = Board.RemovePiece(posP);
                    CapturedPieces.Add(capturedPiece);
                }
            }

            return(capturedPiece);
        }