A turn-based tactical bot-programming game.
This project is an exploration of AI-assisted game development. The game itself involves programming a bot with a simple, BASIC-like scripting language (Hexa-Script) to compete against other scripted bots on a hexagonal grid.
This project is designed to be developed within a VS Code Dev Container.
- Ensure you have Docker and the VS Code "Dev Containers" extension installed. The container image ships with Python 3.11 and all required tooling (including
uv). - Open this project folder in VS Code.
- When prompted, click "Reopen in Container".
- The container will build, install all dependencies, and set up pre-commit hooks automatically.
If you prefer running locally, install Python 3.11+, uv, and execute uv pip install .[dev] to reproduce the development environment.
Run /develop-feature inside Windsurf for any end-to-end feature effort. The workflow enforces planning, implementation, validation, and finalization steps aligned with .windsurf/rules/.
Architectural changes must go through /propose-new-adr before editing constitutional documents. For documentation-only updates, /update-living-documentation remains available.
This project standardizes developer workflows with Task. List all available targets via task --list or run the high-value tasks below:
task game:runlaunches the renderer entrypoint (python -m hexa_core.main).task test:unitexecutes the fullpytestsuite.task test:unit:parallelruns spec-kit suites withpytest-xdistacross available CPUs.task test:unit:covexecutes the full suite with coverage reporting enabled.task test:specfocuses on thespec-kitdriven scenarios intests/spec/.task test:benchmarksruns the CodSpeed-backed performance suite (pytest --codspeed).task test:benchmarks:serialreplays CodSpeed benchmarks without xdist when debugging.task coverage:reportenforces the ≥85 % coverage threshold withpytest --cov.task lint:allruns Ruff, MyPy, and PyMarkdown in sequence.task audit:depsruns the hardenedpip-auditcheck (ignoring GHSA-4xh5-x5gv-qwph per policy).task security:auditdelegates totask audit:depsfor CI integration.task ci:checkchainstask lint:allandtask test:unitto mirror CI expectations.task ci:benchmarksexecutes the benchmark-only validation path.
These targets wrap the canonical uv commands to ensure consistency across agents and contributors. If a new workflow emerges, prefer adding a Taskfile entry before documenting a raw command.
Within VS Code, invoke Terminal → Run Task… → pymarkdown: scan active file to lint the current document.
The task surfaces findings through the Problems panel and reads the same .pymarkdown.json configuration used in CI.
This keeps IDE feedback aligned with automated checks.
This project follows a strict set of architectural principles, enforced by Windsurf rules. Key decisions are documented in docs/decisions.
- Entity-Component-System (ECS): Game logic is built around the
esperECS library. - Logic-Renderer Separation: The game engine (
src/hexa_core/engine) is a pure, deterministic Python module, completely decoupled from the Arcade-based renderer (src/hexa_core/renderer). - Event Bus: Communication from the engine to the renderer is handled via a simple publish/subscribe event bus.