Hi

I tried to build a pinball once, and I never made it because of the collisions problems. Sometimes the ball rolled fine, sometimes it went through walls... Now I've been thinking this more, but anyway, here is how I would do it now:

The main ideas has already been discussed:
- have a bounding rect for your sprite, or another shape like circle for a ball but it costs more time to calculate.
- have a loop which tests whether you collided something or not.

But for my pinball I had other problems:
- walls can be VERY thin, thus allowing the ball to get through them very easily
- walls can have random angles

So I had to find maths formula. Actually I changed the loop system, and I replaced it with the calculation of the intersection between two segments: [AB], where A is the ball position before it moves, and B the ball position after it moved, and [CD] which is the segment symbolizing the wall.
This can handle every angle and "go through" issue.

But then you have to figure out what to do with the moving sprite, so as to prevent it from going through the wall, AND to prevent it from being stuck. This is done by stopping the sprite right before the collision, as with the loop method. It's not too hard to find this position if you know [AB] and P where P is the collision point.
Then you need to modify the speed. It's hard, because it depends on the collision angle. For a platform game, you don't want the player to be stopped whenever he collides something, as he always collide the ground when walking.
But I have no solution for these problems.

It might be interesting to discuss this in a tutorial if you manage to use it. I realize that I don't really help here, I just highlight some possible collision problems