- Comprendre la structure de base et l’organisation des fichiers dans le projet
- Créer la structure de données
Playeret implémenter les fonctions de base pour manipuler un tableau statique de joueurs (ajout, recherche, suppression, tri).
- Cours sur les structures en C
- Documentation sur la gestion de la mémoire dynamique (
malloc,free) - Références sur les fonctions de manipulation de chaînes (
strncpy,strcmp)
Ces fichiers existent déjà dans le template et sont à compléter (ne pas les renommer ni les déplacer, et compléter uniquement les fonctions de la Partie 1) :
src/
├── player.c # À compléter : fonctions de gestion des joueurs
└── array-utils.c # À compléter : fonctions de manipulation du tableau
1 Structure du joueur à implémenter
Dans Fork Knight, chaque joueur possède :
- Un pseudo (identifiant)
- Un niveau (expérience)
- Un Spicy Index (force relative)
- Des statistiques (parties, victoires, défaites)
- Un état (en file d’attente ou non)
Fichier : headers/player.h
typedef struct {
char username[30]; // Pseudo du joueur
int level; // Niveau (1-100)
int spicyIndex; // Score de compétence
int numGames; // Total de parties
int numWins; // Victoires
int numLosses; // Défaites
int inQueue; // En file ? (0=non, 1=oui)
} Player;2 Fonctions à implémenter
2.1 Création d’un joueur
Player* createPlayer(const char* username);Description :
Crée dynamiquement un nouveau joueur dont l’username est username. Initialise level à 1, spicyIndex à 1000, et tous les autres champs à zéro. Retourne un pointeur vers le joueur créé. Retourne NULL en cas d’échec d’allocation ou si username est NULL.
- Penser à inclure les bibliothèques nécessaires :
<stdlib.h>,<string.h> - Bien vérifier que l’allocation réussit avant de continuer
- Utilisez
strncpy()pour copier leusernamedans la structure de manière sécurisée
2.2 Libération d’un joueur
void destroyPlayer(Player* player);Description :
Libère la mémoire allouée pour le joueur pointé par player. Ne fait rien si player est NULL.
2.3 Affichage détaillé d’un joueur
void displayPlayer(const Player* player);Description :
Affiche toutes les informations détaillées d’un joueur. Ne fait rien si player est NULL.
Format suggéré :
==========================================
Player: ForkMaster
Level: 10 | Spicy Index: 1200
Games: 0 | Wins: 0 | Losses: 0
In Queue: No
==========================================
2.4 Affichage condensé d’un joueur
void displayPlayerMini(const Player* player);Description :
Affiche une version condensée des informations du joueur (le nom, le niveau et le spicy index) sur une seule ligne. Ne fait rien si player est NULL.
Format suggéré :
[ForkMaster | Lvl: 10 | SI: 1200]
2.5 Ajouter un joueur au tableau statique de pointeurs sur joueurs
int addPlayer(Player* players[], int* count, Player* player);Description :
Ajoute le joueur player à un tableau statique de joueurs players si la capacité maximale MAX_PLAYERS (100) n’est pas atteinte. Le paramètre count indique le nombre actuel de joueurs dans le tableau et sera incrémenté si l’ajout réussit. Retourne 1 si l’ajout a réussi, 0 sinon.
La capacité maximale MAX_PLAYERS du tableau statique est définie dans array-utils.h. Vérifiez que *count < MAX_PLAYERS avant d’ajouter.
2.6 Recherche d’un joueur par pseudo
int searchPlayerByUsername(Player* players[], int count, const char* username);Description : Retourne l’index du joueur dont le pseudo est username dans players, ou -1 s’il n’existe pas. Comparer les noms avec strcmp().
2.7 Suppression d’un joueur
int removePlayer(Player* players[], int* count, const char* username);Description : Supprime le joueur nommé username s’il existe : trouve son index, libère sa mémoire, décale les éléments vers la gauche, décrémente *count. Retourne 1 si supprimé, sinon 0.
2.8 Tri par Spicy Index (décroissant)
void sortPlayersBySpicyIndex(Player* players[], int count);Description : Trie players du plus grand au plus petit spicyIndex. Utilisez un tri simple (bulle ou insertion).
Pensez à utiliser une fonction comparePlayer(const Player*, const Player*) pour simplifier le tri.
2.9 Affichage de tous les joueurs
void displayAllPlayers(Player* players[], int count);Description : Affiche un en-tête, chaque joueur via displayPlayerMini(), puis le total.
Format suggéré :
=== Liste des joueurs ===
[ForkMaster | Lvl: 10 | SI: 1200]
[SpoonyKnight | Lvl: 5 | SI: 800]
[KnifeLord | Lvl: 15 | SI: 1500]
Total: 3 joueurs