Key Ideas
1Euler Integration. Every physics step: vel += acc*dt, then pos += vel*dt — always update velocity from acceleration before position from velocity.
2Gravity. A constant downward acceleration (e.g. Vector2(0,980) px/sec²) added to acc.y every frame before integrating — nothing more exotic than that.
3Momentum. Mass × velocity. A heavier or faster object carries more momentum into a collision.
4Elastic Collisions (equal mass). Swap the velocity components along the axis connecting the two objects' centers — the simplest, most common case in games.
5Restitution & Bouncing. Reverse the velocity component perpendicular to the surface, scaled by a 0–1 restitution value; each bounce loses a little energy.
6Projectile Motion. vx=speed*cos(angle), vy=-speed*sin(angle) — negative because Pygame's y-axis increases downward — then let gravity take over.