A complete 2D knife-throwing arcade game built from scratch on raw Java Swing/AWT, with a hand-rolled game loop, collision, particles, sound, and a persistent shop.

I built KnifeThrow by hand in grade 12, years before AI could write code for you, roughly 5,000 lines of raw Java with no game engine underneath. Every subsystem a player takes for granted, the game loop, collision, rendering, audio, had to be designed from scratch on Swing and AWT.
The core is a fixed-step loop on a 10ms Swing Timer, keeping movement and physics consistent regardless of how fast a machine renders, with antialiased Graphics2D drawing on top. Collision is rectangle-intersection between thrown knives and targets; impacts kick off a particle system and screen shake, and WAV effects play through Java's AudioSystem and Clip. A custom pixel font is loaded at runtime and registered with the local GraphicsEnvironment.
The progression layer is the ambitious part. Player profiles (name, high score, control scheme, selected knife) persist to disk and gate a knife shop that unlocks blades at score milestones. A signature EMP ability charges as you score, then runs a Euclidean proximity check to flip nearby enemy knives back at their source.
After the original single-file build, the game was refactored into eight documented classes under a Maven-style source layout, with generated Javadoc and a UML class diagram.