Food Fall
Move the plate, catch what's falling. Burgers and doughnuts are points, the fire costs you a life, and you only get three.
- Arcade
- Reflex
The simplest game in here, and the one that works best on a phone — every sprite is an emoji, so there is no art to load and nothing to go missing.
The bug that made it look finished
The original had a game loop gated like this:
useEffect(() => {
if (!gameStarted || !containerWidth) return;
// ...falling food
}, [gameStarted, plateX, containerWidth]);
containerWidth was only ever assigned inside handleMouseMove. So after
pressing Start, nothing fell — not until you happened to move the mouse, at
which point the whole game sprang into life at once. On a first play that
reads as “broken”, and it’s invisible in testing because you’re already
holding the mouse.
The port measures the stage on load instead. Start means start.
Other changes
- Delta timing. The original stepped a fixed number of pixels on a 50ms
interval. This uses
requestAnimationFramewith a time delta, so it falls at the same speed on a 60Hz and a 120Hz display. - One
Audioper effect, reused. The original constructed a new one on every single catch. - The plate is the cursor.
cursor: noneover the stage, which the original also did — worth keeping, it’s the whole feel of the thing. - Real restart. The original’s “Play Again” reset the score and then left the game stopped.
Arcade



