Two hundred balls and one cursor
Rigid bodies under gravity, with collisions resolved against a spatial grid.
Each ball carries only a position and a speed. Gravity adds a little downward speed every frame and the speed moves the ball, which is the whole of the falling. The interesting part is what happens when two of them meet: they are pushed apart and swap speed along the line joining their centres, the same conservation of momentum that decides a snooker break.
Heavier balls give up less of that speed than lighter ones, which is why the big ones shoulder the small ones aside instead of bouncing off them. Every contact is resolved several times per frame until the overlaps are gone, and that repetition is what lets a pile settle into a stable heap rather than jittering forever.
Checking every pair would mean forty thousand comparisons a frame at this count, so the balls are sorted into a grid of cells and each one only consults its nine neighbours. Your cursor is not a pointer but an obstacle with a radius: balls inside it are pushed out and pick up whatever speed it is carrying, so a fast sweep throws them and a slow one just parts the pile.