Back to Projects

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.

Electron JavaScript Game Node.js Desktop
Visit Project →

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

PlayerMove UpMove Down
🟦 Left PaddleWS
🟥 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:

  • Node.js (v18+ recommended)
  • npm
  • Optional: a sense of humor
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.