← Retour au blog

Mon premier jeu de survie en C#

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.

Conseil : Prendre le temps de bien structurer son code dès le début évite de devoir tout réorganiser plus tard.

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.

Code source : Le projet complet est disponible sur GitHub pour ceux qui veulent voir l'implémentation en détail.