Minimalist, scene-based Pong-like game with a CPU opponent, built on top of mini-arcade-core and the native SDL2 backend.
Deja Bounce is Milestone 1 of a small game that will later evolve into something weirder (time loops, horror vibes, ARG hooks). For now, it’s a clean, focused Pong implementation that doubles as a reference game for the mini-arcade-core framework.
- 🎮 Playable Pong clone
- Two paddles, ball, walls, score.
- Simple main menu:
Start Game→Quit.
- 🧠 CPU opponent
- CPU paddle tracks the ball with a max speed.
- Difficulty controlled by paddle speed and (later) reaction/prediction tweaks.
- 🧍 vs 🤖 Game modes
- Player vs CPU.
- (Optional) CPU vs CPU “attract mode” – handy for tests / menu idle.
- ⚙️ Configurable rules
- First to N points wins (N is configurable).
- Win screen with option to restart or go back to menu.
- 🧱 Velocity-based movement
- No magic numbers; paddles & ball use velocities.
- Classic Pong bounce:
- Invert X velocity on paddle / vertical wall collision.
- Slight variation based on impact position on the paddle.
- Engine / Core:
mini-arcade-core - Native backend:
mini-arcade-native-backend(C++ / SDL2 / pybind11) - Language: Python 3.9–3.11
- Build: PEP 621
pyproject.toml+setuptools - CI: GitHub Actions (lint + tests on 3.9 / 3.10 / 3.11, Slack notifications)
git clone https://github.com/<your-org>/deja-bounce.git
cd deja-bouncepython -m venv .venv
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # WindowsFor local development (includes dev tools like pytest, black, etc.):
pip install --upgrade pip
pip install -e .[dev]Note:
mini-arcade-native-backenduses SDL2. If you are installing from source on Linux, you may need the SDL2 development package, e.g.:pip install --upgrade pip pip install -e .[dev]
If you only want to play (once the project is on PyPI):
pip install deja-bounceOnce installed, you can run Deja Bounce via the console script:
deja-bounceOr directly via Python:
python -m deja_bounce.mainDepending on your local setup, there may also be a manage.py helper:
python manage.py