Jeu du Démineur en C#
Projet de Développement Logiciel
Contexte et Objectifs
Ce projet, réalisé en une semaine, avait pour objectif de mettre en pratique les fondamentaux du développement logiciel en C# et de l'architecture MVC. Le défi était de recréer le jeu classique du Démineur en développant une application de bureau fonctionnelle avec une logique de jeu robuste.
Fonctionnalités Clés
- Interface graphique intuitive développée avec Windows Forms.
- Plusieurs niveaux de difficulté (Facile, Moyen, Difficile).
- Placement de drapeaux pour marquer les emplacements de bombes suspectées.
- Génération aléatoire des bombes qui évite la zone du premier clic.
- Affichage clair des bombes adjacentes pour guider le joueur.
Galerie d'Images
Cliquez sur les images pour les afficher en plein écran.


Défis Techniques et Solutions
Le principal défi était de bien séparer les responsabilités pour maintenir un code propre et évolutif, même dans un projet rapide.
Architecture MVC
Pour éviter un code monolithique, j'ai adopté le pattern Modèle-Vue-Contrôleur :
- Modèle : Gère toute la logique du jeu (la grille, l'emplacement des bombes, l'état des cellules).
- Vue (Windows Forms) : Responsable de l'affichage de la grille et des boutons.
- Contrôleur : Fait le lien entre le Modèle et la Vue, en gérant les clics et en orchestrant les mises à jour.
Extraits de Code Illustratifs
Voici quelques extraits montrant la logique d'implémentation de la Vue et du Contrôleur.
1) GameView.cs
– Affichage de la grille
// Extrait de GameView.cs
public class GameView : Form
{
public List<Button> Buttons { get; private set; }
// ...
private void InitializeGameBoard(int gridSize, int cellSize)
{
TablePanel = new TableLayoutPanel { /* ... */ };
for (int i = 0; i < gridSize; i++)
{
for (int j = 0; j < gridSize; j++)
{
CustomButton btn = new CustomButton { /* ... */ };
Buttons.Add(btn);
TablePanel.Controls.Add(btn, j, i);
}
}
this.Controls.Add(TablePanel);
}
}
2) MenuForm.cs
– Lancement du jeu
// Extrait de MenuForm.cs (Contrôleur initial)
private void DémarrerJeu(int gridSize, int numberOfBombs)
{
this.Hide();
Form1 gameForm = new Form1(gridSize, numberOfBombs);
gameForm.ShowDialog();
this.Close();
}
L'architecture complète et l'intégralité du code source sont disponibles sur GitHub.
Voir le projet sur GitHubApprentissages et Bilan
Compétences Acquises
- Mise en pratique du pattern d'architecture MVC.
- Gestion des événements UI dans un environnement Windows Forms.
- Maîtrise des bases de la programmation C# et de l'environnement Visual Studio.
- Développement d'une logique algorithmique pour la récursivité (révélation des cases vides adjacentes).
Pistes d'Amélioration Futures
Avec plus de temps, plusieurs fonctionnalités pourraient enrichir l'expérience :
- Ajout d'un chronomètre pour mesurer le temps de jeu.
- Mise en place d'un système de sauvegarde des meilleurs scores.
- Création de thèmes visuels pour personnaliser l'apparence du plateau.