Start

Start

Created on May 19, 2020

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

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).