Project Description
My first-ever pygame project — kept here as a learning artifact. A local 1-or-2-player platformer where one player is the vampire and the other the peasant, with the roles randomised each round.
Note on assets: the code and game logic are mine, but most assets (art, music, sound) are unlicensed placeholders I collected when I was starting out. My later projects use properly-licensed CC0 assets. Please don't reuse the assets here.

Gameplay
- In every round, one player becomes the vampire and the other a peasant, chosen randomly.
- The vampire is faster and wins by catching/touching the peasant.
- Only the peasant can fire bullets.
- 1-player mode pits you against a built-in AI opponent with separate vampire / peasant behaviours.
Screenshots
| Menu | Level select | Round in progress |
|---|---|---|
![]() |
![]() |
![]() |
Controls
| Action | Player 1 | Player 2 |
|---|---|---|
| Move | Arrow keys | WASD |
| Jump | Up arrow | W |
| Fire | Right Ctrl | Space |
In 1-player mode you control both keysets and play against the AI.
Requirements
- Python 3.12+
- pygame-ce (resolved automatically from
pyproject.toml/uv.lock) - uv (optional but recommended)
Running
git clone --recurse-submodules https://github.com/umutcanekinci/hunted.git
cd hunted
uv sync
uv run python __main__.py
If you forgot --recurse-submodules: git submodule update --init.
Without uv: pip install . then python __main__.py.
Project layout
__main__.py Entry point — injects src/ + src/pygame_core/ into sys.path
src/game.py Game class — state machine over menu / level-select / game
src/world.py GameWorld dataclass (platforms, bullets, window dims)
src/entities.py Player, Platform, Projectile
src/combat.py Bullet physics + round transitions
src/input_handler.py KeyboardInputHandler + AIInputHandler protocols
src/menu.py Main-menu drawing + button states
src/renderer.py Level-select + in-game drawing
src/audio.py Menu / game music
src/cursor.py Custom multi-state cursor
src/settings.py Physics, combat, colors, and 3 level layouts
src/pygame_core/ Engine submodule (used only for Application + Mouse + GameObject)
assets/ Images and sounds
See CLAUDE.md for the full architecture overview.
Author
Umutcan Ekinci — umutcannekinci@gmail.com
See also the contributors.
License
The code in this repository is licensed under the MIT License — see the LICENSE file.
The assets (images, audio, fonts) are not covered by that license. They are placeholders gathered from various third-party sources during my first project, before I understood asset licensing, and are not licensed for reuse or redistribution. If you fork this repo, swap them for your own or for properly-licensed alternatives (e.g. Kenney, CC0).


