à la rigueur, 3 monômes (dont 2 fléchés), 8 binômes.
2 Contraintes par rapport au
projet
Votre application doit être réalisée avec Visual Studio, CLion ou
Visual Studio Code.
Votre code doit contenir au moins une hiérarchie de classe.
Vous devrez montrer un diagramme UML des classes mises en place dans
votre jeu.
Votre code doit gérer correctement la mémoire.
Votre code doit contenir des tests unitaires faits avec
GoogleTest.
Votre code doit mettre en oeuvre au moins deux Design patterns.
Avant de blêmir, souvenez-vous que :
Tout au long de CSC4526, vous avez déjà utilisé 3 design patterns :
Factory qui vous a permis de créer différents types de
Shape,
Composite qui vous a permis de spécifier qu’un
Group était composé de Shape,
Prototype qui vous a servi à cloner vos objets dans
l’exercice “Outil de visualisation” ;
Lors d’UV précédentes, vous avez probablement expérimenté les
patterns Observer, Strategy ou State
(rafraîchissez-vous la mémoire avec cet
article), bien utiles dans le cadre du développement d’un jeu ;
Loïc JOLY considère que Singleton est un anti-pattern (voir
dans le Moodle
CSC4526 ses commentaires à ce sujet ; chercher “Quelques mots de
Loïc Joly au sujet du design pattern Singleton”).
Vous devez utiliser GIT tout au long de votre projet, en créant
votre projet sous github. Veillez à
donner accès à votre GIT à Loïc Joly, Philipp Schlehuber-Caissier et
Michel Simatic.
Votre code peut s’inspirer des Game programming
patterns, même si nous ne sommes pas sûrs que vous aurez le temps de
lire ce site pourtant passionnant.
Nous vous autorisons à utiliser des outils d’IA génératives
(cf. CI9). Toutefois, veillez à comprendre tout le code
généré par cette IA générative. Si nous constatons à la soutenance orale
du micro-projet que vous ne maîtrisez pas certaines sections du code,
nous considérerons que vous ne validez pas ce module.
3 Bibliothèques externes
Votre application doit être développée avec SFML ou Qt.
NB : Votre application ne peut pas être développée
avec :
Thor, car cette
extension de SFML n’a pas évolué depuis 3 ans et ne semble donc pas
compatible avec SFML 3.0.
Unreal Engine (même en
codant en C++ et non en Blueprint). En effet, le C++ Unreal Engine
présente des différences avec le C++ standard (par exemple, un
ramasse-miettes comme l’explique l’article “Unreal
C++ vs. Standard C++”) qui vous empêcherait de montrer dans votre
projet que vous avez acquis certaines compétences à la fin de ce
cours.
Godot et son binding C++, car
nous redoutons que la puissance de ce moteur vous empêche aussi de
montrer que vous avez acquis certaines compétences à la fin de ce cours
(notamment si vous pratiquez GDScript).
Par ailleurs, votre application doit intégrer au moins une
autre bibliothèque externe (que vous pouvez prendre ou non dans la liste
ci-dessous). Elles vous permettront d’aller encore plus loin dans la
réalisation de votre jeu :
Box2D : Moteur de physique 2D pour
les jeux. HelloWorldBox2D.zip est un
projet contenant un “Hello World” Box2D, compatible avec
cmake.
Dear ImGui, un outil
graphique utilisé notamment par Ubisoft (par exemple, dans Ghost
Reckon, en parallèle de leur moteur de jeu) pour permettre des
interactions en vue du debug de leur jeu. ExempleImguiSFML.zip
contient un exemple mixant SFML et Dear Imgui via le
binding avec
SFML.
Machine à états finis. Il existe de multiples bibliothèques :
Photon : Middleware de
communication pour les jeux. Ce
TP vous permet d’entrer dans Photon et vous fournit un exemple de
projet compatible avec cmake.
Parser XML : Comme vous l’avez expérimenté au cours des TPs CSC4526,
pugixml vous permet d’exploiter
aisément les données de configuration de votre jeu, stockées dans un
fichier au format XML. SampleGoogleTestPugixml.zip
est un projet contenant un exemple d’utilisation de pugixml , compatible
avec cmake.
Tiled map editor et tmxlite sa bibliothèque
d’exploitation en C++ pour construire des niveaux de jeu. Tmxlite_SampleSFML.zip est
un projet contenant l’exemple SFML de tmxlite,
compatible avec cmake.
ENet, couplé à Cereal (pour sérialiser les
données à échanger), est un logiciel de communication bas niveau adapté
au jeu vidéo. ENet_Cereal.zip
contient un exemple d’utilisation de ces deux bibliothèques avec un (ou
plusieurs) client(s) qui envoient des messages à un serveur chargé de
les renvoyer en écho.
A l’extrême rigueur (vu la taille de votre projet, ça semble un très
gros marteau pour écraser une mouche), vous pouvez utiliser SQLite, un (petit) moteur SQL pour
stocker des données en local. SQLite_example.zip est un projet
contenant un exemple SQLite, compatible avec cmake ;
attention : cet exemple ne compile actuellement que sous
Windows.
Si vous trouvez une autre bibliothèque externe intéressante, SVP,
postez ses références sur le Discord JIN4 pour la partager
avec vos collègues et pour que nous complétions la présente liste.
Vous pouvez aussi vous appuyer sur le corrigé de l’étape
3 de l’exercice “Fil rouge”. Vous aurez ainsi une base de départ de
jeu vidéo avec des mouvements d’objets et des animations.
Le fichier .gitignore est un fichier texte qui doit être
placé à la racine de votre projet. Il permet de spécifier les noms des
répertoires et les fichiers qui doivent être ignorées par GIT
(il n’y aura donc pas de suivi de version pour eux). Cf. cette documentation pour
plus d’informations.
Dans le cas de votre micro-projet, nous vous recommandons de créer un
tel fichier (avec un éditeur de texte) pour qu’il contienne au minimum
les lignes :
# Ignore directories used by CLion for project generation
.idea
cmake-build-debug
# Ignore directory used by Visual Studio for project generation
.vs
out
# Ignore directory used by Visual Studio Code for project generation
.vscode
build
Vous éviterez ainsi de stocker inutilement dans votre dépôt GIT des
informations liées à la construction de votre exécutable.
5.3 Bibliothèques
SFML
Jusqu’à présent, vous n’avez eu besoin que de la bibliothèque
graphique de SFML. Pour votre jeu, il est probable que vous
utiliserez également ses fonctions sons, réseau ou autre. Vous aurez
alors des erreurs à l’édition de liens, car il vous manquera des
définitions de fonctions SFML. Faites alors les opérations
suivantes :
Dans ./CMakeLists.txt, demandez la génération des
bibliothèques SFML dont vous avez désormais besoin en mettant
ON au niveau des lignes concernées dans :
Dans src/main/CMakeLists.txt, pour spécifier que votre
exécutable main utilise toutes les bibliothèques
SFML, ajoutez-les à la ligne
target_link_libraries() (NB : nous recommandons de ne
mettre que les bibliothèques SFML dont vous avez besoin :
ainsi, vous limitez la durée de l’édition de liens et la taille de votre
exécutable) :
Dans src/core/CMakeLists.txt, pour spécifier que vos
fichiers sources dans src peuvent référencer les fichiers
d’include de SFML, ajoutez sfml-graphics à la
ligne target_link_libraries() (a priori, il n’y a pas
d’autres bibliothèques à mentionner) :
Dans src/test/CMakeLists.txt, pour spécifier que votre
exécutable unitTests utilise toutes les bibliothèques
SFML, ajoutez-les à la ligne
target_link_libraries(unitTests...) (NB : nous recommandons
de ne mettre que les bibliothèques SFML dont vous avez besoin :
ainsi, vous limitez la durée de l’édition de liens et la taille de votre
exécutable):
5.4 Recommandations pour le
README.md de votre Github
Le fichier README.md de votre site Github doit au moins
contenir les informations suivantes :
Une petite description de votre application/jeu,
Un petit mode d’emploi pour utiliser votre application/jeu (en
particulier, les touches à utiliser),
Si possible, une ou plusieurs copies d’écran, voire un lien vers une
vidéo YouTube d’une session de jeu,
Une explication de comment générer le code de votre application
(n’hésitez pas à référencer la procédure Construire
un projet C++ avec cmake).
6 Prochaines étapes
02/06/2026 12h45-13h15 : Présentation du micro-projet
02/06/2026 14h30-17h45 :
14h30-16h45 : Travail en monôme/binôme/trinôme pour préparer
présentation de 16h45, avec aide de M. Simatic, si besoin.
16h45-17h45 : Présentation (5’) par les monômes/binômes/trinôme des
premières idées sur chaque projet (pas de slide, mais un texte fourni
sur Discord, cf. ci-dessous)
Planning
16h45 : Binôme 1
16h51 : Binôme 2
16h57 : Binôme 3
17h03 : Binôme 4
17h09 : Binôme 5
17h15 : Binôme 6
17h21 : Binôme 7
17h27 : Binôme 8
17h33 : Binôme 9
17h39 : Monôme
17h45
Contenu présentation (merci de fournir une synthèse sur Discord)
Prénom de chaque membre du binôme
Idées que vous avez purgé (cf. explications ci-dessous)
Grandes lignes de votre application (1-2’ maxi)
Lien avec le sujet
Si possible, quelles bibliothèques externes envisagez-vous
d’utiliser ?
Si possible, quelle utilisation d’IA générative(s) envisagez-vous
?
Difficultés pressenties
NB : c’est dans cette présentation que vous devez fournir un accès
GIT aux encadrants JIN4.
02/06/2026 - 22/06/2026 (Discord JIN4) : Assistance au développement
de votre projet
04/06/2026 matin : Salle A003-A004 disponible pour Hors
Présentiel
05/06/2026 matin : Salle A003-A004 disponible pour Hors Présentiel
et support technique, si nécessaire, avec M. Simatic
10/06/2026 matin : Salle A003-A004 disponible pour Hors
Présentiel
11/06/2026 matin : Salle A003-A004 disponible pour Hors Présentiel
et support technique, si nécessaire, avec M. Simatic
11/06/2026 après-midi :
Salle A003-A004 disponible pour Hors Présentiel et support
technique, si nécessaire, avec M. Simatic.
Point d’avancement (présence obligatoire) avec M. Simatic
16/06/2026 après-midi : Salle A003-A004 disponible pour Hors
Présentiel
17/06/2026 matin : Salle A003-A004 disponible pour Hors Présentiel
et support technique, si nécessaire, avec M. Simatic
17/06/2026 après-midi :
Salle A003-A004 disponible pour Hors Présentiel et support
technique, si nécessaire, avec M. Simatic.
Point d’avancement (présence obligatoire) avec M. Simatic
19/06/2026 matin : Salle A003-A004 disponible pour Hors
Présentiel
19/06/2026 après-midi : Salle A003-A004 disponible pour Hors
Présentiel
22/06/2026 23h55 : Livraison de votre code (afin que l’équipe
encadrante ait le temps de regarder votre code)
23/06/2026 après-midi : Salle A003-A004 disponible pour Hors
Présentiel
26/06/2026, 10h00-13h00 & 14h15-17h45 : Soutenances / Revues de
code / Evaluation de CSC4526/JIN4
Durée de 33’ par projet.
NB : vous devez être présent·e à toutes les soutenances (sauf pour
les personnes qui m’ont prévenu d’une contrainte majeure).
Déroulement
Sans transparent, mais avec votre machine
Démonstration de votre jeu
Démonstration des tests unitaires que vous avez effectués
Présentation de votre diagramme UML des classes
Quelle a été votre utilisation d’IA générative(s) sur ce
micro-projet ?
Pour le monôme ou chaque membre du binôme, le point de code dont
vous êtes le·a plus fier·e
Pour le monôme ou chaque membre du binôme, le point de code qui vous
pose le plus question
Questions / Réponses
Planning des soutenances (pour pouvoir répondre aux contraintes
horaires de certain·es ; sinon, l’ordre de passage sera libre) :
10h00 : Soutenance 1 de monôme/binôme
10h33 : Soutenance 2 de monôme/binôme
11h06 : Soutenance 3 de monôme/binôme
11h39 : Pause
11h54 : Soutenance 4 de monôme/binôme
12h27 : Soutenance 5 de monôme/binôme
13h00 : Pause déjeuner
14h15 : Soutenance 6 de monôme/binôme
14h48 : Soutenance 7 de monôme/binôme
15h21 : Soutenance 8 de monôme/binôme
15h54 : Pause
16h09 : Soutenance 9 de monôme/binôme
16h32 : Soutenance 10 de monôme/binôme
17h05 : Fin des soutenances
19/06/2025 17h05-17h45 : Evaluation CSC4526/JIN4 par les
étudiant·es
Bonne utilisation d’IA générative(s), qui a(/ont) été partenaire(s)
de co-création de l’application
Bonne utilisation de GIT
Bonne utilisation de 1 bibliothèque externe (en plus de SFML ou
Qt)
Qualité du jeu
Lien avec le sujet
Gameplay
Finition
7.1 Exemple de projets
2024-2025
Pour vous donner des idées des attendus sur votre micro-projet, voici
3 exemples de projets 2024-2025 sur le sujet “L’agriculture : La pire
erreur de l’histoire de l’humanité ?” (pour les tester,
git clone du projet, puis exploitez le dossier obtenu avec
la procédure cmake habituelle) :
Ce “jeu de la vie” répond de manière intéressante au sujet de cette
année, l’évolution au cours des phases traduisant bien le “?” du
sujet.
L’interface est agréable.
Au lieu de vecteur de vecteur, vous devriez avoir un seul
vecteur.
Il faudrait remplacer l’héritage des cellules par un pattern
Stratégie qui permette d’ajouter un comportement spécifique à une
cellule (et, évidemment, pas une instance de stratégie par
cellule).
Note = 16,5 / 20 (meilleure note sur les 12 projets réalisés)
Avant de vous dévoiler le sujet, tenez compte de cette remarque
préliminaire : une fois que vous aurez le sujet, vous allez avoir des
idées de réponse. Hé bien, faites une “purge”,
c’est-à-dire éliminez les 5 premières idées qui vous viennent. En effet,
ce sont les idées les plus évidentes, donc les idées les plus
susceptibles d’avoir été trouvées par d’autres collègues, ce qui serait
dommage.
Pour celles·ceux qui veulent développer une application interactive
qui n’est pas un jeu vidéo, pas de contrainte particulière (hormis le
fait que l’application permet de vérifier votre maîtrise des Acquits
d’Apprentissage Visés, cf. grille d’évaluation).
Pour celles·ceux qui veulent développer un jeu vidéo, voici le thème
que doit respecter votre jeu : “Cyrano de Bergerac”, Cyrano de Bergerac
étant :