Here's the code for my player update function from Glowing Rocks from Outer Space - an Asteroids clone:
// left and right arrow to rotate
IF KEY(203) THEN DEC player.angle, player.rotationSpeed
IF KEY(205) THEN INC player.angle, player.rotationSpeed
// keep angle within bounds
IF player.angle > 360 THEN DEC player.angle, 360
IF player.angle < 0 THEN INC player.angle, 360
// up arrow to thrust
IF KEY(200)
// calculate angle to thrust at
player.vectorX = COS(player.angle)*acceleration
player.vectorY = SIN(player.angle)*acceleration
// add new direction vector to current velocities
player.velocityX = player.velocityX + player.vectorX
player.velocityY = player.velocityY + player.vectorY
ELSE
// apply friction to slow down
player.velocityX = player.velocityX/friction
player.velocityY = player.velocityY/friction
ENDIF
// cap maximum spped
IF player.velocityX > topSpeed THEN player.velocityX = topSpeed
IF player.velocityY > topSpeed THEN player.velocityY = topSpeed
IF player.velocityX < -topSpeed THEN player.velocityX = -topSpeed
IF player.velocityY < -topSpeed THEN player.velocityY = -topSpeed
// update player position
player.x=player.x+player.velocityX
player.y=player.y+player.velocityY
As you can see, the left and right arrow keys change the angle of the ship, but in your case you will need to do this by calculating reflections and bounce angles as the ball hits objects on the pinball table.
The up arrow gives a fixed amount of thrust (acceleration = 0.1) and that's fed into the player vectors (which works out how much of the thrust is in the X direction, and how much is in Y).
If the player isn't thrusting, then the velocity is reduced by the friction amount (friction = 1.0045).
Finally I cap the player speed so the ship doesn't go to fast, and then I update its X and Y postions ready for drawing.
The complete source code is available
here if you want to see how it all works together.
Hope it helps a bit
