Ping Pong — The Desktop Chaos Edition
A fast, minimal, and slightly unhinged Electron-based Ping Pong game made with HTML, CSS, and JavaScript. Born from a random challenge at the Kulturelle Landpartie.
The Story Behind Ping Pong
This project wasn’t planned.
I was out with my dad at something called the Kulturelle Landpartie — a massive arts and creativity festival scattered across the entire Wendland, where I live — when we saw someone showing off a simple retro ping pong setup.
My dad looked at me, grinned, and said, “You could make that, right?”
Challenge accepted.
A few late nights, too many snacks, and one questionable use of Electron later, Ping Pong — The Desktop Chaos Edition was born. It’s part nostalgia, part stubbornness, and entirely powered by caffeine and spite.
What It Is
Ping Pong is a clean-coded, zero-dependency (except Electron) two-player game that runs on literally anything with Node.js installed.
No game engines, no Unity bloat, no random npm nightmares — just raw HTML, CSS, and JavaScript doing their thing.
You can run it directly in your browser, or package it up as a desktop app that screams “I was made in a moment of chaotic inspiration.”
⚡ Features
- 🧱 Classic 2-player gameplay
- 🖥️ Runs as both a desktop app (Electron) and in-browser
- ⚙️ Smooth paddle physics with hand-written collisions
- 🎵 8-bit style programmatic sounds and looping background music
- 💾 No external dependencies — just Node, Electron, and regret
- 💥 Fully cross-platform (Windows, macOS, Linux)
- 🧩 Customizable ball speed, paddle size, and score limits
- 🎨 Crisp pixel-perfect visuals using pure CSS
- 🧃 Absolutely no reason to exist — but it does anyway
🧠 Controls
| Player | Move Up | Move Down |
|---|---|---|
| 🟦 Left Paddle | W | S |
| 🟥 Right Paddle | ↑ | ↓ |
Reset Game: R
Quit (Electron app): Esc
Pro tip: Don’t play against yourself unless you enjoy existential crises.
🚀 Setup
You’ll need:
git clone https://github.com/itsnony/ping-pong.git
cd ping-pong
npm install
npm start
Boom — game time.
If you’re feeling brave:
npm run build
Now you’ve got a shiny desktop executable to flex at parties.
⚙️ Customization
You can tweak everything inside main.js and script.js.
Don’t like the ball speed? Change it.
Want infinite paddles? Be my guest.
It’s your chaos now.
const ballSpeed = 6; // Make it stupid fast if you hate peace
const paddleSpeed = 5; // Adjust to your reaction time
const maxScore = 10; // Or remove it entirely, who needs limits
🧩 Project Structure
ping-pong/
├── index.html # Main UI
├── style.css # Game styling
├── main.js # Electron entry point
├── renderer.js # Renderer process
├── game.mp3 # In-game music
├── menu.mp3 # Menu music
├── pressstart.ttf # Retro font
└── package.json # Config & scripts
💡 Why Electron?
Because why not.
It’s overkill, it’s unnecessary, and that’s exactly why it’s fun.
You get all the flexibility of web dev but packaged into a shiny desktop app your dad can actually open without asking where the “browser thingy” went.
🪄 Future Plans
- Add AI mode (because playing alone isn’t therapy)
- Implement scoreboards and replays
- Touch and mobile controls
- Maybe… just maybe… network play
⚔️ Final Thoughts
Ping Pong started as a joke and turned into a full little universe of bouncing pixels and dad-induced chaos.
It’s not a framework, not a product — just proof that boredom and caffeine can turn any idea into code.
And honestly?
It’s still one of the most fun things I’ve ever built.