Java Colisión 2D?

Hola chicos, estoy haciendo un juego Java 2D y estoy tratando de descubrir cómo hacer un buen código de colisión. Actualmente estoy usando el siguiente código:

    public void checkCollision() {
    Rectangle player_rectangle = new Rectangle(player.getX(),player.getY(),32,32);

    for(Wall wall : walls) {

        Rectangle wall_rectangle = new Rectangle(wall.getX(), wall.getY(), 32,32);

        if (player_rectangle.intersects(wall_rectangle)) {
            Rectangle intersection = (Rectangle) player_rectangle.createIntersection(wall_rectangle);

            if (player.xspeed > 0) {
                player.x -= intersection.getWidth();
            }

            if (player.yspeed > 0) {
                player.y -= intersection.getHeight();
            }

            if (player.xspeed < 0) {
                player.x += intersection.getWidth();
            }

            if (player.yspeed < 0) {
                player.y += intersection.getHeight(); 
            }

            Print(Integer.toString(intersection.width) + ", " + Integer.toString(intersection.height));

        }

    }

}

Con este código funciona bien si presiona un botón, pero si presiona hacia abajo y hacia la izquierda, por ejemplo, el jugador volará en una dirección aleatoria.

Aquí hay una foto de los tipos de mapas que tengo:

Respuestas a la pregunta(1)

Su respuesta a la pregunta