Physics in Pygame is built from Euler integration (acceleration updates velocity, velocity updates position), gravity as a constant downward acceleration, bouncing via a restitution coefficient, and projectile motion decomposed into x/y velocity components with trigonometry.
1-B 2-A 3-B 4-A | 5 downward 6 swaps 7 = vel += acc * dt; pos += vel * dt 8 = restitution < 1 removes a fraction of velocity (energy) on every bounce, so each successive bounce reaches a lower peak height than the one before 9 = cos() for the x-component (vx = speed*cos(angle)), sin() for the y-component (vy = speed*sin(angle)) | 10 = apply gravity + bounce-off-screen-edges (restitution) to each ball every frame for the world collision, then separately check each pair of balls for overlap and apply the elastic collision (velocity swap along the collision axis) formula — gravity/bounce handles the world, the pairwise elastic collision check handles ball-to-ball impacts