⚠️ SIDE PROJECT + WORK IN PROGRESS⚠️
A simplified, Magic‑inspired card game prototype implemented in C++ to demonstrate clean architecture, optimization, and Agile development practices. This project showcases deck building, card draws with limited redraws, and a basic combat loop, first in console and then with Raylib for rendering.
My main goal with this project is to refresh my knowledge of C++, familiarise myself with Google code formatting, write clean code and optimise features. I chose to build a card game because its mechanics are similar to those of a state machine. This means that I have to focus on how parts of the code work together and on the architecture. Compared to a software build with QT, I preferred the card game because I can start from scratch with no framework needed initially. Another of my goals is to familiarise myself with project development tools and company/team workflows.
Yes, I'm working alone... But if you don't have a team/job, just pretend you have one until you do have one, right ?
- Deck Building: Pick card colors and land counts to assemble a 40‑card deck.
- Redraw Mechanic: Draw an opening hand of 40 cards and redraw up to 2 times.
- Combat Loop: Simple attacker declaration and damage assignment between two players.
- Modular Design: Core game logic decoupled from rendering.
- Console First: Rapid iteration via terminal before integrating Raylib.
- Agile Workflow: Branch-per‑issue, Jira‑linked commits, Kanban board.
- core/: Game model and engine (cards, deck, game state, combat resolver).
- app/: Application entrypoint and high‑level game loop.
- render/: Raylib wrappers and UI glue (added after console prototype).
- tests/: Unit tests for deck logic, shuffling, and combat.
- utils/: Helper functions that are re-used in different par of the code.
- external/: Third‑party dependencies as submodules.
.
├── CMakeLists.txt
├── README.md
├── assets // All the game assets
├── external // All external lib (as submodules), such as Raylib
├── source // Main code for the game
│ ├── app // Game object with the main.cpp
│ ├── core // All the cores element and features
│ ├── render // All visual component
│ └── utils // All helper functions
└── tests // Unit testing
I use Excalidraw to create quick schematics of code logic, whether for game or architecture logic.
I always do this because I think it helps me visualise the core logic and how things work together.

This diagram aims to break down every step of the 'Setup Phase' of the game, during which players create their decks.
I'm not used to these tools as I've never had the opportunity to work with them, even though I've had multiple opportunities to work with AGILE and SCRUM development.
So, since I'm working alone on a side project, I've divided my project into tasks and sprints and I don't mind not having deadlines.

Here is the first sprint for the CMD prototype (EPIC), which consists of two stories representing the setup and initial functionalities. One of these is made up of sub-tasks; the goal is to complete the setup phase.
I also try to automate some of my work by setting up a basic workflow to mimic how teams are organised, and by linking my Jira project with my GitHub repository.
This means that every "Story" or "Task" creates a new branch.

- C++23 compiler
- CMake ≥ 3.31
- Git for version control
Distributed under the MIT License. See LICENSE for details.