ZAPPY is a network game about managing a world and its inhabitants, where several teams confront each other on a tile map containing resources. The winning team is the first one where at least 6 players reach the maximum elevation. To do so, a team of player AIs is launched on a board representing their planet, communicating –and sabotaging other teams– together to achieve victory.
- Custom encrypted communication algorithm
- Fully autonomous agent controlled via commands sent to the server
- Connects using team name and adapts based on server world size and team slots
- Parses look, inventory, and broadcast messages for environment awareness
- Movement, resource collection, reproduction, and elevation
- Authenticates with reserved GRAPHIC team
- Displays a real-time 2D map of the world with OpenGL
- Receives push-based updates for world state and tile modifications
- Renders players, resources, and elevation activities
- Optimized to react to event-driven server messages for minimal redraws
- Manages a toroidal 2D world grid with configurable size
- Handles TCP client connections, for multiple clients and teams
- Spawns resources across the grid periodically, using fixed densities
- Maintains synchronized game state including players, resources, and eggs
- Validates elevation rituals and synchronizes level-ups
- Manages broadcast propagation with directional awareness
- Enforces client communication protocol and command rate limits
- Executes and times all player actions
- gcc
- python3
- make
- Nix (optional, for reproducible builds via
flake.nix)
.
├── ai/
│ ├── legacy/...
│ └── ...
├── gui/
│ └── ...
├── server/
│ └── ...
├── scripts/
│ ├── align_columns.py
│ ├── check_commit_message.py
│ ├── discard_headers.py
│ └── insert_headers.py
├── tests/
│ ├── ai/...
│ ├── gui/...
│ ├── server/...
├── .clang-format
├── .clang-tidy
├── .gitignore
├── configure-venv.sh
├── Makefile
├── flake.nix
├── flake.lock
├── pyproject.toml
├── assignment.pdf
├── zappy_gui_protocol.pdf
├── zappy_ref-v3.0.0.tgz
└── .github/
└── workflows/
└── ci.yml-
Clone the repository:
git clone --recurse-submodules <repository-url> cd <repository-directory>
-
Build the project:
make
- Use
make reto force a rebuild. - Use
make cleanto remove object files. - Use
make fcleanto remove all build artifacts and binaries.
- Use
-
(Optional) Using Nix:
nix develop make
Run the server shell with:
./zappy_server -p port -x width -y height -n name1 name2 ... -c clientsNb -f freq-p port: Port number.-x width: Width of the world.-y height: Height of the world.-n name1 name2 ...: Name(s) of the allowed team(s).-c clientsNb: Number of authorized clients per team.-f freq: Reciprocal of time unit for execution of actions.
Note
The team name GRAPHIC is reserved for the GUI to authenticate itself as such to
the server.
Run the server shell with:
./zappy_gui -p port -h machine-p port: Port number.-h machine: Hostname of the server.
Run the server shell with:
./zappy_ai -p port -n name -h machine-p port: Port number.-n name: Name of the team.-h machine: Name of the machine; localhost by default.
-
Coverage: Run:
make cov
(To be completed: Add test instructions and coverage details.)
| Yohann B. | Gabriel H. | Julien B. | Valentin R. | Hugo H. |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
For more details, see assignment.pdf.




