- Create a buffer of same size as screen (or surface where are Your shapes). At each position it contains boolean whether there is sprite; then, check all "pixels" of user shape whether at their position is the sprite (by checking value of that boolean). Alternatively, You can create more sprites there by storing their ID instead of boolean; but this was case of 1 sprite.
- If user generated shape can be represented by sequence of lines, then You can check whether each such line crosses sprite. Since sprite has rectangular shape and user shape is a line just Look for "line rectangle intersection" ... (separating axes algorithm si one way to do it)
Approaches depend on what data structures You choose, whether they are bitmaps or vectors.
First approach can handle arbitrary complex shapes, is simple to implement but uses more memory. Actually You can reduce memory overhead by using compression and speed it up by using hierachical data strutures (octrees) ...
Second approach , is not so simple to implement but uses more processing power.
In each case measure if it matters. I would try to do first one because it is simpler to implement. Good luck. :)