The collision detection was fine, but the part that irritated me the most was the jumping. You could try adding a variable for vertical velocity, where it is constantly added to the player's vertical position unless there is a collision. When the player jumps, the velocity increases to make the player go up. The velocity goes down over time (to a minimum to avoid falling through objects) so that the player will eventually be pulled down. Just a suggestion.