Pour le projet de fin de session de mon cours de programmation, notre enseignant nous avait demandé de développer un jeu de survie en C# en équipe de deux. Le concept : explorer une carte 2D, collecter des ressources et survivre. Simple en apparence, le développement nous a néanmoins réservé quelques surprises intéressantes.
Le concept du jeu
Le joueur se déplace sur une carte générée aléatoirement et doit collecter différentes ressources pour survivre. Celles-ci peuvent ensuite être combinées afin de créer des outils ou des objets utiles. L'objectif était de créer une boucle de jeu engageante tout en conservant une interface console claire.
Les fonctionnalités développées
L'exploration de la carte
La carte est représentée par une grille 2D, où chaque case correspond à un type de terrain et peut contenir une ressource spécifique, collectable selon un certain pourcentage de probabilité. Le système de déplacement s'assure que le joueur reste dans les limites de la carte et affiche celle-ci mise à jour après chaque mouvement. La gestion correcte des coordonnées X et Y a nécessité quelques ajustements au début pour éviter les bugs de position.
Le système d'inventaire
L'inventaire stocke les ressources collectées (bois, pierre, nourriture) et permet au joueur de voir ce qu'il possède. La gestion s'est faite avec des listes qui se mettent à jour dynamiquement selon les actions du joueur.
Le crafting
C'est la partie qui a demandé le plus de réflexion. Chaque recette nécessite des ressources spécifiques et produit un nouvel objet. Par exemple, combiner du bois et de la pierre crée une hache. Le défi était de vérifier que le joueur possède bien tous les ingrédients avant de permettre la fabrication.
La sauvegarde en JSON
Pour permettre de reprendre une partie, toutes les données importantes (position du joueur, inventaire, état de la carte) sont sauvegardées dans un fichier JSON. La bibliothèque Newtonsoft.Json a simplifié cette partie, même si gérer les cas où le fichier est manquant ou corrompu a nécessité quelques vérifications supplémentaires.
Les défis rencontrés
La gestion des erreurs
Il fallait anticiper toutes les situations où le joueur pourrait entrer quelque chose d'invalide : une direction qui n'existe pas, essayer de crafter sans avoir les ressources, tenter de se déplacer hors de la carte. L'ajout de validations et de messages d'erreur clairs a beaucoup amélioré l'expérience.
L'organisation du code
Au départ, tout était un peu mélangé dans quelques fichiers. Restructurer le code pour séparer la logique du jeu, la gestion de l'affichage et la sauvegarde a rendu le projet beaucoup plus maintenable. Une bonne organisation fait vraiment la différence quand on doit modifier ou ajouter des fonctionnalités.
Ce que ce projet m'a appris
Au-delà des compétences techniques en C#, ce projet m'a montré l'importance de tester régulièrement et de ne pas sous-estimer le temps nécessaire pour déboguer. Certains bugs qui semblaient simples ont pris plusieurs heures à résoudre, souvent à cause de petites erreurs de logique.
La gestion des tableaux et listes 2D demande aussi de la rigueur. Une erreur dans les coordonnées et tout le système de déplacement devient imprévisible. Documenter son code et créer des fonctions claires aide énormément pour éviter ce genre de problèmes.
Améliorations futures
Si je devais continuer ce projet, j’aimerais ajouter un système de combat pour affronter des ennemis, des quêtes pour explorer la carte et trouver des trésors, une génération procédurale pour rendre chaque partie unique, et peut-être même une petite interface graphique pour rendre l’expérience plus vivante que la console.