Micro-projet CSC4526/JIN4

Michel SIMATIC et Loïc JOLY

28 mai 2024

1 Introduction

La présente page donne des précisions par rapport au micro-projet JIN4 qui, cette année 2023-2024, pourra être réalisé en monôme (imposé) ou en binôme.

2 Contraintes par rapport au projet

3 Bibliothèques externes

Votre application doit être développée avec SFML, Thor, Qt ou bien Unreal Engine (en codant en C++, pas de Blueprint).

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 :

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.

4 Quelques ressources

5 Quelques conseils

5.1 Structure de votre projet

        .\CMakeLists.txt
        .\mainLauncher
        .\resources
        .\src
        .\unitTests
add_custom_target(copy-resources ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/visage.xml)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/visage.xml
                   DEPENDS ${CMAKE_SOURCE_DIR}/resources/visage.xml
                   COMMAND ${CMAKE_COMMAND} -E copy
                           ${CMAKE_SOURCE_DIR}/resources/visage.xml
                           ${CMAKE_CURRENT_BINARY_DIR})
add_custom_target(copy-resources ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/resources)
file(GLOB RESOURCES CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/resources/*.*)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/resources
                   DEPENDS ${CMAKE_SOURCE_DIR}/resources
                   COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/resources
                   COMMAND ${CMAKE_COMMAND} -E copy_if_different
                           ${RESOURCES}
                           ${CMAKE_CURRENT_BINARY_DIR}/resources)
add_dependencies(mainLauncher copy-resources)
add_custom_target(copy-resources-unitTests ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/resources)
file(GLOB RESOURCES CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/resources/*.*)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/resources
                   DEPENDS ${CMAKE_SOURCE_DIR}/resources
                   COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/resources
                   COMMAND ${CMAKE_COMMAND} -E copy_if_different
                           ${RESOURCES}
                           ${CMAKE_CURRENT_BINARY_DIR}/resources)
add_dependencies(unitTests copy-resources-unitTests)

5.2 Fichier .gitignore

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 directory used by Visual Studio for project generation
.vs
build
out
# Ignore directories used by CLion for project generation
.idea
cmake-build-debug

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 :

target_link_libraries(mainLauncher PUBLIC src pugixml sfml-system sfml-window sfml-graphics sfml-audio sfml-network)
target_link_libraries(src PUBLIC pugixml sfml-graphics)
target_link_libraries(unitTests GTest::gtest_main src pugixml sfml-system sfml-window sfml-graphics sfml-audio sfml-network)

5.4 Zoom sur la bibliothèque audio SFML (openal32.dll est requis)

En appliquant la section précédente, il se peut que vous ajoutiez la bibliothèque audio SFML qui requiert la DLL openal32.dll sous Windows. Vous pouvez vous contenter d’installer cette bibliothèque à partir de l’installateur situé en https://www.openal.org/downloads. Mais toutes les personnes qui cloneront votre projet devront aussi faire cette installation !

Aussi, nous vous proposons la méthode suivante :

  1. Téléchargez l’archive lib_openal32.zip et extrayez son contenu à la racine de votre projet : Vous vous retrouvez avec un répertoire lib_openal32 qui est au même niveau que votre fichier CMakeLists.txt principal.
  2. Ajoutez à mainLauncher/CMakeLists.txt les lignes :
if(WIN32)
   file(GLOB_RECURSE DYNAMIC_LIBS CONFIGURE_DEPENDS ${CMAKE_SOURCE_DIR}/lib_openal32/${ARCH}/*.dll)
   file(COPY ${DYNAMIC_LIBS} DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
endif()

Avec cette méthode, plus besoin d’installer la bibliothèque openal32.dll.

6 Prochaines étapes

7 Grille d’évaluation (en cours d’affinage)

Par ordre décroissant d’importance :

  1. Fonctionnement de l’application
  2. Qualité de votre code
  3. Livraison du code en temps et en heure
  4. Bonne utilisation de GIT
  5. Bonne utilisation de 2 bibliothèques externes (en plus de SFML, Thor, Qt ou Unreal Engine)
  6. Qualité du jeu

8 Sujet

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.

Et le sujet de cette année est :