Fork Knight – Matchmaker System

Projet de synthèse pour le module SDD Avancées

1 Contexte du projet

Fork Knight (obviously generated by some random AI)

Bienvenue dans le royaume culinaire de Fork Knight, où les chevaliers-fourchettes s’affrontent pour savoir qui sera le plus affûté du royaume ! Dans Fork Knight, chaque partie voit s’affronter plusieurs joueurs dans des batailles épiques pour conquérir des territoires gastronomiques. Dans le cadre du développement de ce nouveau totalement original, vous êtes chargé(e) de concevoir le système de matchmaking du jeu.

Un système de matchmaking est un mécanisme qui permet de mettre en relation des joueurs pour qu’ils puissent s’affronter dans des parties équilibrées, en fonction de leur niveau et de leurs compétences. Ce qui est crucial pour garantir une expérience de jeu agréable et compétitive pour tous les participants.

À termes, vous devrez créer un programme en langage C capable de gérer :

  • des joueurs (leurs statistiques, niveau, et indice de piquant) ;
  • une file d’attente pour rejoindre une partie ;
  • un système de mise en relation automatique selon la compétence des joueurs ;
  • et enfin, la création de matchs équilibrés.

L’ensemble du projet se construira au fil de plusieurs séances de TP, chacune apportant une brique technique jusqu’au système complet.

2 Objectifs pédagogiques

Ce projet sert de synthèse des apprentissages du module. Les objectifs principaux sont :

  • Manipuler les types structurés et les tableaux (statiques et dynamiques).
  • Utiliser des listes chaînées dans l’implémentation de la file d’attente.
  • Concevoir un petit simulateur fonctionnel intégrant ces structures de données.
  • Approfondir la compréhension des files de priorité à travers un cas concret (matchmaking).

3 Découpage du projet

Le projet sera découpé en 6 parties où le travail sera initié en classe : le code produit dans une partie servira de base à la partie suivante. Vous devrez impérativement soumettre le code de la partie courante avant le début de la prochaine séance de cours.

3.1 Partie 1 — Modélisation des données et structures de base

  • Définir la structure Player représentant un joueur ainsi que l’implémentation des fonctions de base pour l’initialisation et l’affichage.
  • Créer un tableau statique de joueurs fictifs.
  • Afficher les informations de ces joueurs en console.
  • Implémenter des fonctions utilitaires pour le tableau : ajouter, supprimer, rechercher un joueur par pseudo, trier par indice de piquant.
Compétences visées

types structurés, tableaux statiques, manipulation de structures, algorithmes de tri et recherche

3.2 Partie 2 — Gestion dynamique des joueurs

  • Transformer le tableau statique en tableau dynamique.
  • Implémenter l’ajout et la suppression de joueurs avec malloc, realloc, free.
  • Charger et sauvegarder les joueurs depuis/vers un fichier texte.
  • Assurer la non régression des fonctionnalités précédentes (ajout, suppression, recherche, tri).
  • Prévoir un menu simple en console.
Compétences visées

allocation dynamique, gestion mémoire, manipulation d’ensembles de données

3.3 Partie 3 — Matchmaking basique (File d’attente)

  • Introduire la notion de file d’attente de joueurs.
  • Implémenter une file avec insertion et retrait au moyen de listes chaînées.
  • Ajouter les joueurs en attente de match dans la file.
  • Afficher le contenu de la file.
Compétences visées

structures en file, gestion d’ordonnancement

3.4 Partie 4 — Matchmaking intelligent (File de priorité)

  • Implémenter file de priorité basée sur l’indice de compétence des joueurs.
  • Implémenter les fonctions de base pour une file de priorité : insertion triée, extraction du joueur avec le plus haut indice de compétence.
  • Simuler l’appariement de joueurs de compétence similaires.
Compétences visées

file de priorité, insertion triée

3.5 Partie 5 — Gestion des matchs et parties

  • Définir la structure Match permettant de regrouper plusieurs joueurs.
  • Implémenter la création de matchs à partir des joueurs extraits de la file gérant le matchmaking.
  • Gérer la suppression des joueurs de la file après création du match.
  • Afficher les informations des matchs créés.
Compétences visées

manipulation de listes, regroupement, mise à jour de structures liées.

3.6 Partie 6 — Simulation complète et finalisation

  • Implémenter une boucle principale simulant le fonctionnement du matchmaking.
  • Ajouter un affichage lisible (console ou mini interface texte).
  • Simuler des parties aléatoires et ajuster les statistiques des joueurs après chaque partie.
  • Nettoyer et documenter le code.
Compétences visées

intégration complète, simulation, robustesse mémoire.

4 Livrables attendus pour la fin du projet

  1. Un dépôt Github contenant le code source complet (.c + .h) bien organisé et commenté.
  2. Compte-rendu synthétique (sous la forme d’un README) (1 page max) décrivant l’architecture du programme, les structures utilisées et les choix faits ainsi que les éventuelles difficultés rencontrées et des bugs connus.

Le rendu final doit permettre d’exécuter le programme et de simuler au moins 5 cycles complets d’appariement de joueurs (en utilisant la file d’attente basique et la file de priorité).

5 Évaluation

Travail en binôme

Le projet doit être réalisé en binôme. Chaque membre doit contribuer activement au code et à la documentation. Le travail doit être équitablement réparti. Il est possible que les membres du binôme n’aient pas la même note finale si la contribution de l’un est jugée insuffisante.

Cadrage de l’utilisation d’une IA générative

L’utilisation d’outils d’IA générative (comme ChatGPT, GitHub Copilot, etc.) est autorisée pour vous assister dans la compréhension des concepts, la génération d’exemples de code, ou la rédaction de documentation. Cependant, il est impératif que le code final soumis soit votre propre travail et reflète votre compréhension des concepts enseignés.

Vous devez être capable d’expliquer et de justifier chaque partie du code soumis. Toute utilisation d’IA générative doit être explicitement mentionnée dans le compte-rendu, en précisant les parties du code ou de la documentation qui en ont bénéficié.

Le non-respect de cette consigne sera considéré comme une infraction aux règles d’intégrité académique et pourra entraîner des sanctions sévères.

Retard de soumission

La date et l’heure de soumission feront foi pour le calcul du retard. Les retards de soumissions seront pénalisés et pourront entraîner une réduction de la note finale.

Vous serez évalué(e)s sur les critères suivants :

Critère Description Pondération
Fonctionnalité Le programme répond-il au cahier des charges ? 40 %
Qualité du code Lisibilité, modularité, commentaires 25 %
Robustesse Gestion d’erreurs, mémoire, cohérence 20 %
Documentation Clarté du compte-rendu et de l’organisation 10 %
Originalité Bonus facultatif +5 %

6 Pistes d’amélioration (bonus)

  • Ajouter un mode “party” où plusieurs joueurs rejoignent ensemble.
  • Implémenter un tri dynamique des joueurs selon différents critères.
  • Simuler des match avec des bots pour remplir les parties.
  • Créer une mini interface texte avec des couleurs (via ANSI codes).

7 Conseils pour la réussite

  • Construisez pas à pas : chaque séance consolide la précédente.
  • Testez régulièrement vos fonctions isolément avant d’intégrer.
  • Répartissez les tâches afin de permettre à chacun de contribuer activement.
  • Soignez la présentation du code : noms clairs, indentation constante, fichiers séparés (main.c, player.c, match.c, etc.).

8 Démarrer le projet

Cliquez sur les liens suivants pour accéder au GitHub Classroom associé à votre groupe et commencer le projet :

Groupe Lien Github Classroom
Groupe B1-CS1 https://classroom.github.com/a/fN8A5eZM
Groupe B1-CS2 https://classroom.github.com/a/1MNFdiik
Groupe B1-DEV1 https://classroom.github.com/a/Ud8jBzKO
Groupe L1-ICS https://classroom.github.com/a/GN-teWUj
Groupe L1-IN https://classroom.github.com/a/ofFaAvIC
Groupe B1-BDX-CS https://classroom.github.com/a/Athm93ch
Groupe B1-BDX-DEV https://classroom.github.com/a/umXM1ePG

Une fois que vous aurez accepté l’invitation :

  1. Si vous êtes le premier du binôme à accepter, créez une nouvelle équipe avec pour nom votre nom et celui de votre binôme (ex. dupont-martin si les deux membres sont Dupont et Martin).
  2. Si vous êtes le second, rejoignez l’équipe créée par votre binôme.
  3. Vous serez redirigé(e) vers votre dépôt GitHub personnel contenant le code de départ. Sur cette page, cliquez sur le bouton Code puis copiez l’URL du dépôt.
  4. Ouvrez CLion puis sélectionnez New Project from Version Control.
  5. Collez l’URL du dépôt dans le champ URL et cliquez sur Clone.
  6. Ouvrez ensuite un terminal dans CLion (Git Bash si vous êtes sous Windows) et exécutez la commande ./setup.sh pour initialiser le projet.

9 Conclusion

À la fin du projet, vous disposerez d’un simulateur complet de matchmaking, combinant :

  • gestion dynamique de données ;
  • structures de données linéaires avancées ;
  • logique algorithmique réelle utilisée dans les jeux vidéo.