due on February 6th, 2027
For this assignment you can either pick one of the two provided specifications or come up with your own. While you are free to come up with a topic for this assignment, doing so requires you to put together a specification similar to the ones provided and get my approval. The specification doesn't have to be bulletproof, but it must contain a bullet list of goals (with points to score) at the bottom which can be checked / evaluated. You can also adjust one of the provided specifications.
You are required to work in teams, and the team size has to correspond to the amount of work (features and their complexity) of the topic. The provided specifications correspond to a team size of 3, which is also the preferred size.
You are allowed to use:
- C++ standard library
- C standard library (as fallback)
- Boost
- SDL
- GLFW
- GLM
- SFML
- Vulkan / Vulkan-Hpp
- Qt
- ImGui
- ncurses
- OpenAL
- Glaze / nlohmann/json / RapidJSON
- RapidYAML
- Assimp
- stb-image
- Ogg / Vorbis / Opus
- Tiled / tileson
- OpenSSL
- SQLite
- Catch2
- Google Test
- Google Benchmark
- spdlog / plog
- fmt
- AngelScript
- Lua / sol2
- cereal
- protobuf
- Font Chef
Feel free to ask me about other libraries / tools, in most cases that should not be a problem. However, I will not approve full game engines for game projects, as the architecture design and implementation of the engine is a core learning outcome.
Your application should work on Linux (64-Bit) and Windows (64-Bit), unless there is a specific reason why it cannot be cross-platform.
Some fixed constraints (you must adhere to these):
- Use git for version control; the full git history must remain available.
- Use CMake as the build system.
- Use ClangFormat to automatically format your code using the provided
.clang-formatconfiguration. - Use vcpkg for package management.
- Follow the AI Policy outlined in the lecture introduction.
Send me an email with your team composition and your specification as early as possible. Use the following link and subject line:
Submission works by giving me access to your git repository, and tagging a version. Include the tag I should check with each submission in your email. If your git repo is private, include an invitation with your email. Ensure that your repo is and remains accessible for at least 2 weeks after the submission date.
Submit a non-final version of your project around 2 weeks before the final deadline.
I will verify that your project builds on my test system(s) and let you know if I run into any issues.
Use the following link, again replacing XX with your team number.
Verify that the tagged version is working.
Use the following link, again replacing XX with your team number.
Include your specification in the repo, even if it was initially provided with the course material. Also include a file contributions.md that succinctly lists, for each team member, their core contributions, with file references for the top 3. E.g.:
Peter Thoman:
- Enemy combat AI -
src/enemies/combat_ai.[hpp/cpp] - Inventory management -
src/core/inventory.[hpp/cpp],src/ui/inventory.[hpp/cpp] - ECS dispatch -
src/ecs/ecs.cpp:250-500 - Minimap
- Sound effects
John Doe:
- ...